<?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>107300</bug_id>
          
          <creation_ts>2013-01-18 10:24:39 -0800</creation_ts>
          <short_desc>Text Autosizing: complete fix for reddit.com (not for submitting, just for general review).</short_desc>
          <delta_ts>2016-09-19 15:13:19 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>108384</dependson>
    
    <dependson>108411</dependson>
    
    <dependson>109054</dependson>
    
    <dependson>109093</dependson>
    
    <dependson>109573</dependson>
    
    <dependson>109825</dependson>
    
    <dependson>110490</dependson>
          <blocked>84186</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Vayvod">avayvod</reporter>
          <assigned_to name="Anton Vayvod">avayvod</assigned_to>
          <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>johnme</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>810783</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-18 10:24:39 -0800</bug_when>
    <thetext>Text Autosizing: complete fix for reddit.com (not for submitting, just for general review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810784</commentid>
    <comment_count>1</comment_count>
      <attachid>183497</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-18 10:25:53 -0800</bug_when>
    <thetext>Created attachment 183497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810806</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-18 10:37:30 -0800</bug_when>
    <thetext>John, could you take a quick look, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813470</commentid>
    <comment_count>3</comment_count>
      <attachid>184059</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-22 15:29:11 -0800</bug_when>
    <thetext>Created attachment 184059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817882</commentid>
    <comment_count>4</comment_count>
      <attachid>185010</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-28 11:03:06 -0800</bug_when>
    <thetext>Created attachment 185010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819463</commentid>
    <comment_count>5</comment_count>
      <attachid>185335</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-29 16:25:54 -0800</bug_when>
    <thetext>Created attachment 185335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820314</commentid>
    <comment_count>6</comment_count>
      <attachid>185518</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-01-30 10:42:30 -0800</bug_when>
    <thetext>Created attachment 185518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231362</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-09-19 15:13:19 -0700</bug_when>
    <thetext>Marking this bug Resolved WontFix because the TEXT_AUTOSIZING feature was removed in &lt;https://trac.webkit.org/changeset/206119&gt; (bug #162167). See bug 84186, comment 32 for more details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183497</attachid>
            <date>2013-01-18 10:25:53 -0800</date>
            <delta_ts>2013-01-22 15:29:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107300-20130118182251.patch</filename>
            <type>text/plain</type>
            <size>20280</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTNiMWM5YWFmODY0NTZi
ZWM1MDRjZTRjMGE4MGNlNjNhNmFlYTNiMC4uYTEwYTk3OGJhMzg3NjAxMTAyOWJhOTZjMzA3OTg0
MjJiNGY3ZTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTE4ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbXBsZXRlIGZpeCBmb3IgcmVkZGl0LmNvbSAobm90IGZvciBzdWJtaXR0aW5nLCBqdXN0
IGZvciBnZW5lcmFsIHJldmlldykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29tcGFy
ZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJlSW5k
aWNlc0J5V2lkdGhEaWZmZXJlbmNlOjpDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBhcmVJbmRpY2VzQnlXaWR0aERpZmZlcmVuY2U6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI6OkF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OnNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjpwcm9jZXNzVWJlckNsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpp
c1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc0F1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKEF1dG9zaXppbmdDbHVzdGVyKToK
KyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOgorCiAyMDEzLTAxLTEyICBSb2JlcnQgSG9nYW4gIDxy
b2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdmFpbGFibGUgaGVpZ2h0IHNob3VsZCByZXNw
ZWN0IG1pbiBhbmQgbWF4IGhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuY3BwCmluZGV4IGNkMWI1ZmFmMzg5ODZkMmMyNGU2ZjhkNmQ0YjE2NGFlYWMwY2Q5YmIu
LmM3OGVmYjBhMjdlY2I5N2FlMzYyMGEwNDliYTJlZTAwOGRhY2NhZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTM3LDE2ICszNywzMCBAQAogCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIHN0cnVjdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm8gewogICAgIEludFNpemUgd2luZG93U2l6ZTsKICAgICBJbnRTaXplIG1p
bkxheW91dFNpemU7CiB9OwogCitjbGFzcyBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNl
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNl
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRpZmZzKTogbV9kaWZmcyhkaWZmcykgeyB9CisKKyAgICBi
b29sIG9wZXJhdG9yKCkoc2l6ZV90IGluZGV4MSwgc2l6ZV90IGluZGV4MikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2RpZmZzW2luZGV4MV0gPCBtX2RpZmZzW2luZGV4Ml07CisgICAg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIG1fZGlmZnM7Cit9OwogCiBz
dGF0aWMgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiBmb3JtSW5wdXRUYWdzKCkKIHsKQEAg
LTYwLDYgKzc0LDEzIEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4mIGZvcm1J
bnB1dFRhZ3MoKQogICAgIHJldHVybiBmb3JtSW5wdXRUYWdzOwogfQogCitUZXh0QXV0b3NpemVy
OjpBdXRvc2l6aW5nQ2x1c3Rlcjo6QXV0b3NpemluZ0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0
ZXIpCisgICAgOiBjbHVzdGVyQmxvY2soY2x1c3RlcikKKyAgICAsIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQoMCkKKyAgICAsIG1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCgyMDApCit7
Cit9CisKIFRleHRBdXRvc2l6ZXI6OlRleHRBdXRvc2l6ZXIoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKIHsKQEAgLTY5LDYgKzkwLDQwIEBAIFRleHRBdXRv
c2l6ZXI6On5UZXh0QXV0b3NpemVyKCkKIHsKIH0KIAorVmVjdG9yPFZlY3RvcjxUZXh0QXV0b3Np
emVyOjpBdXRvc2l6aW5nQ2x1c3Rlcj4gPiBUZXh0QXV0b3NpemVyOjpzcGxpdE5hcnJvd0NsdXN0
ZXJzQnlXaWR0aERpZmZlcmVuY2UoY29uc3QgQXV0b3NpemluZ0NsdXN0ZXImIHBhcmVudENsdXN0
ZXIpCit7CisgICAgY29uc3QgVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMgPSBw
YXJlbnRDbHVzdGVyLm5hcnJvd0Rlc2NlbmRhbnRzOworICAgIGNvbnN0IGZsb2F0IG1heERpZmZE
aWZmZXJlbmNlID0gMTAwOworICAgIFZlY3RvcjxmbG9hdD4gZGlmZmVyZW5jZXM7CisgICAgZGlm
ZmVyZW5jZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjbHVzdGVycy5zaXplKCkpOworICAgIFZl
Y3RvcjxzaXplX3Q+IGNsdXN0ZXJJbmRpY2VzOworICAgIGNsdXN0ZXJJbmRpY2VzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY2x1c3RlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZsb2F0IGNsdXN0ZXJXaWR0aCA9
IGNsdXN0ZXJzW2ldLmNsdXN0ZXJCbG9jay0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgICAg
ICBmbG9hdCBwYXJlbnRUZXh0V2lkdGggPSBwYXJlbnRDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0Fs
bFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgZGlmZmVyZW5jZXMuYXBwZW5k
KHBhcmVudFRleHRXaWR0aCAtIGNsdXN0ZXJXaWR0aCk7CisgICAgICAgIGNsdXN0ZXJJbmRpY2Vz
LmFwcGVuZChpKTsKKyAgICB9CisgICAgc3RkOjpzb3J0KGNsdXN0ZXJJbmRpY2VzLmJlZ2luKCks
IGNsdXN0ZXJJbmRpY2VzLmVuZCgpLCBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKGRp
ZmZlcmVuY2VzKSk7CisgICAgVmVjdG9yPFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4gPiB1YmVy
Q2x1c3RlcnM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbHVzdGVySW5kaWNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAodWJlckNsdXN0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHViZXJDbHVzdGVycy5hcHBlbmQoVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPigpKTsKKwor
ICAgICAgICBzaXplX3QgY3VycmVudEluZGV4ID0gY2x1c3RlckluZGljZXNbaV07CisgICAgICAg
IGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBjdXJyZW50Q2x1c3RlciA9IGNsdXN0ZXJzW2N1cnJl
bnRJbmRleF07CisgICAgICAgIHViZXJDbHVzdGVycy5sYXN0KCkuYXBwZW5kKGN1cnJlbnRDbHVz
dGVyKTsKKworICAgICAgICBpZiAoaSArIDEgPCBjbHVzdGVySW5kaWNlcy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnREaWZmZXJlbmNlID0gZGlmZmVyZW5jZXNbY3VycmVudElu
ZGV4XTsKKyAgICAgICAgICAgIGZsb2F0IG5leHREaWZmZXJlbmNlID0gZGlmZmVyZW5jZXNbY2x1
c3RlckluZGljZXNbaSArIDFdXTsKKyAgICAgICAgICAgIGlmIChhYnMobmV4dERpZmZlcmVuY2Ug
LSBjdXJyZW50RGlmZmVyZW5jZSkgPiBtYXhEaWZmRGlmZmVyZW5jZSkKKyAgICAgICAgICAgICAg
ICB1YmVyQ2x1c3RlcnMuYXBwZW5kKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4oKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHViZXJDbHVzdGVyczsKK30KKwogYm9vbCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiB7CiAgICAg
Ly8gRklYTUU6IFRleHQgQXV0b3NpemluZyBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gbV9k
b2N1bWVudC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT51c2VGaXhlZExheW91dCgpCkBA
IC0xMDYsMjIgKzE2MSw1NSBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJl
bmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6
aW5nQ2x1c3RlcihjbHVzdGVyKSkKICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogCi0gICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCBsYXlv
dXRSb290LCB3aW5kb3dJbmZvKTsKKyAgICBBdXRvc2l6aW5nQ2x1c3RlciBjbHVzdGVySW5mbyhj
bHVzdGVyKTsKKyAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlv
dXRSb290LCB3aW5kb3dJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXpp
bmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzVWJl
ckNsdXN0ZXIoVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMsIGNvbnN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3sKKyAgICBmbG9hdCBtYXhUZXh0V2lk
dGggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBm
aW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3RlcnNbaV0uY2x1c3RlckJsb2Nr
KTsKKyAgICAgICAgY2x1c3RlcnNbaV0uYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQ7CisgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgbWF4VGV4dFdpZHRoID0g
bWF4KHRleHRXaWR0aCwgbWF4VGV4dFdpZHRoKTsKKyAgICB9CisgICAgZmxvYXQgdG90YWxUZXh0
V2lkdGggPSAwOworICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVzT2ZUZXh0ID0gNDsKKyAgICBmbG9h
dCBtaW5UZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggKiBtaW5MaW5lc09mVGV4dDsKKyAgICBib29s
IHNob3VsZEJlQXV0b3NpemVkID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
bHVzdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOworICAg
ICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjbHVzdGVyc1tpXS5ibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBjbHVzdGVyc1tpXSwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAg
ICB0b3RhbFRleHRXaWR0aCArPSB0ZXh0V2lkdGg7CisgICAgICAgIGlmICh0b3RhbFRleHRXaWR0
aCA+PSBtaW5UZXh0V2lkdGgpIHsKKyAgICAgICAgICAgIHNob3VsZEJlQXV0b3NpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHByb2Nlc3NDbHVzdGVy
KGNsdXN0ZXJzW2ldLCBjbHVzdGVyc1tpXS5jbHVzdGVyQmxvY2ssIGNsdXN0ZXJzW2ldLmNsdXN0
ZXJCbG9jaywgd2luZG93SW5mbywgbWF4VGV4dFdpZHRoLCBzaG91bGRCZUF1dG9zaXplZCk7Cit9
CisKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoQXV0b3NpemluZ0NsdXN0ZXIm
IGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7CiAg
ICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28gZXNw
ZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRha2lu
ZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNvbW1v
biBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUgb2YK
ICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRoYXQg
Y29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0ZWFk
LgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXIpOwotICAgIGZsb2F0IHRleHRXaWR0
aCA9IGJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBj
bHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLmNsdXN0ZXJCbG9jayk7CisgICAgZmxvYXQgdGV4dFdp
ZHRoID0gY2x1c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxX
aWR0aCgpOworICAgIGJvb2wgc2hvdWxkQmVBdXRvc2l6ZWQgPSBjbHVzdGVyU2hvdWxkQmVBdXRv
c2l6ZWQoY2x1c3RlckluZm8sIHRleHRXaWR0aCk7CisgICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3Rl
ckluZm8sIGNvbnRhaW5lciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8sIHRleHRXaWR0aCwgc2hv
dWxkQmVBdXRvc2l6ZWQpOworfQogCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVy
KEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZv
JiB3aW5kb3dJbmZvLCBmbG9hdCB0ZXh0V2lkdGgsIGJvb2wgc2hvdWxkQmVBdXRvc2l6ZWQpCit7
CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIgPSBjbHVzdGVySW5mby5jbHVzdGVyQmxv
Y2s7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCB0ZXh0V2lkdGgpKSB7CisgICAgaWYgKHNo
b3VsZEJlQXV0b3NpemVkKSB7CiAgICAgICAgIGludCBsb2dpY2FsV2luZG93V2lkdGggPSBjbHVz
dGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndp
ZHRoKCkgOiB3aW5kb3dJbmZvLndpbmRvd1NpemUuaGVpZ2h0KCk7CiAgICAgICAgIGludCBsb2dp
Y2FsTGF5b3V0V2lkdGggPSBjbHVzdGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lu
ZG93SW5mby5taW5MYXlvdXRTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUu
aGVpZ2h0KCk7CiAgICAgICAgIC8vIElnbm9yZSBib3ggd2lkdGggaW4gZXhjZXNzIG9mIHRoZSBs
YXlvdXQgd2lkdGgsIHRvIGF2b2lkIGV4dHJlbWUgbXVsdGlwbGllcnMuCkBAIC0xMzIsMTAgKzIy
MCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBj
bHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLAogICAgICAgICBtdWx0aXBsaWVyID0gc3Rk
OjptYXgoMS4wZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lciht
dWx0aXBsaWVyLCBjb250YWluZXIsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHN1YnRyZWVSb290
LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5l
ciwgY2x1c3RlckluZm8sIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKworICAgIFZlY3RvcjxW
ZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gdWJlckNsdXN0ZXJzID0gc3BsaXROYXJyb3dDbHVz
dGVyc0J5V2lkdGhEaWZmZXJlbmNlKGNsdXN0ZXJJbmZvKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHViZXJDbHVzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgcHJvY2Vzc1ViZXJDbHVz
dGVyKHViZXJDbHVzdGVyc1tpXSwgd2luZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFp
bmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJ
bmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxp
ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5m
bywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJiB3aW5kb3dJbmZvKQogewogICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIoY29u
dGFpbmVyKSk7CiAKQEAgLTE1MSwxMCArMjQzLDE1IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJv
Y2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBj
CiAgICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0
aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2Nl
bmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVz
dGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCi0gICAgICAgICAg
ICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIGRl
c2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAg
ICAgICBpZiAoaXNTdGFuZGFsb25lQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBj
bHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkgeworICAgICAgICAgICAgICAgIEF1
dG9zaXppbmdDbHVzdGVyIGRlc2NlbmRhbnRBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50Qmxv
Y2spOworICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRBdXRvc2l6aW5n
Q2x1c3RlciwgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5k
YW50QmxvY2ssIGNsdXN0ZXJJbmZvKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2QgbGlrZSB0
byBjb21iaW5lIGFsbCBzdWNoIGNsdXN0ZXJzIGJ5IHRoZSB3aWR0aCBkaWZmZXJlbmNlIGludG8g
dWJlci1jbHVzdGVycyBhbmQgYXV0b3NpemUKKyAgICAgICAgICAgICAgICAvLyB0aGVtIHNpbWls
YXJseS4gU28gc2F2ZSBpdCBmb3Igbm93IGFuZCBwcm9jZXNzIGxhdGVyIG9uIHRvZ2V0aGVyIHdp
dGggdGhlIHJlc3Qgb2Ygc3VjaCBibG9ja3MuCisgICAgICAgICAgICAgICAgY2x1c3RlckluZm8u
bmFycm93RGVzY2VuZGFudHMuYXBwZW5kKEF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9j
aykpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5l
cihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXJJbmZvLCBkZXNjZW5kYW50Qmxv
Y2ssIHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5Q
cmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJl
ZVJvb3QpOwogICAgIH0KQEAgLTIxNyw3ICszMTQsMjUgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzUGFydGlhbEF1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgQXV0b3NpemluZ0NsdXN0
ZXImIHBhcmVudEF1dG9zaXppbmdDbHVzdGVyKQoreworICAgIC8vIFVwcGVyIGxpbWl0IG9uIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgY29udGFp
bmluZyBhbGwKKyAgICAvLyB0ZXh0IGFuZCB0aGF0IG9mIGEgbmFycm93IGNoaWxkIGJlZm9yZSB0
aGUgY2hpbGQgYmVjb21lcyBhIGNsdXN0ZXIuCisgICAgY29uc3QgZmxvYXQgbWF4V2lkdGhEaWZm
ZXJlbmNlRGlmZmVyZW5jZSA9IDEwMDsKKworICAgIEFTU0VSVChwYXJlbnRBdXRvc2l6aW5nQ2x1
c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9
IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgZmxvYXQgY2x1c3RlclRleHRX
aWR0aCA9IHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9hdCB3aWR0aERpZmZlcmVuY2UgPSBzdGQ6OmFi
cyhjbHVzdGVyVGV4dFdpZHRoIC0gY29udGVudFdpZHRoKTsKKyAgICBpZiAod2lkdGhEaWZmZXJl
bmNlIC0gcGFyZW50QXV0b3NpemluZ0NsdXN0ZXIubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4
dFdpZHRoIDwgbWF4V2lkdGhEaWZmZXJlbmNlRGlmZmVyZW5jZSkgeworICAgICAgICBwYXJlbnRB
dXRvc2l6aW5nQ2x1c3Rlci5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGggPSBzdGQ6
Om1heCh3aWR0aERpZmZlcmVuY2UsIHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLm1heEFsbG93ZWRE
aWZmZXJlbmNlRnJvbVRleHRXaWR0aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJl
bnRDbHVzdGVyKQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBh
dXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZv
cmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2lu
ZwpAQCAtMjQzLDE3ICszNTgsMjcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdD
bHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAvLyBz
aW5jZSB0aGV5IG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAg
IEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAotICAgIC8vIFVwcGVy
IGxpbWl0IG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQg
YmxvY2sgY29udGFpbmluZyBhbGwKLSAgICAvLyB0ZXh0IGFuZCB0aGF0IG9mIGEgbmFycm93IGNo
aWxkIGJlZm9yZSB0aGUgY2hpbGQgYmVjb21lcyBhIGNsdXN0ZXIuCi0gICAgY29uc3QgZmxvYXQg
bWF4V2lkdGhEaWZmZXJlbmNlID0gMjAwOworICAgIGlmIChpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1
c3RlcihyZW5kZXJlciwgcGFyZW50Q2x1c3RlcikpCisgICAgICAgIHJldHVybiB0cnVlOwogCisg
ICAgcmV0dXJuIGlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKHJlbmRlcmVyLCBwYXJlbnRD
bHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6
OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7Cisg
ICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogICAgIGlmIChwYXJl
bnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KSB7CiAgICAgICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9
IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGZsb2F0IGNsdXN0ZXJU
ZXh0V2lkdGggPSBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoIHx8IChj
bHVzdGVyVGV4dFdpZHRoIC0gY29udGVudFdpZHRoKSA+IG1heFdpZHRoRGlmZmVyZW5jZSkKKyAg
ICAgICAgaWYgKGNvbnRlbnRXaWR0aCA+IGNsdXN0ZXJUZXh0V2lkdGgpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ2x1c3RlcihyZW5k
ZXJlcik7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25z
dCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCit7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRl
clZpZXcoKQogICAgICAgICB8fCByZW5kZXJlci0+aXNGbG9hdGluZygpCiAgICAgICAgIHx8IHJl
bmRlcmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKQpAQCAtMjY3LDEwICszOTIsOSBAQCBib29s
IFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIHRoZSBzYW1lIGFtb3VudCBldmVuIGlmIHRoZXkn
cmUgZGlmZmVyZW50IHdpZHRoczsgc28gZG8gaGFzQ29sdW1ucygpCiAgICAgLy8gY29udGFpbmVy
cywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgogfQotCiBib29sIFRleHRBdXRvc2l6ZXI6Omlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgcmV0
dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmplY3QpICYmIGlzQXV0b3NpemluZ0NsdXN0ZXIo
dG9SZW5kZXJCbG9jayhvYmplY3QpLCAwKTsKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFp
bmVyKG9iamVjdCkgJiYgaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCkp
OwogfQogCiBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCkBAIC0zMjEsNyArNDQ1LDcgQEAgYm9vbCBUZXh0
QXV0b3NpemVyOjpjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlciwgZmxvYXQgYmxvY2tX
aWR0aCkKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVz
cyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFy
ZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTMzNiwxMyAr
NDYwLDEzIEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBCiAgICAgY29uc3QgZmxvYXQgbWluTGlu
ZXNPZlRleHQgPSA0OwogICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5M
aW5lc09mVGV4dDsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5k
YW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aChjbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGNsdXN0ZXIsIG1pblRleHRXaWR0
aCwgdGV4dFdpZHRoKTsKICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6
ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5U
ZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXpp
bmdDbHVzdGVyJiBjbHVzdGVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgp
CiB7CiAgICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gIWNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVk
KGNvbnRhaW5lcik7CiAKQEAgLTM1Miw4ICs0NzYsOCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNv
bgogICAgICAgICAgICAgdGV4dFdpZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVu
ZGVyZWRUZXh0TGVuZ3RoKCkgKiBkZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6
ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50
KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVy
QmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIo
ZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKLSAgICAgICAgICAgICAg
ICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFp
bmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgICAgIGlmICgh
aXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXIpKQorICAgICAgICAg
ICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgY2x1c3Rl
ciwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0
V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggMTY4YTI4NWI5NThhOTQ4ZTg4YWI2MDBl
MGIxNzNkMDk1ODIyOTQ2MC4uYWNiZjIxNmNiZTVmZWEyYmNkY2ExMmIzZDkyNDkxMzI1ZDAxNjE3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsMjIgKzU5LDM2IEBAIHByaXZhdGU6CiAg
ICAgICAgIExhc3RUb0ZpcnN0CiAgICAgfTsKIAorICAgIHN0cnVjdCBBdXRvc2l6aW5nQ2x1c3Rl
ciB7CisgICAgICAgIGV4cGxpY2l0IEF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVz
dGVyKTsKKworICAgICAgICBSZW5kZXJCbG9jayogY2x1c3RlckJsb2NrOworICAgICAgICBjb25z
dCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dDsKKyAgICAgICAgZmxvYXQgbWF4
QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoOworICAgICAgICBWZWN0b3I8QXV0b3Npemlu
Z0NsdXN0ZXI+IG5hcnJvd0Rlc2NlbmRhbnRzOworICAgIH07CisKICAgICBleHBsaWNpdCBUZXh0
QXV0b3NpemVyKERvY3VtZW50Kik7CiAKLSAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJs
b2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nl
c3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29u
c3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJv
Y2Vzc1ViZXJDbHVzdGVyKFdURjo6VmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMs
IGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NsdXN0
ZXIoQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVy
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0lu
Zm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVy
SW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiwgZmxvYXQgdGV4dFdpZHRoLCBib29sIHNo
b3VsZEJlQXV0b3NpemVkKTsKKyAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXJJ
bmZvLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRv
d0luZm8mKTsKIAogICAgIHZvaWQgc2V0TXVsdGlwbGllcihSZW5kZXJPYmplY3QqLCBmbG9hdCk7
CiAKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayosIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsK
KyAgICBzdGF0aWMgYm9vbCBpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVySW5mbyk7Cisg
ICAgc3RhdGljIGJvb2wgaXNTdGFuZGFsb25lQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVy
QmxvY2sqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7
CisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayos
IEF1dG9zaXppbmdDbHVzdGVyJik7CisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rl
cihjb25zdCBSZW5kZXJCbG9jayopOwogICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJTaG91
bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKTsKICAgICBzdGF0aWMg
Ym9vbCBjb250YWluZXJDb250YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rl
ciwgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiB0YWdzKTsKICAgICBzdGF0aWMgYm9vbCBj
b250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKTsK
LSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpOwotICAgIHN0YXRp
YyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBt
aW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChBdXRvc2l6aW5nQ2x1c3RlciYsIGZsb2F0IGJsb2NrV2lkdGgpOwor
ICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiwgZmxvYXQgbWluVGV4dFdpZHRoLCBm
bG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBk
ZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1
cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCiAgICAgc3RhdGljIFJlbmRlck9iamVj
dCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CkBAIC04NCw2ICs5
OSw5IEBAIHByaXZhdGU6CiAgICAgLy8gYmVsb25nIHRvIGFueSBjbHVzdGVyLgogICAgIHN0YXRp
YyBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0
IFJlbmRlck9iamVjdCosIHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERpcmVjdGlvbik7CiAKKyAg
ICBzdGF0aWMgVmVjdG9yPFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4gPiBzcGxpdE5hcnJvd0Ns
dXN0ZXJzQnlXaWR0aERpZmZlcmVuY2UoY29uc3QgQXV0b3NpemluZ0NsdXN0ZXImIHBhcmVudENs
dXN0ZXIpOworCisKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184059</attachid>
            <date>2013-01-22 15:29:11 -0800</date>
            <delta_ts>2013-01-28 11:03:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107300-20130122232605.patch</filename>
            <type>text/plain</type>
            <size>20350</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTExOTY1Y2M1ODU3Mjhh
ZWIwMDk4NWRjZmU2MTA5ZGNiNGU5OWMwMC4uMWRjMDQ1YzllNDEyZjkzMDM5NmVmMTRiYmE2MGE2
MTNjYjMzYzFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTE4ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbXBsZXRlIGZpeCBmb3IgcmVkZGl0LmNvbSAobm90IGZvciBzdWJtaXR0aW5nLCBqdXN0
IGZvciBnZW5lcmFsIHJldmlldykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29tcGFy
ZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJlSW5k
aWNlc0J5V2lkdGhEaWZmZXJlbmNlOjpDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBhcmVJbmRpY2VzQnlXaWR0aERpZmZlcmVuY2U6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI6OkF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OnNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjpwcm9jZXNzVWJlckNsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpp
c1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc0F1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKEF1dG9zaXppbmdDbHVzdGVyKToK
KyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOgorCiAyMDEzLTAxLTE4ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXdvcmsgTmV0d29ya1Byb2Nlc3MgcmVzb3Vy
Y2UgbG9hZCBpZGVudGlmaWVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3Np
emVyLmNwcAppbmRleCBiMThiNzAyYjUxYjJkMWZjMDk4OGUzZWVkMzhiNjJlM2FiZDUzNDQ5Li5k
ZjBlY2EyYWYzMzIwYjkyZjk4ZjJjOTM5MWJjZGQwMTZjMDFjYTFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0zNywxNiArMzcsMzAgQEAKIAogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBzdHJ1Y3QgVGV4dEF1dG9zaXpp
bmdXaW5kb3dJbmZvIHsKICAgICBJbnRTaXplIHdpbmRvd1NpemU7CiAgICAgSW50U2l6ZSBtaW5M
YXlvdXRTaXplOwogfTsKIAorY2xhc3MgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBkaWZmcyk6IG1fZGlmZnMoZGlmZnMpIHsgfQorCisgICAgYm9v
bCBvcGVyYXRvcigpKHNpemVfdCBpbmRleDEsIHNpemVfdCBpbmRleDIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9kaWZmc1tpbmRleDFdIDwgbV9kaWZmc1tpbmRleDJdOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBtX2RpZmZzOworfTsKIAogc3Rh
dGljIGNvbnN0IFZlY3RvcjxRdWFsaWZpZWROYW1lPiYgZm9ybUlucHV0VGFncygpCiB7CkBAIC02
MCw2ICs3NCwxMyBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiBmb3JtSW5w
dXRUYWdzKCkKICAgICByZXR1cm4gZm9ybUlucHV0VGFnczsKIH0KIAorVGV4dEF1dG9zaXplcjo6
QXV0b3NpemluZ0NsdXN0ZXI6OkF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVy
KQorICAgIDogY2x1c3RlckJsb2NrKGNsdXN0ZXIpCisgICAgLCBibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KDApCisgICAgLCBtYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGgoMjAwKQorewor
fQorCiBUZXh0QXV0b3NpemVyOjpUZXh0QXV0b3NpemVyKERvY3VtZW50KiBkb2N1bWVudCkKICAg
ICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CkBAIC02OSw2ICs5MCw0MCBAQCBUZXh0QXV0b3Np
emVyOjp+VGV4dEF1dG9zaXplcigpCiB7CiB9CiAKK1ZlY3RvcjxWZWN0b3I8VGV4dEF1dG9zaXpl
cjo6QXV0b3NpemluZ0NsdXN0ZXI+ID4gVGV4dEF1dG9zaXplcjo6c3BsaXROYXJyb3dDbHVzdGVy
c0J5V2lkdGhEaWZmZXJlbmNlKGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVy
KQoreworICAgIGNvbnN0IFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzID0gcGFy
ZW50Q2x1c3Rlci5uYXJyb3dEZXNjZW5kYW50czsKKyAgICBjb25zdCBmbG9hdCBtYXhEaWZmRGlm
ZmVyZW5jZSA9IDEwMDsKKyAgICBWZWN0b3I8ZmxvYXQ+IGRpZmZlcmVuY2VzOworICAgIGRpZmZl
cmVuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2x1c3RlcnMuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8c2l6ZV90PiBjbHVzdGVySW5kaWNlczsKKyAgICBjbHVzdGVySW5kaWNlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNsdXN0ZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjbHVzdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCBjbHVzdGVyV2lkdGggPSBj
bHVzdGVyc1tpXS5jbHVzdGVyQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
ZmxvYXQgcGFyZW50VGV4dFdpZHRoID0gcGFyZW50Q2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgICAgIGRpZmZlcmVuY2VzLmFwcGVuZChw
YXJlbnRUZXh0V2lkdGggLSBjbHVzdGVyV2lkdGgpOworICAgICAgICBjbHVzdGVySW5kaWNlcy5h
cHBlbmQoaSk7CisgICAgfQorICAgIHN0ZDo6c29ydChjbHVzdGVySW5kaWNlcy5iZWdpbigpLCBj
bHVzdGVySW5kaWNlcy5lbmQoKSwgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShkaWZm
ZXJlbmNlcykpOworICAgIFZlY3RvcjxWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gdWJlckNs
dXN0ZXJzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlckluZGljZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHViZXJDbHVzdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICB1YmVyQ2x1c3RlcnMuYXBwZW5kKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4oKSk7CisKKyAg
ICAgICAgc2l6ZV90IGN1cnJlbnRJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW2ldOworICAgICAgICBj
b25zdCBBdXRvc2l6aW5nQ2x1c3RlciYgY3VycmVudENsdXN0ZXIgPSBjbHVzdGVyc1tjdXJyZW50
SW5kZXhdOworICAgICAgICB1YmVyQ2x1c3RlcnMubGFzdCgpLmFwcGVuZChjdXJyZW50Q2x1c3Rl
cik7CisKKyAgICAgICAgaWYgKGkgKyAxIDwgY2x1c3RlckluZGljZXMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBmbG9hdCBjdXJyZW50RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2N1cnJlbnRJbmRl
eF07CisgICAgICAgICAgICBmbG9hdCBuZXh0RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2NsdXN0
ZXJJbmRpY2VzW2kgKyAxXV07CisgICAgICAgICAgICBpZiAoYWJzKG5leHREaWZmZXJlbmNlIC0g
Y3VycmVudERpZmZlcmVuY2UpID4gbWF4RGlmZkRpZmZlcmVuY2UpCisgICAgICAgICAgICAgICAg
dWJlckNsdXN0ZXJzLmFwcGVuZChWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+KCkpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB1YmVyQ2x1c3RlcnM7Cit9CisKIGJvb2wgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogewogICAgIC8v
IEZJWE1FOiBUZXh0IEF1dG9zaXppbmcgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIG1fZG9j
dW1lbnQtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dXNlRml4ZWRMYXlvdXQoKQpAQCAt
MTA2LDIyICsxNjEsNTUgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5k
ZXJPYmplY3QqIGxheW91dFJvb3QpCiAgICAgd2hpbGUgKGNsdXN0ZXIgJiYgIWlzQXV0b3Npemlu
Z0NsdXN0ZXIoY2x1c3RlcikpCiAgICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyLT5jb250YWluaW5n
QmxvY2soKTsKIAotICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXIsIGNvbnRhaW5lciwgbGF5b3V0
Um9vdCwgd2luZG93SW5mbyk7CisgICAgQXV0b3NpemluZ0NsdXN0ZXIgY2x1c3RlckluZm8oY2x1
c3Rlcik7CisgICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3RlckluZm8sIGNvbnRhaW5lciwgbGF5b3V0
Um9vdCwgd2luZG93SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1ViZXJD
bHVzdGVyKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzLCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit7CisgICAgZmxvYXQgbWF4VGV4dFdpZHRo
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmlu
ZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJzW2ldLmNsdXN0ZXJCbG9jayk7
CisgICAgICAgIGNsdXN0ZXJzW2ldLmJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0OworICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgICAgIG1heFRleHRXaWR0aCA9IG1h
eCh0ZXh0V2lkdGgsIG1heFRleHRXaWR0aCk7CisgICAgfQorICAgIGZsb2F0IHRvdGFsVGV4dFdp
ZHRoID0gMDsKKyAgICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7CisgICAgZmxvYXQg
bWluVGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgYm9vbCBz
aG91bGRCZUF1dG9zaXplZCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1
c3RlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKKyAgICAg
ICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY2x1c3RlcnNbaV0uYmxvY2tDb250YWluaW5n
QWxsVGV4dCwgY2x1c3RlcnNbaV0sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAg
dG90YWxUZXh0V2lkdGggKz0gdGV4dFdpZHRoOworICAgICAgICBpZiAodG90YWxUZXh0V2lkdGgg
Pj0gbWluVGV4dFdpZHRoKSB7CisgICAgICAgICAgICBzaG91bGRCZUF1dG9zaXplZCA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwcm9jZXNzQ2x1c3Rlcihj
bHVzdGVyc1tpXSwgY2x1c3RlcnNbaV0uY2x1c3RlckJsb2NrLCBjbHVzdGVyc1tpXS5jbHVzdGVy
QmxvY2ssIHdpbmRvd0luZm8sIG1heFRleHRXaWR0aCwgc2hvdWxkQmVBdXRvc2l6ZWQpOworfQor
Cit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBj
bHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
Um9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAg
IC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVj
aWFsbHkgZm9yIHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcg
dGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24g
YW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAg
ICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNv
bnRhaW5zIGFsbCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4K
LSAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVw
ZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCB0ZXh0V2lkdGgg
PSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY2x1
c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVySW5mby5jbHVzdGVyQmxvY2spOworICAgIGZsb2F0IHRleHRXaWR0
aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKKyAgICBib29sIHNob3VsZEJlQXV0b3NpemVkID0gY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNsdXN0ZXJJbmZvLCB0ZXh0V2lkdGgpOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXJJ
bmZvLCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvLCB0ZXh0V2lkdGgsIHNob3Vs
ZEJlQXV0b3NpemVkKTsKK30KIAordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihB
dXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJl
bmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYg
d2luZG93SW5mbywgZmxvYXQgdGV4dFdpZHRoLCBib29sIHNob3VsZEJlQXV0b3NpemVkKQorewor
ICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY2x1c3RlckluZm8uY2x1c3RlckJsb2Nr
OwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwotICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRv
c2l6ZWQoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgeworICAgIGlmIChzaG91
bGRCZUF1dG9zaXplZCkgewogICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rl
ci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0
aCgpIDogd2luZG93SW5mby53aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNh
bExheW91dFdpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRv
d0luZm8ubWluTGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhl
aWdodCgpOwogICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5
b3V0IHdpZHRoLCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgpAQCAtMTMyLDEwICsyMjAs
MTQgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1
c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwKICAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDEuMGYsIG11bHRpcGxpZXIpOwogICAgIH0KIAotICAgIHByb2Nlc3NDb250YWluZXIobXVs
dGlwbGllciwgY29udGFpbmVyLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwg
d2luZG93SW5mbyk7CisgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIs
IGNsdXN0ZXJJbmZvLCBzdWJ0cmVlUm9vdCwgd2luZG93SW5mbyk7CisKKyAgICBWZWN0b3I8VmVj
dG9yPEF1dG9zaXppbmdDbHVzdGVyPiA+IHViZXJDbHVzdGVycyA9IHNwbGl0TmFycm93Q2x1c3Rl
cnNCeVdpZHRoRGlmZmVyZW5jZShjbHVzdGVySW5mbyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB1YmVyQ2x1c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHByb2Nlc3NVYmVyQ2x1c3Rl
cih1YmVyQ2x1c3RlcnNbaV0sIHdpbmRvd0luZm8pOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6
OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
ciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVj
dCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5m
bykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVy
LCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlckluZm8s
IFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5m
byYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnRh
aW5lcikpOwogCkBAIC0xNTEsMTAgKzI0MywxNSBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nl
c3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgYwog
ICAgICAgICAgICAgLy8gRklYTUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9ydGlv
bmF0ZWx5LgogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5k
YW50KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVu
ZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1c3Rl
cihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQotICAgICAgICAgICAg
ICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBkZXNj
ZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAg
ICAgaWYgKGlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1
c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dCkpIHsKKyAgICAgICAgICAgICAgICBBdXRv
c2l6aW5nQ2x1c3RlciBkZXNjZW5kYW50QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50QXV0b3NpemluZ0Ns
dXN0ZXIsIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFu
dEJsb2NrLCBjbHVzdGVySW5mbykpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdkIGxpa2UgdG8g
Y29tYmluZSBhbGwgc3VjaCBjbHVzdGVycyBieSB0aGUgd2lkdGggZGlmZmVyZW5jZSBpbnRvIHVi
ZXItY2x1c3RlcnMgYW5kIGF1dG9zaXplCisgICAgICAgICAgICAgICAgLy8gdGhlbSBzaW1pbGFy
bHkuIFNvIHNhdmUgaXQgZm9yIG5vdyBhbmQgcHJvY2VzcyBsYXRlciBvbiB0b2dldGhlciB3aXRo
IHRoZSByZXN0IG9mIHN1Y2ggYmxvY2tzLgorICAgICAgICAgICAgICAgIGNsdXN0ZXJJbmZvLm5h
cnJvd0Rlc2NlbmRhbnRzLmFwcGVuZChBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2sp
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIo
bXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5mbywgZGVzY2VuZGFudEJsb2Nr
LCB3aW5kb3dJbmZvKTsKICAgICAgICAgfQogICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJl
T3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVS
b290KTsKICAgICB9CkBAIC0yMTcsNyArMzE0LDI1IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNB
dXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihj
b25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KQorYm9vbCBUZXh0QXV0b3NpemVyOjppc1BhcnRpYWxBdXRvc2l6
aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVy
JiBwYXJlbnRBdXRvc2l6aW5nQ2x1c3RlcikKK3sKKyAgICAvLyBVcHBlciBsaW1pdCBvbiB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIGNvbnRhaW5p
bmcgYWxsCisgICAgLy8gdGV4dCBhbmQgdGhhdCBvZiBhIG5hcnJvdyBjaGlsZCBiZWZvcmUgdGhl
IGNoaWxkIGJlY29tZXMgYSBjbHVzdGVyLgorICAgIGNvbnN0IGZsb2F0IG1heFdpZHRoRGlmZmVy
ZW5jZURpZmZlcmVuY2UgPSAxMDA7CisKKyAgICBBU1NFUlQocGFyZW50QXV0b3NpemluZ0NsdXN0
ZXIuYmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisKKyAgICBmbG9hdCBjb250ZW50V2lkdGggPSBy
ZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lk
dGggPSBwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250
ZW50TG9naWNhbFdpZHRoKCk7CisgICAgZmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gc3RkOjphYnMo
Y2x1c3RlclRleHRXaWR0aCAtIGNvbnRlbnRXaWR0aCk7CisgICAgaWYgKHdpZHRoRGlmZmVyZW5j
ZSAtIHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRX
aWR0aCA8IG1heFdpZHRoRGlmZmVyZW5jZURpZmZlcmVuY2UpIHsKKyAgICAgICAgcGFyZW50QXV0
b3NpemluZ0NsdXN0ZXIubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID0gc3RkOjpt
YXgod2lkdGhEaWZmZXJlbmNlLCBwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5tYXhBbGxvd2VkRGlm
ZmVyZW5jZUZyb21UZXh0V2lkdGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgcGFyZW50
Q2x1c3RlcikKIHsKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0
b3NpemluZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3Jj
ZSBhIHVuaWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcK
QEAgLTI0MywxNyArMzU4LDI3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgLy8gc2lu
Y2UgdGhleSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byB0aGVpciB3aWR0aC4KICAgICBB
U1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKHJlbmRlcmVyKSk7CiAKLSAgICAvLyBVcHBlciBs
aW1pdCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJs
b2NrIGNvbnRhaW5pbmcgYWxsCi0gICAgLy8gdGV4dCBhbmQgdGhhdCBvZiBhIG5hcnJvdyBjaGls
ZCBiZWZvcmUgdGhlIGNoaWxkIGJlY29tZXMgYSBjbHVzdGVyLgotICAgIGNvbnN0IGZsb2F0IG1h
eFdpZHRoRGlmZmVyZW5jZSA9IDIwMDsKKyAgICBpZiAoaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0
ZXIocmVuZGVyZXIsIHBhcmVudENsdXN0ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAg
IHJldHVybiBpc1N0YW5kYWxvbmVBdXRvc2l6aW5nQ2x1c3RlcihyZW5kZXJlciwgcGFyZW50Q2x1
c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjpp
c1N0YW5kYWxvbmVBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KQoreworICAg
IEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKICAgICBpZiAocGFyZW50
QmxvY2tDb250YWluaW5nQWxsVGV4dCkgewogICAgICAgICBmbG9hdCBjb250ZW50V2lkdGggPSBy
ZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBmbG9hdCBjbHVzdGVyVGV4
dFdpZHRoID0gcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0
aCgpOwotICAgICAgICBpZiAoY29udGVudFdpZHRoID4gY2x1c3RlclRleHRXaWR0aCB8fCAoY2x1
c3RlclRleHRXaWR0aCAtIGNvbnRlbnRXaWR0aCkgPiBtYXhXaWR0aERpZmZlcmVuY2UpCisgICAg
ICAgIGlmIChjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NsdXN0ZXIocmVuZGVy
ZXIpOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3Qg
UmVuZGVyQmxvY2sqIHJlbmRlcmVyKQorewogICAgIHJldHVybiByZW5kZXJlci0+aXNSZW5kZXJW
aWV3KCkKICAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxvYXRpbmcoKQogICAgICAgICB8fCByZW5k
ZXJlci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkKQEAgLTI2NywxMCArMzkyLDkgQEAgYm9vbCBU
ZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5k
ZXJlciwgY29uc3QgUmVuZGUKICAgICAvLyB0aGUgc2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3Jl
IGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQogICAgIC8vIGNvbnRhaW5lcnMs
IGFuZCBwcm9iYWJseSBmbGV4Ym94ZXMuLi4KIH0KLQogYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1
dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIHJldHVy
biBpc0F1dG9zaXppbmdDb250YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdDbHVzdGVyKHRv
UmVuZGVyQmxvY2sob2JqZWN0KSwgMCk7CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5l
cihvYmplY3QpICYmIGlzQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3QpKTsK
IH0KIAogYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyKQpAQCAtMzY0LDcgKzQ4OCw3IEBAIGJvb2wgVGV4dEF1
dG9zaXplcjo6Y29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1
c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKQorYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hv
dWxkQmVBdXRvc2l6ZWQoQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXIsIGZsb2F0IGJsb2NrV2lk
dGgpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgY2x1c3RlcnMgdGhhdCBjb250YWluIGxlc3Mg
dGhhbiA0IGxpbmVzIG9mIHRleHQgKGluCiAgICAgLy8gcHJhY3RpY2UgbGVzcyBsaW5lcyBhcmUg
cmVxdWlyZWQsIHNpbmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoCkBAIC0zNzksMTMgKzUw
MywxMyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25z
dCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQQogICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVz
T2ZUZXh0ID0gNDsKICAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRoICogbWluTGlu
ZXNPZlRleHQ7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0
LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lk
dGgoY2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBjbHVzdGVyLCBtaW5UZXh0V2lkdGgs
IHRleHRXaWR0aCk7CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVy
OjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVy
LCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4
dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQordm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBBdXRvc2l6aW5n
Q2x1c3RlciYgY2x1c3RlciwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQog
ewogICAgIGJvb2wgc2tpcExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChj
b250YWluZXIpOwogCkBAIC0zOTUsOCArNTE5LDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24K
ICAgICAgICAgICAgIHRleHRXaWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRl
cmVkVGV4dExlbmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUo
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkp
IHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJs
b2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCi0gICAgICAgICAgICAgICAg
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAgICBpZiAoIWlz
QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVyKSkKKyAgICAgICAgICAg
ICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXIs
IG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdp
ZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGUxYzIyYWViOWRiM2JjOTljOGI3M2UxYjA2
ODljNGY2YTE3MDZjZmEuLjkzMWI4MDFhYzY5ZWEwY2Y0ZTVjMTk5Y2JhNjQ1Y2FhZDY1ZGQyM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDIzICs1OSwzNyBAQCBwcml2YXRlOgogICAg
ICAgICBMYXN0VG9GaXJzdAogICAgIH07CiAKKyAgICBzdHJ1Y3QgQXV0b3NpemluZ0NsdXN0ZXIg
eworICAgICAgICBleHBsaWNpdCBBdXRvc2l6aW5nQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3Rl
cik7CisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGNsdXN0ZXJCbG9jazsKKyAgICAgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQ7CisgICAgICAgIGZsb2F0IG1heEFs
bG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aDsKKyAgICAgICAgVmVjdG9yPEF1dG9zaXppbmdD
bHVzdGVyPiBuYXJyb3dEZXNjZW5kYW50czsKKyAgICB9OworCiAgICAgZXhwbGljaXQgVGV4dEF1
dG9zaXplcihEb2N1bWVudCopOwogCi0gICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9j
ayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
Um9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7Ci0gICAgdm9pZCBwcm9jZXNz
Q29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0
IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nl
c3NVYmVyQ2x1c3RlcihXVEY6OlZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzLCBj
b25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVy
KEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZv
Jik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3Rlcklu
Zm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNv
bnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYsIGZsb2F0IHRleHRXaWR0aCwgYm9vbCBzaG91
bGRCZUF1dG9zaXplZCk7CisgICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxp
ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5m
bywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQpOwog
CiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7Cisg
ICAgc3RhdGljIGJvb2wgaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgcGFyZW50Q2x1c3RlckluZm8pOworICAg
IHN0YXRpYyBib29sIGlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOwor
ICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBB
dXRvc2l6aW5nQ2x1c3RlciYpOworICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIo
Y29uc3QgUmVuZGVyQmxvY2sqKTsKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlck9iamVjdCopOwogCiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxk
QmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcik7CiAgICAgc3RhdGljIGJv
b2wgY29udGFpbmVyQ29udGFpbnNPbmVPZlRhZ3MoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIs
IGNvbnN0IFZlY3RvcjxRdWFsaWZpZWROYW1lPiYgdGFncyk7CiAgICAgc3RhdGljIGJvb2wgY29u
dGFpbmVySXNSb3dPZkxpbmtzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyKTsKICAgICBz
dGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyKTsKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29u
c3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgp
OwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0LCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOworICAgIHN0YXRpYyBi
b29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChBdXRvc2l6aW5nQ2x1c3RlciYsIGZsb2F0IGJs
b2NrV2lkdGgpOworICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiwgZmxvYXQgbWlu
VGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0
aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5l
cnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCiAgICAgc3RhdGlj
IFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWlu
ZXJzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7
CkBAIC04NSw2ICsxMDAsOSBAQCBwcml2YXRlOgogICAgIC8vIGJlbG9uZyB0byBhbnkgY2x1c3Rl
ci4KICAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdElu
Q2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJl
Y3Rpb24pOwogCisgICAgc3RhdGljIFZlY3RvcjxWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4g
c3BsaXROYXJyb3dDbHVzdGVyc0J5V2lkdGhEaWZmZXJlbmNlKGNvbnN0IEF1dG9zaXppbmdDbHVz
dGVyJiBwYXJlbnRDbHVzdGVyKTsKKworCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiB9Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185010</attachid>
            <date>2013-01-28 11:03:06 -0800</date>
            <delta_ts>2013-01-29 16:25:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107300-20130128185953.patch</filename>
            <type>text/plain</type>
            <size>20352</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYwZmE2MDk4ZWNmY2Qy
ZjI5M2FhYjNkMzkzNjExNGY0OGRjOTBmYS4uNTQ1NjVhYzYwY2QzYzZjZGNlZWNhYzc4MTA3NTE3
ODE1N2M3NTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTI4ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbXBsZXRlIGZpeCBmb3IgcmVkZGl0LmNvbSAobm90IGZvciBzdWJtaXR0aW5nLCBqdXN0
IGZvciBnZW5lcmFsIHJldmlldykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqICByZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvbXBh
cmVJbmRpY2VzQnlXaWR0aERpZmZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGFyZUlu
ZGljZXNCeVdpZHRoRGlmZmVyZW5jZTo6Q29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OkF1dG9zaXppbmdDbHVz
dGVyOjpBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVy
OjpzcGxpdE5hcnJvd0NsdXN0ZXJzQnlXaWR0aERpZmZlcmVuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6cHJvY2Vzc1ViZXJDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OnByb2Nlc3NDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
aXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9z
aXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc1N0YW5kYWxvbmVBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorICAgICAgICAq
IHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmg6CisgICAgICAgIChBdXRvc2l6aW5nQ2x1c3Rlcik6
CisgICAgICAgIChUZXh0QXV0b3NpemVyKToKKwogMjAxMy0wMS0yOCAgS2Vpc2hpIEhhdHRvcmkg
IDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUkVHUkVTU0lPTl0gQ2FsZW5kYXIgUGlj
a2VyIGZvY3VzIHJpbmcgaXMgZ29uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuY3BwCmluZGV4IDc5ZWIxOWFjNWVlNmI4ZmU5NjJkNTg2NWVkNTkzNzFlOWE3MDM2NGYu
LjcxYWZkM2Y3Y2JmZDA2MDA5NzdhNGE1Yjc2NzAwODdjYjFjOWMwOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTM3LDE2ICszNywzMCBAQAogCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIHN0cnVjdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm8gewogICAgIEludFNpemUgd2luZG93U2l6ZTsKICAgICBJbnRTaXplIG1p
bkxheW91dFNpemU7CiB9OwogCitjbGFzcyBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNl
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNl
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRpZmZzKTogbV9kaWZmcyhkaWZmcykgeyB9CisKKyAgICBi
b29sIG9wZXJhdG9yKCkoc2l6ZV90IGluZGV4MSwgc2l6ZV90IGluZGV4MikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2RpZmZzW2luZGV4MV0gPCBtX2RpZmZzW2luZGV4Ml07CisgICAg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIG1fZGlmZnM7Cit9OwogCiBz
dGF0aWMgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiBmb3JtSW5wdXRUYWdzKCkKIHsKQEAg
LTYwLDYgKzc0LDEzIEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4mIGZvcm1J
bnB1dFRhZ3MoKQogICAgIHJldHVybiBmb3JtSW5wdXRUYWdzOwogfQogCitUZXh0QXV0b3NpemVy
OjpBdXRvc2l6aW5nQ2x1c3Rlcjo6QXV0b3NpemluZ0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0
ZXIpCisgICAgOiBjbHVzdGVyQmxvY2soY2x1c3RlcikKKyAgICAsIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQoMCkKKyAgICAsIG1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0aCgyMDApCit7
Cit9CisKIFRleHRBdXRvc2l6ZXI6OlRleHRBdXRvc2l6ZXIoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKIHsKQEAgLTY5LDYgKzkwLDQwIEBAIFRleHRBdXRv
c2l6ZXI6On5UZXh0QXV0b3NpemVyKCkKIHsKIH0KIAorVmVjdG9yPFZlY3RvcjxUZXh0QXV0b3Np
emVyOjpBdXRvc2l6aW5nQ2x1c3Rlcj4gPiBUZXh0QXV0b3NpemVyOjpzcGxpdE5hcnJvd0NsdXN0
ZXJzQnlXaWR0aERpZmZlcmVuY2UoY29uc3QgQXV0b3NpemluZ0NsdXN0ZXImIHBhcmVudENsdXN0
ZXIpCit7CisgICAgY29uc3QgVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMgPSBw
YXJlbnRDbHVzdGVyLm5hcnJvd0Rlc2NlbmRhbnRzOworICAgIGNvbnN0IGZsb2F0IG1heERpZmZE
aWZmZXJlbmNlID0gMTAwOworICAgIFZlY3RvcjxmbG9hdD4gZGlmZmVyZW5jZXM7CisgICAgZGlm
ZmVyZW5jZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjbHVzdGVycy5zaXplKCkpOworICAgIFZl
Y3RvcjxzaXplX3Q+IGNsdXN0ZXJJbmRpY2VzOworICAgIGNsdXN0ZXJJbmRpY2VzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY2x1c3RlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZsb2F0IGNsdXN0ZXJXaWR0aCA9
IGNsdXN0ZXJzW2ldLmNsdXN0ZXJCbG9jay0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgICAg
ICBmbG9hdCBwYXJlbnRUZXh0V2lkdGggPSBwYXJlbnRDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0Fs
bFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgZGlmZmVyZW5jZXMuYXBwZW5k
KHBhcmVudFRleHRXaWR0aCAtIGNsdXN0ZXJXaWR0aCk7CisgICAgICAgIGNsdXN0ZXJJbmRpY2Vz
LmFwcGVuZChpKTsKKyAgICB9CisgICAgc3RkOjpzb3J0KGNsdXN0ZXJJbmRpY2VzLmJlZ2luKCks
IGNsdXN0ZXJJbmRpY2VzLmVuZCgpLCBDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKGRp
ZmZlcmVuY2VzKSk7CisgICAgVmVjdG9yPFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4gPiB1YmVy
Q2x1c3RlcnM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbHVzdGVySW5kaWNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAodWJlckNsdXN0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHViZXJDbHVzdGVycy5hcHBlbmQoVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPigpKTsKKwor
ICAgICAgICBzaXplX3QgY3VycmVudEluZGV4ID0gY2x1c3RlckluZGljZXNbaV07CisgICAgICAg
IGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBjdXJyZW50Q2x1c3RlciA9IGNsdXN0ZXJzW2N1cnJl
bnRJbmRleF07CisgICAgICAgIHViZXJDbHVzdGVycy5sYXN0KCkuYXBwZW5kKGN1cnJlbnRDbHVz
dGVyKTsKKworICAgICAgICBpZiAoaSArIDEgPCBjbHVzdGVySW5kaWNlcy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnREaWZmZXJlbmNlID0gZGlmZmVyZW5jZXNbY3VycmVudElu
ZGV4XTsKKyAgICAgICAgICAgIGZsb2F0IG5leHREaWZmZXJlbmNlID0gZGlmZmVyZW5jZXNbY2x1
c3RlckluZGljZXNbaSArIDFdXTsKKyAgICAgICAgICAgIGlmIChhYnMobmV4dERpZmZlcmVuY2Ug
LSBjdXJyZW50RGlmZmVyZW5jZSkgPiBtYXhEaWZmRGlmZmVyZW5jZSkKKyAgICAgICAgICAgICAg
ICB1YmVyQ2x1c3RlcnMuYXBwZW5kKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4oKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHViZXJDbHVzdGVyczsKK30KKwogYm9vbCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiB7CiAgICAg
Ly8gRklYTUU6IFRleHQgQXV0b3NpemluZyBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gbV9k
b2N1bWVudC0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT51c2VGaXhlZExheW91dCgpCkBA
IC0xMDYsMjIgKzE2MSw1NSBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJl
bmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6
aW5nQ2x1c3RlcihjbHVzdGVyKSkKICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogCi0gICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCBsYXlv
dXRSb290LCB3aW5kb3dJbmZvKTsKKyAgICBBdXRvc2l6aW5nQ2x1c3RlciBjbHVzdGVySW5mbyhj
bHVzdGVyKTsKKyAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVySW5mbywgY29udGFpbmVyLCBsYXlv
dXRSb290LCB3aW5kb3dJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXpp
bmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzVWJl
ckNsdXN0ZXIoVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMsIGNvbnN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3sKKyAgICBmbG9hdCBtYXhUZXh0V2lk
dGggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBm
aW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3RlcnNbaV0uY2x1c3RlckJsb2Nr
KTsKKyAgICAgICAgY2x1c3RlcnNbaV0uYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQ7CisgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgbWF4VGV4dFdpZHRoID0g
bWF4KHRleHRXaWR0aCwgbWF4VGV4dFdpZHRoKTsKKyAgICB9CisgICAgZmxvYXQgdG90YWxUZXh0
V2lkdGggPSAwOworICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVzT2ZUZXh0ID0gNDsKKyAgICBmbG9h
dCBtaW5UZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggKiBtaW5MaW5lc09mVGV4dDsKKyAgICBib29s
IHNob3VsZEJlQXV0b3NpemVkID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
bHVzdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOworICAg
ICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjbHVzdGVyc1tpXS5ibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBjbHVzdGVyc1tpXSwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAg
ICB0b3RhbFRleHRXaWR0aCArPSB0ZXh0V2lkdGg7CisgICAgICAgIGlmICh0b3RhbFRleHRXaWR0
aCA+PSBtaW5UZXh0V2lkdGgpIHsKKyAgICAgICAgICAgIHNob3VsZEJlQXV0b3NpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHByb2Nlc3NDbHVzdGVy
KGNsdXN0ZXJzW2ldLCBjbHVzdGVyc1tpXS5jbHVzdGVyQmxvY2ssIGNsdXN0ZXJzW2ldLmNsdXN0
ZXJCbG9jaywgd2luZG93SW5mbywgbWF4VGV4dFdpZHRoLCBzaG91bGRCZUF1dG9zaXplZCk7Cit9
CisKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoQXV0b3NpemluZ0NsdXN0ZXIm
IGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7CiAg
ICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28gZXNw
ZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRha2lu
ZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNvbW1v
biBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUgb2YK
ICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRoYXQg
Y29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0ZWFk
LgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXIpOwotICAgIGZsb2F0IHRleHRXaWR0
aCA9IGJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBj
bHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLmNsdXN0ZXJCbG9jayk7CisgICAgZmxvYXQgdGV4dFdp
ZHRoID0gY2x1c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxX
aWR0aCgpOworICAgIGJvb2wgc2hvdWxkQmVBdXRvc2l6ZWQgPSBjbHVzdGVyU2hvdWxkQmVBdXRv
c2l6ZWQoY2x1c3RlckluZm8sIHRleHRXaWR0aCk7CisgICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3Rl
ckluZm8sIGNvbnRhaW5lciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8sIHRleHRXaWR0aCwgc2hv
dWxkQmVBdXRvc2l6ZWQpOworfQogCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVy
KEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZv
JiB3aW5kb3dJbmZvLCBmbG9hdCB0ZXh0V2lkdGgsIGJvb2wgc2hvdWxkQmVBdXRvc2l6ZWQpCit7
CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIgPSBjbHVzdGVySW5mby5jbHVzdGVyQmxv
Y2s7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCB0ZXh0V2lkdGgpKSB7CisgICAgaWYgKHNo
b3VsZEJlQXV0b3NpemVkKSB7CiAgICAgICAgIGludCBsb2dpY2FsV2luZG93V2lkdGggPSBjbHVz
dGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndp
ZHRoKCkgOiB3aW5kb3dJbmZvLndpbmRvd1NpemUuaGVpZ2h0KCk7CiAgICAgICAgIGludCBsb2dp
Y2FsTGF5b3V0V2lkdGggPSBjbHVzdGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lu
ZG93SW5mby5taW5MYXlvdXRTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUu
aGVpZ2h0KCk7CiAgICAgICAgIC8vIElnbm9yZSBib3ggd2lkdGggaW4gZXhjZXNzIG9mIHRoZSBs
YXlvdXQgd2lkdGgsIHRvIGF2b2lkIGV4dHJlbWUgbXVsdGlwbGllcnMuCkBAIC0xMzIsMTAgKzIy
MCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBj
bHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLAogICAgICAgICBtdWx0aXBsaWVyID0gc3Rk
OjptYXgoMS4wZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lciht
dWx0aXBsaWVyLCBjb250YWluZXIsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHN1YnRyZWVSb290
LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5l
ciwgY2x1c3RlckluZm8sIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKworICAgIFZlY3RvcjxW
ZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gdWJlckNsdXN0ZXJzID0gc3BsaXROYXJyb3dDbHVz
dGVyc0J5V2lkdGhEaWZmZXJlbmNlKGNsdXN0ZXJJbmZvKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHViZXJDbHVzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgcHJvY2Vzc1ViZXJDbHVz
dGVyKHViZXJDbHVzdGVyc1tpXSwgd2luZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFp
bmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJ
bmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxp
ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5m
bywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJiB3aW5kb3dJbmZvKQogewogICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIoY29u
dGFpbmVyKSk7CiAKQEAgLTE1MSwxMCArMjQzLDE1IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJv
Y2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBj
CiAgICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0
aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2Nl
bmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVz
dGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCi0gICAgICAgICAg
ICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIGRl
c2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAg
ICAgICBpZiAoaXNTdGFuZGFsb25lQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBj
bHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkgeworICAgICAgICAgICAgICAgIEF1
dG9zaXppbmdDbHVzdGVyIGRlc2NlbmRhbnRBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50Qmxv
Y2spOworICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRBdXRvc2l6aW5n
Q2x1c3RlciwgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5k
YW50QmxvY2ssIGNsdXN0ZXJJbmZvKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2QgbGlrZSB0
byBjb21iaW5lIGFsbCBzdWNoIGNsdXN0ZXJzIGJ5IHRoZSB3aWR0aCBkaWZmZXJlbmNlIGludG8g
dWJlci1jbHVzdGVycyBhbmQgYXV0b3NpemUKKyAgICAgICAgICAgICAgICAvLyB0aGVtIHNpbWls
YXJseS4gU28gc2F2ZSBpdCBmb3Igbm93IGFuZCBwcm9jZXNzIGxhdGVyIG9uIHRvZ2V0aGVyIHdp
dGggdGhlIHJlc3Qgb2Ygc3VjaCBibG9ja3MuCisgICAgICAgICAgICAgICAgY2x1c3RlckluZm8u
bmFycm93RGVzY2VuZGFudHMuYXBwZW5kKEF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9j
aykpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5l
cihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXJJbmZvLCBkZXNjZW5kYW50Qmxv
Y2ssIHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5Q
cmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJl
ZVJvb3QpOwogICAgIH0KQEAgLTIxNyw3ICszMTQsMjUgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzUGFydGlhbEF1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgQXV0b3NpemluZ0NsdXN0
ZXImIHBhcmVudEF1dG9zaXppbmdDbHVzdGVyKQoreworICAgIC8vIFVwcGVyIGxpbWl0IG9uIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgY29udGFp
bmluZyBhbGwKKyAgICAvLyB0ZXh0IGFuZCB0aGF0IG9mIGEgbmFycm93IGNoaWxkIGJlZm9yZSB0
aGUgY2hpbGQgYmVjb21lcyBhIGNsdXN0ZXIuCisgICAgY29uc3QgZmxvYXQgbWF4V2lkdGhEaWZm
ZXJlbmNlRGlmZmVyZW5jZSA9IDEwMDsKKworICAgIEFTU0VSVChwYXJlbnRBdXRvc2l6aW5nQ2x1
c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9
IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgZmxvYXQgY2x1c3RlclRleHRX
aWR0aCA9IHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9hdCB3aWR0aERpZmZlcmVuY2UgPSBzdGQ6OmFi
cyhjbHVzdGVyVGV4dFdpZHRoIC0gY29udGVudFdpZHRoKTsKKyAgICBpZiAod2lkdGhEaWZmZXJl
bmNlIC0gcGFyZW50QXV0b3NpemluZ0NsdXN0ZXIubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4
dFdpZHRoIDwgbWF4V2lkdGhEaWZmZXJlbmNlRGlmZmVyZW5jZSkgeworICAgICAgICBwYXJlbnRB
dXRvc2l6aW5nQ2x1c3Rlci5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGggPSBzdGQ6
Om1heCh3aWR0aERpZmZlcmVuY2UsIHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLm1heEFsbG93ZWRE
aWZmZXJlbmNlRnJvbVRleHRXaWR0aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJl
bnRDbHVzdGVyKQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBh
dXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZv
cmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2lu
ZwpAQCAtMjQzLDE3ICszNTgsMjcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdD
bHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAvLyBz
aW5jZSB0aGV5IG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAg
IEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAotICAgIC8vIFVwcGVy
IGxpbWl0IG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQg
YmxvY2sgY29udGFpbmluZyBhbGwKLSAgICAvLyB0ZXh0IGFuZCB0aGF0IG9mIGEgbmFycm93IGNo
aWxkIGJlZm9yZSB0aGUgY2hpbGQgYmVjb21lcyBhIGNsdXN0ZXIuCi0gICAgY29uc3QgZmxvYXQg
bWF4V2lkdGhEaWZmZXJlbmNlID0gMjAwOworICAgIGlmIChpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1
c3RlcihyZW5kZXJlciwgcGFyZW50Q2x1c3RlcikpCisgICAgICAgIHJldHVybiB0cnVlOwogCisg
ICAgcmV0dXJuIGlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKHJlbmRlcmVyLCBwYXJlbnRD
bHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6
OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7Cisg
ICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogICAgIGlmIChwYXJl
bnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KSB7CiAgICAgICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9
IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGZsb2F0IGNsdXN0ZXJU
ZXh0V2lkdGggPSBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoIHx8IChj
bHVzdGVyVGV4dFdpZHRoIC0gY29udGVudFdpZHRoKSA+IG1heFdpZHRoRGlmZmVyZW5jZSkKKyAg
ICAgICAgaWYgKGNvbnRlbnRXaWR0aCA+IGNsdXN0ZXJUZXh0V2lkdGgpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ2x1c3RlcihyZW5k
ZXJlcik7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25z
dCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCit7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRl
clZpZXcoKQogICAgICAgICB8fCByZW5kZXJlci0+aXNGbG9hdGluZygpCiAgICAgICAgIHx8IHJl
bmRlcmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKQpAQCAtMjY3LDEwICszOTIsOSBAQCBib29s
IFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIHRoZSBzYW1lIGFtb3VudCBldmVuIGlmIHRoZXkn
cmUgZGlmZmVyZW50IHdpZHRoczsgc28gZG8gaGFzQ29sdW1ucygpCiAgICAgLy8gY29udGFpbmVy
cywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgogfQotCiBib29sIFRleHRBdXRvc2l6ZXI6Omlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgcmV0
dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmplY3QpICYmIGlzQXV0b3NpemluZ0NsdXN0ZXIo
dG9SZW5kZXJCbG9jayhvYmplY3QpLCAwKTsKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFp
bmVyKG9iamVjdCkgJiYgaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCkp
OwogfQogCiBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCkBAIC0zNjQsNyArNDg4LDcgQEAgYm9vbCBUZXh0
QXV0b3NpemVyOjpjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlciwgZmxvYXQgYmxvY2tX
aWR0aCkKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVz
cyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFy
ZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTM3OSwxMyAr
NTAzLDEzIEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBCiAgICAgY29uc3QgZmxvYXQgbWluTGlu
ZXNPZlRleHQgPSA0OwogICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5M
aW5lc09mVGV4dDsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5k
YW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aChjbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGNsdXN0ZXIsIG1pblRleHRXaWR0
aCwgdGV4dFdpZHRoKTsKICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6
ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5U
ZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXpp
bmdDbHVzdGVyJiBjbHVzdGVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgp
CiB7CiAgICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gIWNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVk
KGNvbnRhaW5lcik7CiAKQEAgLTM5NSw4ICs1MTksOCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNv
bgogICAgICAgICAgICAgdGV4dFdpZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVu
ZGVyZWRUZXh0TGVuZ3RoKCkgKiBkZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6
ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50
KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVy
QmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIo
ZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKLSAgICAgICAgICAgICAg
ICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFp
bmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgICAgIGlmICgh
aXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXIpKQorICAgICAgICAg
ICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgY2x1c3Rl
ciwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0
V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggZTFjMjJhZWI5ZGIzYmM5OWM4YjczZTFi
MDY4OWM0ZjZhMTcwNmNmYS4uOTMxYjgwMWFjNjllYTBjZjRlNWMxOTljYmE2NDVjYWFkNjVkZDIz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsMjMgKzU5LDM3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExhc3RUb0ZpcnN0CiAgICAgfTsKIAorICAgIHN0cnVjdCBBdXRvc2l6aW5nQ2x1c3Rl
ciB7CisgICAgICAgIGV4cGxpY2l0IEF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVz
dGVyKTsKKworICAgICAgICBSZW5kZXJCbG9jayogY2x1c3RlckJsb2NrOworICAgICAgICBjb25z
dCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dDsKKyAgICAgICAgZmxvYXQgbWF4
QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoOworICAgICAgICBWZWN0b3I8QXV0b3Npemlu
Z0NsdXN0ZXI+IG5hcnJvd0Rlc2NlbmRhbnRzOworICAgIH07CisKICAgICBleHBsaWNpdCBUZXh0
QXV0b3NpemVyKERvY3VtZW50Kik7CiAKLSAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJs
b2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nl
c3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29u
c3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJv
Y2Vzc1ViZXJDbHVzdGVyKFdURjo6VmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMs
IGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NsdXN0
ZXIoQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVy
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0lu
Zm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVy
SW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiwgZmxvYXQgdGV4dFdpZHRoLCBib29sIHNo
b3VsZEJlQXV0b3NpemVkKTsKKyAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXJJ
bmZvLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRv
d0luZm8mKTsKIAogICAgIHZvaWQgc2V0TXVsdGlwbGllcihSZW5kZXJPYmplY3QqLCBmbG9hdCk7
CiAKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayosIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsK
KyAgICBzdGF0aWMgYm9vbCBpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVySW5mbyk7Cisg
ICAgc3RhdGljIGJvb2wgaXNTdGFuZGFsb25lQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVy
QmxvY2sqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7
CisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayos
IEF1dG9zaXppbmdDbHVzdGVyJik7CisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rl
cihjb25zdCBSZW5kZXJCbG9jayopOwogICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJTaG91
bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKTsKICAgICBzdGF0aWMg
Ym9vbCBjb250YWluZXJDb250YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rl
ciwgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiB0YWdzKTsKICAgICBzdGF0aWMgYm9vbCBj
b250YWluZXJJc1Jvd09mTGlua3MoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIpOwogICAg
IHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2Nr
KiBjb250YWluZXIpOwotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChj
b25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tXaWR0
aCk7Ci0gICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgc3RhdGlj
IGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKEF1dG9zaXppbmdDbHVzdGVyJiwgZmxvYXQg
YmxvY2tXaWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgQXV0b3NpemluZ0NsdXN0ZXImLCBmbG9hdCBt
aW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNl
IHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFp
bmVycyAoYnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KICAgICBzdGF0
aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRh
aW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGlu
KTsKQEAgLTg1LDYgKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgLy8gYmVsb25nIHRvIGFueSBjbHVz
dGVyLgogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90
SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCosIHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERp
cmVjdGlvbik7CiAKKyAgICBzdGF0aWMgVmVjdG9yPFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4g
PiBzcGxpdE5hcnJvd0NsdXN0ZXJzQnlXaWR0aERpZmZlcmVuY2UoY29uc3QgQXV0b3NpemluZ0Ns
dXN0ZXImIHBhcmVudENsdXN0ZXIpOworCisKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185335</attachid>
            <date>2013-01-29 16:25:54 -0800</date>
            <delta_ts>2013-01-30 10:42:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107300-20130130002239.patch</filename>
            <type>text/plain</type>
            <size>20331</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIxZjlhNGE0N2EyNzAw
OTRmZWQ2NTAzMzMzYmNiNTAzOTgxZjQ3My4uNWRhZWZiODRhMzA0NTIxYWY2OWRmMDE3NjMyYjY4
M2Y1NjQxZDc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbXBsZXRlIGZpeCBmb3IgcmVkZGl0LmNvbSAobm90IGZvciBzdWJtaXR0aW5nLCBqdXN0
IGZvciBnZW5lcmFsIHJldmlldykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29tcGFy
ZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJlSW5k
aWNlc0J5V2lkdGhEaWZmZXJlbmNlOjpDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBhcmVJbmRpY2VzQnlXaWR0aERpZmZlcmVuY2U6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI6OkF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OnNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjpwcm9jZXNzVWJlckNsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpp
c1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc0F1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKEF1dG9zaXppbmdDbHVzdGVyKToK
KyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOgorCiAyMDEzLTAxLTI5ICBBbHBoYSBMYW0gIDxoY2xh
bUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbnJldmlld2VkIGJ1aWxkIGZp
eC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRleCBiZWRl
Mjg0NWI2YzdlN2M0ZTEzZGIzNGU2Nzg1NDViNzc5MzkwNzZlLi43MTkzZDgyM2U2MDgzY2Y0MjUw
M2U2NTkxMDY5ZDUyZjA4NmIwZGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuY3BwCkBAIC0zNywxNiArMzcsMzAgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCiBzdHJ1Y3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvIHsKICAg
ICBJbnRTaXplIHdpbmRvd1NpemU7CiAgICAgSW50U2l6ZSBtaW5MYXlvdXRTaXplOwogfTsKIAor
Y2xhc3MgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBkaWZmcyk6IG1fZGlmZnMoZGlmZnMpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKHNpemVf
dCBpbmRleDEsIHNpemVfdCBpbmRleDIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9k
aWZmc1tpbmRleDFdIDwgbV9kaWZmc1tpbmRleDJdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBtX2RpZmZzOworfTsKIAogc3RhdGljIGNvbnN0IFZlY3RvcjxR
dWFsaWZpZWROYW1lPiYgZm9ybUlucHV0VGFncygpCiB7CkBAIC02MCw2ICs3NCwxMyBAQCBzdGF0
aWMgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiBmb3JtSW5wdXRUYWdzKCkKICAgICByZXR1
cm4gZm9ybUlucHV0VGFnczsKIH0KIAorVGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0ZXI6
OkF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyKQorICAgIDogY2x1c3RlckJs
b2NrKGNsdXN0ZXIpCisgICAgLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KDApCisgICAgLCBtYXhB
bGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGgoMjAwKQoreworfQorCiBUZXh0QXV0b3NpemVy
OjpUZXh0QXV0b3NpemVyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CkBAIC02OSw2ICs5MCw0MCBAQCBUZXh0QXV0b3NpemVyOjp+VGV4dEF1dG9zaXpl
cigpCiB7CiB9CiAKK1ZlY3RvcjxWZWN0b3I8VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI+ID4gVGV4dEF1dG9zaXplcjo6c3BsaXROYXJyb3dDbHVzdGVyc0J5V2lkdGhEaWZmZXJlbmNl
KGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVyKQoreworICAgIGNvbnN0IFZl
Y3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzID0gcGFyZW50Q2x1c3Rlci5uYXJyb3dE
ZXNjZW5kYW50czsKKyAgICBjb25zdCBmbG9hdCBtYXhEaWZmRGlmZmVyZW5jZSA9IDEwMDsKKyAg
ICBWZWN0b3I8ZmxvYXQ+IGRpZmZlcmVuY2VzOworICAgIGRpZmZlcmVuY2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoY2x1c3RlcnMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8c2l6ZV90PiBjbHVzdGVy
SW5kaWNlczsKKyAgICBjbHVzdGVySW5kaWNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNsdXN0
ZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbHVzdGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBmbG9hdCBjbHVzdGVyV2lkdGggPSBjbHVzdGVyc1tpXS5jbHVzdGVy
QmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgZmxvYXQgcGFyZW50VGV4dFdp
ZHRoID0gcGFyZW50Q2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNh
bFdpZHRoKCk7CisgICAgICAgIGRpZmZlcmVuY2VzLmFwcGVuZChwYXJlbnRUZXh0V2lkdGggLSBj
bHVzdGVyV2lkdGgpOworICAgICAgICBjbHVzdGVySW5kaWNlcy5hcHBlbmQoaSk7CisgICAgfQor
ICAgIHN0ZDo6c29ydChjbHVzdGVySW5kaWNlcy5iZWdpbigpLCBjbHVzdGVySW5kaWNlcy5lbmQo
KSwgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShkaWZmZXJlbmNlcykpOworICAgIFZl
Y3RvcjxWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gdWJlckNsdXN0ZXJzOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlckluZGljZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKHViZXJDbHVzdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICB1YmVyQ2x1c3RlcnMuYXBw
ZW5kKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4oKSk7CisKKyAgICAgICAgc2l6ZV90IGN1cnJl
bnRJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW2ldOworICAgICAgICBjb25zdCBBdXRvc2l6aW5nQ2x1
c3RlciYgY3VycmVudENsdXN0ZXIgPSBjbHVzdGVyc1tjdXJyZW50SW5kZXhdOworICAgICAgICB1
YmVyQ2x1c3RlcnMubGFzdCgpLmFwcGVuZChjdXJyZW50Q2x1c3Rlcik7CisKKyAgICAgICAgaWYg
KGkgKyAxIDwgY2x1c3RlckluZGljZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmbG9hdCBjdXJy
ZW50RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICBm
bG9hdCBuZXh0RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2NsdXN0ZXJJbmRpY2VzW2kgKyAxXV07
CisgICAgICAgICAgICBpZiAoYWJzKG5leHREaWZmZXJlbmNlIC0gY3VycmVudERpZmZlcmVuY2Up
ID4gbWF4RGlmZkRpZmZlcmVuY2UpCisgICAgICAgICAgICAgICAgdWJlckNsdXN0ZXJzLmFwcGVu
ZChWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB1YmVyQ2x1c3RlcnM7Cit9CisKIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRy
ZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogewogICAgIC8vIEZJWE1FOiBUZXh0IEF1dG9z
aXppbmcgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIG1fZG9jdW1lbnQtPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+dXNlRml4ZWRMYXlvdXQoKQpAQCAtMTA2LDIyICsxNjEsNTUgQEAg
Ym9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJv
b3QpCiAgICAgd2hpbGUgKGNsdXN0ZXIgJiYgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
CiAgICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyLT5jb250YWluaW5nQmxvY2soKTsKIAotICAgIHBy
b2Nlc3NDbHVzdGVyKGNsdXN0ZXIsIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7
CisgICAgQXV0b3NpemluZ0NsdXN0ZXIgY2x1c3RlckluZm8oY2x1c3Rlcik7CisgICAgcHJvY2Vz
c0NsdXN0ZXIoY2x1c3RlckluZm8sIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0
ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9i
amVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93
SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1ViZXJDbHVzdGVyKFZlY3RvcjxBdXRv
c2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzLCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCit7CisgICAgZmxvYXQgbWF4VGV4dFdpZHRoID0gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KGNsdXN0ZXJzW2ldLmNsdXN0ZXJCbG9jayk7CisgICAgICAgIGNsdXN0ZXJz
W2ldLmJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0OworICAg
ICAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgICAgIG1heFRleHRXaWR0aCA9IG1heCh0ZXh0V2lkdGgsIG1heFRl
eHRXaWR0aCk7CisgICAgfQorICAgIGZsb2F0IHRvdGFsVGV4dFdpZHRoID0gMDsKKyAgICBjb25z
dCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gbWF4
VGV4dFdpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgYm9vbCBzaG91bGRCZUF1dG9zaXplZCA9
IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKKyAgICAgICAgbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgoY2x1c3RlcnNbaV0uYmxvY2tDb250YWluaW5nQWxsVGV4dCwgY2x1c3RlcnNb
aV0sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgdG90YWxUZXh0V2lkdGggKz0g
dGV4dFdpZHRoOworICAgICAgICBpZiAodG90YWxUZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKSB7
CisgICAgICAgICAgICBzaG91bGRCZUF1dG9zaXplZCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsdXN0ZXJz
LnNpemUoKTsgKytpKQorICAgICAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyc1tpXSwgY2x1c3Rl
cnNbaV0uY2x1c3RlckJsb2NrLCBjbHVzdGVyc1tpXS5jbHVzdGVyQmxvY2ssIHdpbmRvd0luZm8s
IG1heFRleHRXaWR0aCwgc2hvdWxkQmVBdXRvc2l6ZWQpOworfQorCit2b2lkIFRleHRBdXRvc2l6
ZXI6OnByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1
dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAgIC8vIE1hbnkgcGFnZXMgc2V0
IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQogICAg
IC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVz
dGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZp
cnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0ZXIg
KGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4
dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5kZXJC
bG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY2x1c3RlckluZm8uYmxvY2tDb250
YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVy
SW5mby5jbHVzdGVyQmxvY2spOworICAgIGZsb2F0IHRleHRXaWR0aCA9IGNsdXN0ZXJJbmZvLmJs
b2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBib29sIHNo
b3VsZEJlQXV0b3NpemVkID0gY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNsdXN0ZXJJbmZvLCB0
ZXh0V2lkdGgpOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXJJbmZvLCBjb250YWluZXIsIHN1
YnRyZWVSb290LCB3aW5kb3dJbmZvLCB0ZXh0V2lkdGgsIHNob3VsZEJlQXV0b3NpemVkKTsKK30K
IAordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihBdXRvc2l6aW5nQ2x1c3RlciYg
Y2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJl
ZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbywgZmxvYXQg
dGV4dFdpZHRoLCBib29sIHNob3VsZEJlQXV0b3NpemVkKQoreworICAgIGNvbnN0IFJlbmRlckJs
b2NrKiBjbHVzdGVyID0gY2x1c3RlckluZm8uY2x1c3RlckJsb2NrOwogICAgIGZsb2F0IG11bHRp
cGxpZXIgPSAxOwotICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgeworICAgIGlmIChzaG91bGRCZUF1dG9zaXplZCkgewog
ICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby53
aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0gY2x1
c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6
ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAgICAgICAv
LyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0byBhdm9p
ZCBleHRyZW1lIG11bHRpcGxpZXJzLgpAQCAtMTMyLDEwICsyMjAsMTQgQEAgdm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwKICAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDEuMGYsIG11bHRpcGxp
ZXIpOwogICAgIH0KIAotICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVy
LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2luZG93SW5mbyk7CisgICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIGNsdXN0ZXJJbmZvLCBzdWJ0
cmVlUm9vdCwgd2luZG93SW5mbyk7CisKKyAgICBWZWN0b3I8VmVjdG9yPEF1dG9zaXppbmdDbHVz
dGVyPiA+IHViZXJDbHVzdGVycyA9IHNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5j
ZShjbHVzdGVySW5mbyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1YmVyQ2x1c3RlcnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHByb2Nlc3NVYmVyQ2x1c3Rlcih1YmVyQ2x1c3RlcnNbaV0s
IHdpbmRvd0luZm8pOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIo
ZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNv
bnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlckluZm8sIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKIHsK
ICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnRhaW5lcikpOwogCkBAIC0xNTEs
MTAgKzI0MywxNSBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQg
bXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgYwogICAgICAgICAgICAgLy8gRklY
TUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9ydGlvbmF0ZWx5LgogICAgICAgICB9
IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAg
ICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFu
dCk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ss
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQotICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVy
KGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRv
d0luZm8pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWlu
ZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBk
ZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgaWYgKGlzU3RhbmRhbG9u
ZUF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8uYmxvY2tDb250
YWluaW5nQWxsVGV4dCkpIHsKKyAgICAgICAgICAgICAgICBBdXRvc2l6aW5nQ2x1c3RlciBkZXNj
ZW5kYW50QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50QXV0b3NpemluZ0NsdXN0ZXIsIGRlc2NlbmRhbnRC
bG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5m
bykpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdkIGxpa2UgdG8gY29tYmluZSBhbGwgc3VjaCBj
bHVzdGVycyBieSB0aGUgd2lkdGggZGlmZmVyZW5jZSBpbnRvIHViZXItY2x1c3RlcnMgYW5kIGF1
dG9zaXplCisgICAgICAgICAgICAgICAgLy8gdGhlbSBzaW1pbGFybHkuIFNvIHNhdmUgaXQgZm9y
IG5vdyBhbmQgcHJvY2VzcyBsYXRlciBvbiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHN1Y2gg
YmxvY2tzLgorICAgICAgICAgICAgICAgIGNsdXN0ZXJJbmZvLm5hcnJvd0Rlc2NlbmRhbnRzLmFw
cGVuZChBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2Vu
ZGFudEJsb2NrLCBjbHVzdGVySW5mbywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAg
ICAgICAgfQogICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2Nl
bmRhbnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVSb290KTsKICAgICB9CkBAIC0y
MTcsNyArMzE0LDI1IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
KQorYm9vbCBUZXh0QXV0b3NpemVyOjppc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRBdXRvc2l6aW5n
Q2x1c3RlcikKK3sKKyAgICAvLyBVcHBlciBsaW1pdCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIGNvbnRhaW5pbmcgYWxsCisgICAgLy8gdGV4
dCBhbmQgdGhhdCBvZiBhIG5hcnJvdyBjaGlsZCBiZWZvcmUgdGhlIGNoaWxkIGJlY29tZXMgYSBj
bHVzdGVyLgorICAgIGNvbnN0IGZsb2F0IG1heFdpZHRoRGlmZmVyZW5jZURpZmZlcmVuY2UgPSA1
MDsKKworICAgIEFTU0VSVChwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdB
bGxUZXh0KTsKKworICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgZmxvYXQgY2x1c3RlclRleHRXaWR0aCA9IHBhcmVudEF1dG9zaXpp
bmdDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsK
KyAgICBmbG9hdCB3aWR0aERpZmZlcmVuY2UgPSBzdGQ6OmFicyhjbHVzdGVyVGV4dFdpZHRoIC0g
Y29udGVudFdpZHRoKTsKKyAgICBpZiAod2lkdGhEaWZmZXJlbmNlIC0gcGFyZW50QXV0b3Npemlu
Z0NsdXN0ZXIubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoIDwgbWF4V2lkdGhEaWZm
ZXJlbmNlRGlmZmVyZW5jZSkgeworICAgICAgICBwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5tYXhB
bGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGggPSBzdGQ6Om1heCh3aWR0aERpZmZlcmVuY2Us
IHBhcmVudEF1dG9zaXppbmdDbHVzdGVyLm1heEFsbG93ZWREaWZmZXJlbmNlRnJvbVRleHRXaWR0
aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVyKQogewogICAgIC8v
ICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMg
d2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNp
emUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2luZwpAQCAtMjQzLDE3ICszNTgsMjcg
QEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAvLyBzaW5jZSB0aGV5IG5lZWQgc3BlY2lh
bCB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAgIEFTU0VSVChpc0F1dG9zaXppbmdD
b250YWluZXIocmVuZGVyZXIpKTsKIAotICAgIC8vIFVwcGVyIGxpbWl0IG9uIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwK
LSAgICAvLyB0ZXh0IGFuZCB0aGF0IG9mIGEgbmFycm93IGNoaWxkIGJlZm9yZSB0aGUgY2hpbGQg
YmVjb21lcyBhIGNsdXN0ZXIuCi0gICAgY29uc3QgZmxvYXQgbWF4V2lkdGhEaWZmZXJlbmNlID0g
MjAwOworICAgIGlmIChpc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3RlcihyZW5kZXJlciwgcGFyZW50
Q2x1c3RlcikpCisgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgcmV0dXJuIGlzU3RhbmRhbG9u
ZUF1dG9zaXppbmdDbHVzdGVyKHJlbmRlcmVyLCBwYXJlbnRDbHVzdGVyLmJsb2NrQ29udGFpbmlu
Z0FsbFRleHQpOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6OmlzU3RhbmRhbG9uZUF1dG9zaXpp
bmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sq
IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7CisgICAgQVNTRVJUKGlzQXV0b3Npemlu
Z0NvbnRhaW5lcihyZW5kZXJlcikpOwogICAgIGlmIChwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KSB7CiAgICAgICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIGZsb2F0IGNsdXN0ZXJUZXh0V2lkdGggPSBwYXJlbnRCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIGlmIChj
b250ZW50V2lkdGggPiBjbHVzdGVyVGV4dFdpZHRoIHx8IChjbHVzdGVyVGV4dFdpZHRoIC0gY29u
dGVudFdpZHRoKSA+IG1heFdpZHRoRGlmZmVyZW5jZSkKKyAgICAgICAgaWYgKGNvbnRlbnRXaWR0
aCA+IGNsdXN0ZXJUZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ2x1c3RlcihyZW5kZXJlcik7Cit9CisKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVy
ZXIpCit7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKQogICAgICAgICB8fCBy
ZW5kZXJlci0+aXNGbG9hdGluZygpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKQpAQCAtMjY3LDEwICszOTIsOSBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0
b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBSZW5kZQog
ICAgIC8vIHRoZSBzYW1lIGFtb3VudCBldmVuIGlmIHRoZXkncmUgZGlmZmVyZW50IHdpZHRoczsg
c28gZG8gaGFzQ29sdW1ucygpCiAgICAgLy8gY29udGFpbmVycywgYW5kIHByb2JhYmx5IGZsZXhi
b3hlcy4uLgogfQotCiBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRh
aW5lcihvYmplY3QpICYmIGlzQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3Qp
LCAwKTsKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFpbmVyKG9iamVjdCkgJiYgaXNBdXRv
c2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCkpOwogfQogCiBib29sIFRleHRBdXRv
c2l6ZXI6OmNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluZXIpCkBAIC0zNjQsNyArNDg4LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250ZW50SGVp
Z2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6
ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2Nr
V2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChBdXRv
c2l6aW5nQ2x1c3RlciYgY2x1c3RlciwgZmxvYXQgYmxvY2tXaWR0aCkKIHsKICAgICAvLyBEb24n
dCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4
dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVh
c3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTM3OSwxMyArNTAzLDEzIEBAIGJvb2wgVGV4dEF1
dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBCiAgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OwogICAgIGZs
b2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09mVGV4dDsKICAgICBmbG9h
dCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4
dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjbHVzdGVyLmJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIGNsdXN0ZXIsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICBp
ZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50
VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2Nr
KiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0
V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVyLCBm
bG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCiB7CiAgICAgYm9vbCBza2lwTG9j
YWxUZXh0ID0gIWNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcik7CiAKQEAgLTM5
NSw4ICs1MTksOCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdp
ZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbgogICAgICAgICAgICAgdGV4dFdp
ZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgKiBk
ZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6ZSgpOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0g
ICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0KSkKLSAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRl
eHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRX
aWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3Rlcihk
ZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXIpKQorICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5k
YW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlciwgbWluVGV4dFdpZHRoLCB0ZXh0
V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRo
KQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3Np
emVyLmgKaW5kZXggZTFjMjJhZWI5ZGIzYmM5OWM4YjczZTFiMDY4OWM0ZjZhMTcwNmNmYS4uOTMx
YjgwMWFjNjllYTBjZjRlNWMxOTljYmE2NDVjYWFkNjVkZDIzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTgsMjMgKzU5LDM3IEBAIHByaXZhdGU6CiAgICAgICAgIExhc3RUb0ZpcnN0CiAg
ICAgfTsKIAorICAgIHN0cnVjdCBBdXRvc2l6aW5nQ2x1c3RlciB7CisgICAgICAgIGV4cGxpY2l0
IEF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyKTsKKworICAgICAgICBSZW5k
ZXJCbG9jayogY2x1c3RlckJsb2NrOworICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tD
b250YWluaW5nQWxsVGV4dDsKKyAgICAgICAgZmxvYXQgbWF4QWxsb3dlZERpZmZlcmVuY2VGcm9t
VGV4dFdpZHRoOworICAgICAgICBWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+IG5hcnJvd0Rlc2Nl
bmRhbnRzOworICAgIH07CisKICAgICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERvY3VtZW50Kik7
CiAKLSAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVs
dGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc1ViZXJDbHVzdGVyKFdURjo6
VmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiYgY2x1c3RlcnMsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NsdXN0ZXIoQXV0b3NpemluZ0NsdXN0ZXIm
IGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nl
c3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdX
aW5kb3dJbmZvJiwgZmxvYXQgdGV4dFdpZHRoLCBib29sIHNob3VsZEJlQXV0b3NpemVkKTsKKyAg
ICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lciwgQXV0b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXJJbmZvLCBSZW5kZXJPYmplY3QqIHN1
YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKIAogICAgIHZvaWQg
c2V0TXVsdGlwbGllcihSZW5kZXJPYmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9vbCBp
c0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJv
b2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayosIGNvbnN0IFJlbmRlckJs
b2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKyAgICBzdGF0aWMgYm9vbCBpc1Bh
cnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9z
aXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVySW5mbyk7CisgICAgc3RhdGljIGJvb2wgaXNTdGFu
ZGFsb25lQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25zdCBSZW5kZXJC
bG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgc3RhdGljIGJvb2wgaXNB
dXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayosIEF1dG9zaXppbmdDbHVzdGVyJik7
CisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayop
OwogICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0
Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBS
ZW5kZXJCbG9jayogY29udGFpbmVyKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJDb250YWlu
c09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlciwgY29uc3QgVmVjdG9yPFF1YWxp
ZmllZE5hbWU+JiB0YWdzKTsKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJJc1Jvd09mTGlua3Mo
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIpOwogICAgIHN0YXRpYyBib29sIGNvbnRlbnRI
ZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpOwotICAgIHN0
YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tXaWR0aCk7Ci0gICAgc3RhdGljIHZvaWQg
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRX
aWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJl
QXV0b3NpemVkKEF1dG9zaXppbmdDbHVzdGVyJiwgZmxvYXQgYmxvY2tXaWR0aCk7CisgICAgc3Rh
dGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lciwgQXV0b3NpemluZ0NsdXN0ZXImLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0
ZXh0V2lkdGgpOwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0cmVlIG9mIGRlc2NlbmRh
bnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFpbmVycyAoYnV0IHJldHVybmluZyB0
aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KICAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0
SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKQEAgLTg1LDYgKzEwMCw5IEBA
IHByaXZhdGU6CiAgICAgLy8gYmVsb25nIHRvIGFueSBjbHVzdGVyLgogICAgIHN0YXRpYyBjb25z
dCBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRl
ck9iamVjdCosIHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERpcmVjdGlvbik7CiAKKyAgICBzdGF0
aWMgVmVjdG9yPFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4gPiBzcGxpdE5hcnJvd0NsdXN0ZXJz
QnlXaWR0aERpZmZlcmVuY2UoY29uc3QgQXV0b3NpemluZ0NsdXN0ZXImIHBhcmVudENsdXN0ZXIp
OworCisKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185518</attachid>
            <date>2013-01-30 10:42:30 -0800</date>
            <delta_ts>2013-01-30 10:42:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107300-20130130183915.patch</filename>
            <type>text/plain</type>
            <size>20332</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIxZjlhNGE0N2EyNzAw
OTRmZWQ2NTAzMzMzYmNiNTAzOTgxZjQ3My4uN2ExYTViMWNjMDBkMzE3M2EwZGMyNjFkOWE2OGI5
NDliNmIwYTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTMwICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbXBsZXRlIGZpeCBmb3IgcmVkZGl0LmNvbSAobm90IGZvciBzdWJtaXR0aW5nLCBqdXN0
IGZvciBnZW5lcmFsIHJldmlldykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDczMDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29tcGFy
ZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJlSW5k
aWNlc0J5V2lkdGhEaWZmZXJlbmNlOjpDb21wYXJlSW5kaWNlc0J5V2lkdGhEaWZmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBhcmVJbmRpY2VzQnlXaWR0aERpZmZlcmVuY2U6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI6OkF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OnNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjpwcm9jZXNzVWJlckNsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpp
c1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjppc0F1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6OmlzU3RhbmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKEF1dG9zaXppbmdDbHVzdGVyKToK
KyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOgorCiAyMDEzLTAxLTI5ICBBbHBoYSBMYW0gIDxoY2xh
bUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbnJldmlld2VkIGJ1aWxkIGZp
eC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRleCBiZWRl
Mjg0NWI2YzdlN2M0ZTEzZGIzNGU2Nzg1NDViNzc5MzkwNzZlLi43YjZhMzNhZjAzNzA4ZTZkNjIw
NTZjOTE1ZjkxNDY3ZGYyMWU0MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuY3BwCkBAIC0zNywxNiArMzcsMzAgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCiBzdHJ1Y3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvIHsKICAg
ICBJbnRTaXplIHdpbmRvd1NpemU7CiAgICAgSW50U2l6ZSBtaW5MYXlvdXRTaXplOwogfTsKIAor
Y2xhc3MgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZSB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBkaWZmcyk6IG1fZGlmZnMoZGlmZnMpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKHNpemVf
dCBpbmRleDEsIHNpemVfdCBpbmRleDIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9k
aWZmc1tpbmRleDFdIDwgbV9kaWZmc1tpbmRleDJdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBtX2RpZmZzOworfTsKIAogc3RhdGljIGNvbnN0IFZlY3RvcjxR
dWFsaWZpZWROYW1lPiYgZm9ybUlucHV0VGFncygpCiB7CkBAIC02MCw2ICs3NCwxMyBAQCBzdGF0
aWMgY29uc3QgVmVjdG9yPFF1YWxpZmllZE5hbWU+JiBmb3JtSW5wdXRUYWdzKCkKICAgICByZXR1
cm4gZm9ybUlucHV0VGFnczsKIH0KIAorVGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0ZXI6
OkF1dG9zaXppbmdDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyKQorICAgIDogY2x1c3RlckJs
b2NrKGNsdXN0ZXIpCisgICAgLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KDApCisgICAgLCBtYXhB
bGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lkdGgoMTUwKQoreworfQorCiBUZXh0QXV0b3NpemVy
OjpUZXh0QXV0b3NpemVyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CkBAIC02OSw2ICs5MCw0MCBAQCBUZXh0QXV0b3NpemVyOjp+VGV4dEF1dG9zaXpl
cigpCiB7CiB9CiAKK1ZlY3RvcjxWZWN0b3I8VGV4dEF1dG9zaXplcjo6QXV0b3NpemluZ0NsdXN0
ZXI+ID4gVGV4dEF1dG9zaXplcjo6c3BsaXROYXJyb3dDbHVzdGVyc0J5V2lkdGhEaWZmZXJlbmNl
KGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVyKQoreworICAgIGNvbnN0IFZl
Y3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzID0gcGFyZW50Q2x1c3Rlci5uYXJyb3dE
ZXNjZW5kYW50czsKKyAgICBjb25zdCBmbG9hdCBtYXhEaWZmRGlmZmVyZW5jZSA9IDEwMDsKKyAg
ICBWZWN0b3I8ZmxvYXQ+IGRpZmZlcmVuY2VzOworICAgIGRpZmZlcmVuY2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoY2x1c3RlcnMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8c2l6ZV90PiBjbHVzdGVy
SW5kaWNlczsKKyAgICBjbHVzdGVySW5kaWNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNsdXN0
ZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbHVzdGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBmbG9hdCBjbHVzdGVyV2lkdGggPSBjbHVzdGVyc1tpXS5jbHVzdGVy
QmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgZmxvYXQgcGFyZW50VGV4dFdp
ZHRoID0gcGFyZW50Q2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNh
bFdpZHRoKCk7CisgICAgICAgIGRpZmZlcmVuY2VzLmFwcGVuZChwYXJlbnRUZXh0V2lkdGggLSBj
bHVzdGVyV2lkdGgpOworICAgICAgICBjbHVzdGVySW5kaWNlcy5hcHBlbmQoaSk7CisgICAgfQor
ICAgIHN0ZDo6c29ydChjbHVzdGVySW5kaWNlcy5iZWdpbigpLCBjbHVzdGVySW5kaWNlcy5lbmQo
KSwgQ29tcGFyZUluZGljZXNCeVdpZHRoRGlmZmVyZW5jZShkaWZmZXJlbmNlcykpOworICAgIFZl
Y3RvcjxWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gdWJlckNsdXN0ZXJzOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlckluZGljZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKHViZXJDbHVzdGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICB1YmVyQ2x1c3RlcnMuYXBw
ZW5kKFZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4oKSk7CisKKyAgICAgICAgc2l6ZV90IGN1cnJl
bnRJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW2ldOworICAgICAgICBjb25zdCBBdXRvc2l6aW5nQ2x1
c3RlciYgY3VycmVudENsdXN0ZXIgPSBjbHVzdGVyc1tjdXJyZW50SW5kZXhdOworICAgICAgICB1
YmVyQ2x1c3RlcnMubGFzdCgpLmFwcGVuZChjdXJyZW50Q2x1c3Rlcik7CisKKyAgICAgICAgaWYg
KGkgKyAxIDwgY2x1c3RlckluZGljZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmbG9hdCBjdXJy
ZW50RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICBm
bG9hdCBuZXh0RGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VzW2NsdXN0ZXJJbmRpY2VzW2kgKyAxXV07
CisgICAgICAgICAgICBpZiAoYWJzKG5leHREaWZmZXJlbmNlIC0gY3VycmVudERpZmZlcmVuY2Up
ID4gbWF4RGlmZkRpZmZlcmVuY2UpCisgICAgICAgICAgICAgICAgdWJlckNsdXN0ZXJzLmFwcGVu
ZChWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB1YmVyQ2x1c3RlcnM7Cit9CisKIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRy
ZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogewogICAgIC8vIEZJWE1FOiBUZXh0IEF1dG9z
aXppbmcgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIG1fZG9jdW1lbnQtPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+dXNlRml4ZWRMYXlvdXQoKQpAQCAtMTA2LDIyICsxNjEsNTUgQEAg
Ym9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJv
b3QpCiAgICAgd2hpbGUgKGNsdXN0ZXIgJiYgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
CiAgICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyLT5jb250YWluaW5nQmxvY2soKTsKIAotICAgIHBy
b2Nlc3NDbHVzdGVyKGNsdXN0ZXIsIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7
CisgICAgQXV0b3NpemluZ0NsdXN0ZXIgY2x1c3RlckluZm8oY2x1c3Rlcik7CisgICAgcHJvY2Vz
c0NsdXN0ZXIoY2x1c3RlckluZm8sIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0
ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9i
amVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93
SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1ViZXJDbHVzdGVyKFZlY3RvcjxBdXRv
c2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzLCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCit7CisgICAgZmxvYXQgbWF4VGV4dFdpZHRoID0gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsdXN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KGNsdXN0ZXJzW2ldLmNsdXN0ZXJCbG9jayk7CisgICAgICAgIGNsdXN0ZXJz
W2ldLmJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0OworICAg
ICAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgICAgIG1heFRleHRXaWR0aCA9IG1heCh0ZXh0V2lkdGgsIG1heFRl
eHRXaWR0aCk7CisgICAgfQorICAgIGZsb2F0IHRvdGFsVGV4dFdpZHRoID0gMDsKKyAgICBjb25z
dCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gbWF4
VGV4dFdpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgYm9vbCBzaG91bGRCZUF1dG9zaXplZCA9
IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKKyAgICAgICAgbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgoY2x1c3RlcnNbaV0uYmxvY2tDb250YWluaW5nQWxsVGV4dCwgY2x1c3RlcnNb
aV0sIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgdG90YWxUZXh0V2lkdGggKz0g
dGV4dFdpZHRoOworICAgICAgICBpZiAodG90YWxUZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKSB7
CisgICAgICAgICAgICBzaG91bGRCZUF1dG9zaXplZCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsdXN0ZXJz
LnNpemUoKTsgKytpKQorICAgICAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyc1tpXSwgY2x1c3Rl
cnNbaV0uY2x1c3RlckJsb2NrLCBjbHVzdGVyc1tpXS5jbHVzdGVyQmxvY2ssIHdpbmRvd0luZm8s
IG1heFRleHRXaWR0aCwgc2hvdWxkQmVBdXRvc2l6ZWQpOworfQorCit2b2lkIFRleHRBdXRvc2l6
ZXI6OnByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1
dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAgIC8vIE1hbnkgcGFnZXMgc2V0
IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQogICAg
IC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVz
dGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZp
cnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0ZXIg
KGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4
dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5kZXJC
bG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY2x1c3RlckluZm8uYmxvY2tDb250
YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVy
SW5mby5jbHVzdGVyQmxvY2spOworICAgIGZsb2F0IHRleHRXaWR0aCA9IGNsdXN0ZXJJbmZvLmJs
b2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBib29sIHNo
b3VsZEJlQXV0b3NpemVkID0gY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNsdXN0ZXJJbmZvLCB0
ZXh0V2lkdGgpOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXJJbmZvLCBjb250YWluZXIsIHN1
YnRyZWVSb290LCB3aW5kb3dJbmZvLCB0ZXh0V2lkdGgsIHNob3VsZEJlQXV0b3NpemVkKTsKK30K
IAordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihBdXRvc2l6aW5nQ2x1c3RlciYg
Y2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJl
ZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbywgZmxvYXQg
dGV4dFdpZHRoLCBib29sIHNob3VsZEJlQXV0b3NpemVkKQoreworICAgIGNvbnN0IFJlbmRlckJs
b2NrKiBjbHVzdGVyID0gY2x1c3RlckluZm8uY2x1c3RlckJsb2NrOwogICAgIGZsb2F0IG11bHRp
cGxpZXIgPSAxOwotICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgeworICAgIGlmIChzaG91bGRCZUF1dG9zaXplZCkgewog
ICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby53
aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0gY2x1
c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6
ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAgICAgICAv
LyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0byBhdm9p
ZCBleHRyZW1lIG11bHRpcGxpZXJzLgpAQCAtMTMyLDEwICsyMjAsMTQgQEAgdm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwKICAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDEuMGYsIG11bHRpcGxp
ZXIpOwogICAgIH0KIAotICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVy
LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2luZG93SW5mbyk7CisgICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIGNsdXN0ZXJJbmZvLCBzdWJ0
cmVlUm9vdCwgd2luZG93SW5mbyk7CisKKyAgICBWZWN0b3I8VmVjdG9yPEF1dG9zaXppbmdDbHVz
dGVyPiA+IHViZXJDbHVzdGVycyA9IHNwbGl0TmFycm93Q2x1c3RlcnNCeVdpZHRoRGlmZmVyZW5j
ZShjbHVzdGVySW5mbyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1YmVyQ2x1c3RlcnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHByb2Nlc3NVYmVyQ2x1c3Rlcih1YmVyQ2x1c3RlcnNbaV0s
IHdpbmRvd0luZm8pOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIo
ZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNv
bnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlckluZm8sIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKIHsK
ICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnRhaW5lcikpOwogCkBAIC0xNTEs
MTAgKzI0MywxNSBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQg
bXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgYwogICAgICAgICAgICAgLy8gRklY
TUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9ydGlvbmF0ZWx5LgogICAgICAgICB9
IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAg
ICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFu
dCk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ss
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQotICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVy
KGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRv
d0luZm8pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWlu
ZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBk
ZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgaWYgKGlzU3RhbmRhbG9u
ZUF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8uYmxvY2tDb250
YWluaW5nQWxsVGV4dCkpIHsKKyAgICAgICAgICAgICAgICBBdXRvc2l6aW5nQ2x1c3RlciBkZXNj
ZW5kYW50QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50QXV0b3NpemluZ0NsdXN0ZXIsIGRlc2NlbmRhbnRC
bG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVySW5m
bykpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdkIGxpa2UgdG8gY29tYmluZSBhbGwgc3VjaCBj
bHVzdGVycyBieSB0aGUgd2lkdGggZGlmZmVyZW5jZSBpbnRvIHViZXItY2x1c3RlcnMgYW5kIGF1
dG9zaXplCisgICAgICAgICAgICAgICAgLy8gdGhlbSBzaW1pbGFybHkuIFNvIHNhdmUgaXQgZm9y
IG5vdyBhbmQgcHJvY2VzcyBsYXRlciBvbiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHN1Y2gg
YmxvY2tzLgorICAgICAgICAgICAgICAgIGNsdXN0ZXJJbmZvLm5hcnJvd0Rlc2NlbmRhbnRzLmFw
cGVuZChBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2Vu
ZGFudEJsb2NrLCBjbHVzdGVySW5mbywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAg
ICAgICAgfQogICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2Nl
bmRhbnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVSb290KTsKICAgICB9CkBAIC0y
MTcsNyArMzE0LDI1IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
KQorYm9vbCBUZXh0QXV0b3NpemVyOjppc1BhcnRpYWxBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRBdXRvc2l6aW5n
Q2x1c3RlcikKK3sKKyAgICAvLyBVcHBlciBsaW1pdCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIGNvbnRhaW5pbmcgYWxsCisgICAgLy8gdGV4
dCBhbmQgdGhhdCBvZiBhIG5hcnJvdyBjaGlsZCBiZWZvcmUgdGhlIGNoaWxkIGJlY29tZXMgYSBj
bHVzdGVyLgorICAgIGNvbnN0IGZsb2F0IG1heFdpZHRoRGlmZmVyZW5jZURpZmZlcmVuY2UgPSA1
MDsKKworICAgIEFTU0VSVChwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5ibG9ja0NvbnRhaW5pbmdB
bGxUZXh0KTsKKworICAgIGZsb2F0IGNvbnRlbnRXaWR0aCA9IHJlbmRlcmVyLT5jb250ZW50TG9n
aWNhbFdpZHRoKCk7CisgICAgZmxvYXQgY2x1c3RlclRleHRXaWR0aCA9IHBhcmVudEF1dG9zaXpp
bmdDbHVzdGVyLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsK
KyAgICBmbG9hdCB3aWR0aERpZmZlcmVuY2UgPSBzdGQ6OmFicyhjbHVzdGVyVGV4dFdpZHRoIC0g
Y29udGVudFdpZHRoKTsKKyAgICBpZiAod2lkdGhEaWZmZXJlbmNlIC0gcGFyZW50QXV0b3Npemlu
Z0NsdXN0ZXIubWF4QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoIDw9IG1heFdpZHRoRGlm
ZmVyZW5jZURpZmZlcmVuY2UpIHsKKyAgICAgICAgcGFyZW50QXV0b3NpemluZ0NsdXN0ZXIubWF4
QWxsb3dlZERpZmZlcmVuY2VGcm9tVGV4dFdpZHRoID0gc3RkOjptYXgod2lkdGhEaWZmZXJlbmNl
LCBwYXJlbnRBdXRvc2l6aW5nQ2x1c3Rlci5tYXhBbGxvd2VkRGlmZmVyZW5jZUZyb21UZXh0V2lk
dGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgcGFyZW50Q2x1c3RlcikKIHsKICAgICAv
LyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3NpemluZyBjb250YWluZXJz
IHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBhIHVuaWZvcm0gdGV4dCBz
aXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKQEAgLTI0MywxNyArMzU4LDI3
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgLy8gc2luY2UgdGhleSBuZWVkIHNwZWNp
YWwgdHJlYXRtZW50IGR1ZSB0byB0aGVpciB3aWR0aC4KICAgICBBU1NFUlQoaXNBdXRvc2l6aW5n
Q29udGFpbmVyKHJlbmRlcmVyKSk7CiAKLSAgICAvLyBVcHBlciBsaW1pdCBvbiB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIGNvbnRhaW5pbmcgYWxs
Ci0gICAgLy8gdGV4dCBhbmQgdGhhdCBvZiBhIG5hcnJvdyBjaGlsZCBiZWZvcmUgdGhlIGNoaWxk
IGJlY29tZXMgYSBjbHVzdGVyLgotICAgIGNvbnN0IGZsb2F0IG1heFdpZHRoRGlmZmVyZW5jZSA9
IDIwMDsKKyAgICBpZiAoaXNQYXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIocmVuZGVyZXIsIHBhcmVu
dENsdXN0ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIHJldHVybiBpc1N0YW5kYWxv
bmVBdXRvc2l6aW5nQ2x1c3RlcihyZW5kZXJlciwgcGFyZW50Q2x1c3Rlci5ibG9ja0NvbnRhaW5p
bmdBbGxUZXh0KTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjppc1N0YW5kYWxvbmVBdXRvc2l6
aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2Nr
KiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KQoreworICAgIEFTU0VSVChpc0F1dG9zaXpp
bmdDb250YWluZXIocmVuZGVyZXIpKTsKICAgICBpZiAocGFyZW50QmxvY2tDb250YWluaW5nQWxs
VGV4dCkgewogICAgICAgICBmbG9hdCBjb250ZW50V2lkdGggPSByZW5kZXJlci0+Y29udGVudExv
Z2ljYWxXaWR0aCgpOwogICAgICAgICBmbG9hdCBjbHVzdGVyVGV4dFdpZHRoID0gcGFyZW50Qmxv
Y2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwotICAgICAgICBpZiAo
Y29udGVudFdpZHRoID4gY2x1c3RlclRleHRXaWR0aCB8fCAoY2x1c3RlclRleHRXaWR0aCAtIGNv
bnRlbnRXaWR0aCkgPiBtYXhXaWR0aERpZmZlcmVuY2UpCisgICAgICAgIGlmIChjb250ZW50V2lk
dGggPiBjbHVzdGVyVGV4dFdpZHRoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NsdXN0ZXIocmVuZGVyZXIpOworfQorCitib29sIFRl
eHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRl
cmVyKQorewogICAgIHJldHVybiByZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkKICAgICAgICAgfHwg
cmVuZGVyZXItPmlzRmxvYXRpbmcoKQogICAgICAgICB8fCByZW5kZXJlci0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkKQEAgLTI2NywxMCArMzkyLDkgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1
dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGUK
ICAgICAvLyB0aGUgc2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3aWR0aHM7
IHNvIGRvIGhhc0NvbHVtbnMoKQogICAgIC8vIGNvbnRhaW5lcnMsIGFuZCBwcm9iYWJseSBmbGV4
Ym94ZXMuLi4KIH0KLQogYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250
YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0
KSwgMCk7CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmplY3QpICYmIGlzQXV0
b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3QpKTsKIH0KIAogYm9vbCBUZXh0QXV0
b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyKQpAQCAtMzY0LDcgKzQ4OCw3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y29udGVudEhl
aWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9j
a1dpZHRoKQorYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoQXV0
b3NpemluZ0NsdXN0ZXImIGNsdXN0ZXIsIGZsb2F0IGJsb2NrV2lkdGgpCiB7CiAgICAgLy8gRG9u
J3QgYXV0b3NpemUgY2x1c3RlcnMgdGhhdCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVzIG9mIHRl
eHQgKGluCiAgICAgLy8gcHJhY3RpY2UgbGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNpbmNlIG1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoCkBAIC0zNzksMTMgKzUwMywxMyBAQCBib29sIFRleHRB
dXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2tDb250YWluaW5nQQogICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVzT2ZUZXh0ID0gNDsKICAgICBm
bG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRoICogbWluTGluZXNPZlRleHQ7CiAgICAgZmxv
YXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRl
eHRXaWR0aCk7CisgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY2x1c3Rlci5ibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBjbHVzdGVyLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAg
aWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4
dFdpZHRoKQordm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3Rlciwg
ZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQogewogICAgIGJvb2wgc2tpcExv
Y2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb250YWluZXIpOwogCkBAIC0z
OTUsOCArNTE5LDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24KICAgICAgICAgICAgIHRleHRX
aWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRlcmVkVGV4dExlbmd0aCgpICog
ZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAgICAgfSBlbHNl
IGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwot
ICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCkpCi0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRU
ZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0
V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIo
ZGVzY2VuZGFudEJsb2NrLCBjbHVzdGVyKSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2Vu
ZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXIsIG1pblRleHRXaWR0aCwgdGV4
dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0
aCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5oCmluZGV4IGUxYzIyYWViOWRiM2JjOTljOGI3M2UxYjA2ODljNGY2YTE3MDZjZmEuLjkz
MWI4MDFhYzY5ZWEwY2Y0ZTVjMTk5Y2JhNjQ1Y2FhZDY1ZGQyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTU4LDIzICs1OSwzNyBAQCBwcml2YXRlOgogICAgICAgICBMYXN0VG9GaXJzdAog
ICAgIH07CiAKKyAgICBzdHJ1Y3QgQXV0b3NpemluZ0NsdXN0ZXIgeworICAgICAgICBleHBsaWNp
dCBBdXRvc2l6aW5nQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3Rlcik7CisKKyAgICAgICAgUmVu
ZGVyQmxvY2sqIGNsdXN0ZXJCbG9jazsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQ7CisgICAgICAgIGZsb2F0IG1heEFsbG93ZWREaWZmZXJlbmNlRnJv
bVRleHRXaWR0aDsKKyAgICAgICAgVmVjdG9yPEF1dG9zaXppbmdDbHVzdGVyPiBuYXJyb3dEZXNj
ZW5kYW50czsKKyAgICB9OworCiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCop
OwogCi0gICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1
dG9zaXppbmdXaW5kb3dJbmZvJik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11
bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0
QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NVYmVyQ2x1c3RlcihXVEY6
OlZlY3RvcjxBdXRvc2l6aW5nQ2x1c3Rlcj4mIGNsdXN0ZXJzLCBjb25zdCBUZXh0QXV0b3Npemlu
Z1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKEF1dG9zaXppbmdDbHVzdGVy
JiBjbHVzdGVySW5mbywgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9j
ZXNzQ2x1c3RlcihBdXRvc2l6aW5nQ2x1c3RlciYgY2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYsIGZsb2F0IHRleHRXaWR0aCwgYm9vbCBzaG91bGRCZUF1dG9zaXplZCk7Cisg
ICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiBjbHVzdGVySW5mbywgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lk
IHNldE11bHRpcGxpZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQpOwogCiAgICAgc3RhdGljIGJvb2wg
aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBi
b29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25zdCBSZW5kZXJC
bG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgc3RhdGljIGJvb2wgaXNQ
YXJ0aWFsQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBBdXRv
c2l6aW5nQ2x1c3RlciYgcGFyZW50Q2x1c3RlckluZm8pOworICAgIHN0YXRpYyBib29sIGlzU3Rh
bmRhbG9uZUF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgUmVuZGVy
QmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIHN0YXRpYyBib29sIGlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBBdXRvc2l6aW5nQ2x1c3RlciYp
OworICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sq
KTsKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVj
dCopOwogCiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3Qg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lcik7CiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVyQ29udGFp
bnNPbmVPZlRhZ3MoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIGNvbnN0IFZlY3RvcjxRdWFs
aWZpZWROYW1lPiYgdGFncyk7CiAgICAgc3RhdGljIGJvb2wgY29udGFpbmVySXNSb3dPZkxpbmtz
KGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyKTsKICAgICBzdGF0aWMgYm9vbCBjb250ZW50
SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKTsKLSAgICBz
dGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpOwotICAgIHN0YXRpYyB2b2lk
IG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0
V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRC
ZUF1dG9zaXplZChBdXRvc2l6aW5nQ2x1c3RlciYsIGZsb2F0IGJsb2NrV2lkdGgpOworICAgIHN0
YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBj
b250YWluZXIsIEF1dG9zaXppbmdDbHVzdGVyJiwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYg
dGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5k
YW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcg
dGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCiAgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CkBAIC04NSw2ICsxMDAsOSBA
QCBwcml2YXRlOgogICAgIC8vIGJlbG9uZyB0byBhbnkgY2x1c3Rlci4KICAgICBzdGF0aWMgY29u
c3QgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5k
ZXJPYmplY3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogCisgICAgc3Rh
dGljIFZlY3RvcjxWZWN0b3I8QXV0b3NpemluZ0NsdXN0ZXI+ID4gc3BsaXROYXJyb3dDbHVzdGVy
c0J5V2lkdGhEaWZmZXJlbmNlKGNvbnN0IEF1dG9zaXppbmdDbHVzdGVyJiBwYXJlbnRDbHVzdGVy
KTsKKworCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>