<?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>72083</bug_id>
          
          <creation_ts>2011-11-10 18:35:29 -0800</creation_ts>
          <short_desc>Switch table indexing to unsigned</short_desc>
          <delta_ts>2011-11-15 18:04:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tables</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500466</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-10 18:35:29 -0800</bug_when>
    <thetext>Follow up of bug 70369 where we switched only row / column handling to unsigned, now let&apos;s switch the remaining table code to unsigned (where it makes sense).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500473</commentid>
    <comment_count>1</comment_count>
      <attachid>114614</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-10 18:56:30 -0800</bug_when>
    <thetext>Created attachment 114614
Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502160</commentid>
    <comment_count>2</comment_count>
      <attachid>114614</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-14 12:03:28 -0800</bug_when>
    <thetext>Comment on attachment 114614
Proposed change.

View in context: https://bugs.webkit.org/attachment.cgi?id=114614&amp;action=review

&gt; Source/WebCore/ChangeLog:18
&gt; +        The only exception is reverse iterating over the array
&gt; +        as I did not find a good way of doing that without using
&gt; +        an unsigned (tried all of the usual suggestions but they
&gt; +        keep failing locally and using do { } while () is worse).
&gt; +        Due to the size limits on the columns and rows added in
&gt; +        bug 71135, it should be difficult to overflow the integer
&gt; +        in some cases.

for (unsigned i = size; i; ) {
        --i;
        // Body of loop goes here.
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502445</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-14 16:31:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 114614 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114614&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        The only exception is reverse iterating over the array
&gt; &gt; +        as I did not find a good way of doing that without using
&gt; &gt; +        an unsigned (tried all of the usual suggestions but they
&gt; &gt; +        keep failing locally and using do { } while () is worse).
&gt; &gt; +        Due to the size limits on the columns and rows added in
&gt; &gt; +        bug 71135, it should be difficult to overflow the integer
&gt; &gt; +        in some cases.
&gt; 
&gt; for (unsigned i = size; i; ) {
&gt;         --i;
&gt;         // Body of loop goes here.
&gt;     }

Exactly what I needed, thanks! I tried it and it works perfectly without being too horrible. Better patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502449</commentid>
    <comment_count>4</comment_count>
      <attachid>115056</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-14 16:36:23 -0800</bug_when>
    <thetext>Created attachment 115056
Fixed the reverse iterators after Darin&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503109</commentid>
    <comment_count>5</comment_count>
      <attachid>115056</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-15 11:46:07 -0800</bug_when>
    <thetext>Comment on attachment 115056
Fixed the reverse iterators after Darin&apos;s suggestion.

4&gt;c:\cygwin\home\buildbot\webkit\source\webcore\rendering\RenderTableSection.cpp(1206) : warning C4804: &apos;&gt;=&apos; : unsafe use of type &apos;bool&apos; in operation

Probably need a ? 1 : 0 in there to make Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503476</commentid>
    <comment_count>6</comment_count>
      <attachid>115289</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-11-15 17:47:04 -0800</bug_when>
    <thetext>Created attachment 115289
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503481</commentid>
    <comment_count>7</comment_count>
      <attachid>115289</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 18:04:14 -0800</bug_when>
    <thetext>Comment on attachment 115289
Patch for landing

Clearing flags on attachment: 115289

Committed r100386: &lt;http://trac.webkit.org/changeset/100386&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503483</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 18:04:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114614</attachid>
            <date>2011-11-10 18:56:30 -0800</date>
            <delta_ts>2011-11-14 16:36:19 -0800</delta_ts>
            <desc>Proposed change.</desc>
            <filename>bug-72083-20111110185629.patch</filename>
            <type>text/plain</type>
            <size>33517</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk5MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MWJjMmVjZDg2OGQ2MzA1
NTMzODBmMmQ2YjQ0NDJmZjU3YjEyNDRhLi5jMmFmN2ViOGEzNTA4MTFhODQ3OGYyNjUyNGU4ZDMz
MDY4YThjMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODMgQEAKIDIwMTEtMTEtMTAgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKKyAgICAgICAgU3dpdGNoIHRh
YmxlIGluZGV4aW5nIHRvIHVuc2lnbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MjA4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIGV4cGVjdGVkIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAg
ICBNb3N0IG9mIHRoZSBjb2RlIGlzIG5vdyB1c2luZyB1bnNpZ25lZCBmb3IgaW5kZXhpbmchCisK
KyAgICAgICAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHJldmVyc2UgaXRlcmF0aW5nIG92ZXIgdGhl
IGFycmF5CisgICAgICAgIGFzIEkgZGlkIG5vdCBmaW5kIGEgZ29vZCB3YXkgb2YgZG9pbmcgdGhh
dCB3aXRob3V0IHVzaW5nCisgICAgICAgIGFuIHVuc2lnbmVkICh0cmllZCBhbGwgb2YgdGhlIHVz
dWFsIHN1Z2dlc3Rpb25zIGJ1dCB0aGV5CisgICAgICAgIGtlZXAgZmFpbGluZyBsb2NhbGx5IGFu
ZCB1c2luZyBkbyB7IH0gd2hpbGUgKCkgaXMgd29yc2UpLgorICAgICAgICBEdWUgdG8gdGhlIHNp
emUgbGltaXRzIG9uIHRoZSBjb2x1bW5zIGFuZCByb3dzIGFkZGVkIGluCisgICAgICAgIGJ1ZyA3
MTEzNSwgaXQgc2hvdWxkIGJlIGRpZmZpY3VsdCB0byBvdmVyZmxvdyB0aGUgaW50ZWdlcgorICAg
ICAgICBpbiBzb21lIGNhc2VzLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGU6OmNvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNl
bGxBYm92ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKToKKyAgICAg
ICAgQWRkZWQgc29tZSBBU1NFUlRzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1bmRlcmZsb3cuIExv
b2tpbmcgYXQgaG93CisgICAgICAgIHRoZSBkaWZmZXJlbnQgdmFyaWFibGVzIGFyZSBwb3B1bGF0
ZWQsIHRoZXkgc2hvdWxkIG5vdCBiZSByZWFjaGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNv
bFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKToKKyAg
ICAgICAgVGhvc2UgMiBmdW5jdGlvbnMgcHJvbW90ZXMgSFRNTFRhYmxlQ2VsbEVsZW1lbnQncyBp
bnQgdG8gdW5zaWduZWQKKyAgICAgICAgd2hpY2ggc2hvdWxkIGJlIGZpbmUgYXMgd2UgbWFrZSBz
dXJlIHRoZWlyIGFyZSBwb3NpdGl2ZS4gQWxzbyBIVE1MNQorICAgICAgICBtYWtlcyB0aG9zZSAy
IGZpZWxkcyAidW5zaWduZWQgbG9uZyIgd2hpY2ggZ29lcyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24u
CisKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFi
bGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
QXV0b1RhYmxlTGF5b3V0OjppbnNlcnRTcGFuQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRv
VGFibGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6
OnNwbGl0Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjphcHBlbmRDb2x1
bW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlOjpnZXRDb2x1bW5Qb3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNw
YW5PZkVmZkNvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6ZWZmQ29sVG9Db2wp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjpzdHlsZU9yQ29sTG9naWNhbFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbGxhcHNlZEJvcmRlcnM6Om5leHRCb3JkZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVD
b2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDb2w6OnVwZGF0ZUZyb21FbGVt
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjpzcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ29sOjpzZXRTcGFuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxMb2dpY2FsV2lkdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJlZm9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRl
ckFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVy
Qm9yZGVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxj
T3V0ZXJCb3JkZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpw
YWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFwcGVu
ZENvbHVtbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjZWxsQXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwcmltYXJ5Q2VsbEF0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Z2V0QmFzZWxpbmUpOgorICAgICAgICBNZWNoYW5pY2Fs
IGNoYW5nZSBpbnQgLT4gdW5zaWduZWQuCisKKzIwMTEtMTEtMTAgIEp1bGllbiBDaGFmZnJhaXgg
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uJ3Mg
cmVjYWxjQ2VsbCBsb2dpYyBpcyBkb2luZyB0b28gbXVjaCB3b3JrCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk4NgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCmluZGV4IGZmYWZlNzM2YzM0N2IzOTBhZWFj
Y2M3NjRlZTUzM2IwZWRhMDFmYTQuLmI0ZjQ0YmNjOWE4NTRjNjAxNjZiMzBkMjFiNTI3MjQwM2I3
NzVhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlv
dXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3Bw
CkBAIC00Miw3ICs0Miw3IEBAIEF1dG9UYWJsZUxheW91dDo6fkF1dG9UYWJsZUxheW91dCgpCiB7
CiB9CiAKLXZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGVmZkNvbCkKK3Zv
aWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4odW5zaWduZWQgZWZmQ29sKQogewogICAg
IExheW91dCYgY29sdW1uTGF5b3V0ID0gbV9sYXlvdXRTdHJ1Y3RbZWZmQ29sXTsKIApAQCAtNTQs
OCArNTQsOCBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlZmZDb2wp
CiAgICAgICAgICAgICB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKS0+Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoKTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkp
IHsKICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvUmVuZGVyVGFi
bGVTZWN0aW9uKGNoaWxkKTsKLSAgICAgICAgICAgIGludCBudW1Sb3dzID0gc2VjdGlvbi0+bnVt
Um93cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Sb3dzOyBpKyspIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG51bVJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0IGN1cnJlbnQgPSBzZWN0aW9u
LT5jZWxsQXQoaSwgZWZmQ29sKTsKICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNl
bGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7CiAgICAgICAgICAgICAgICAgCkBAIC0xNDMsMTcg
KzE0MywxNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYygpCiAgICAgbV9oYXNQ
ZXJjZW50ID0gZmFsc2U7CiAgICAgbV9lZmZlY3RpdmVMb2dpY2FsV2lkdGhEaXJ0eSA9IHRydWU7
CiAKLSAgICBpbnQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xzKCk7CisgICAgdW5zaWdu
ZWQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xzKCk7CiAgICAgbV9sYXlvdXRTdHJ1Y3Qu
cmVzaXplKG5FZmZDb2xzKTsKICAgICBtX2xheW91dFN0cnVjdC5maWxsKExheW91dCgpKTsKICAg
ICBtX3NwYW5DZWxscy5maWxsKDApOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fdGFi
bGUtPmZpcnN0Q2hpbGQoKTsKICAgICBMZW5ndGggZ3JvdXBMb2dpY2FsV2lkdGg7Ci0gICAgaW50
IGN1cnJlbnRDb2x1bW4gPSAwOworICAgIHVuc2lnbmVkIGN1cnJlbnRDb2x1bW4gPSAwOwogICAg
IHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+aXNUYWJsZUNvbCgpKSB7CiAgICAgICAgIFJlbmRlclRh
YmxlQ29sKiBjb2wgPSB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKTsKLSAgICAgICAgaW50IHNwYW4g
PSBjb2wtPnNwYW4oKTsKKyAgICAgICAgdW5zaWduZWQgc3BhbiA9IGNvbC0+c3BhbigpOwogICAg
ICAgICBpZiAoY29sLT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICBncm91cExvZ2ljYWxXaWR0
aCA9IGNvbC0+c3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpmdWxsUmVjYWxjKCkKICAgICAgICAg
ICAgICAgICBjb2xMb2dpY2FsV2lkdGggPSBncm91cExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
IGlmICgoY29sTG9naWNhbFdpZHRoLmlzRml4ZWQoKSB8fCBjb2xMb2dpY2FsV2lkdGguaXNQZXJj
ZW50KCkpICYmIGNvbExvZ2ljYWxXaWR0aC5pc1plcm8oKSkKICAgICAgICAgICAgICAgICBjb2xM
b2dpY2FsV2lkdGggPSBMZW5ndGgoKTsKLSAgICAgICAgICAgIGludCBlZmZDb2wgPSBtX3RhYmxl
LT5jb2xUb0VmZkNvbChjdXJyZW50Q29sdW1uKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVmZkNv
bCA9IG1fdGFibGUtPmNvbFRvRWZmQ29sKGN1cnJlbnRDb2x1bW4pOwogICAgICAgICAgICAgaWYg
KCFjb2xMb2dpY2FsV2lkdGguaXNBdXRvKCkgJiYgc3BhbiA9PSAxICYmIGVmZkNvbCA8IG5FZmZD
b2xzICYmIG1fdGFibGUtPnNwYW5PZkVmZkNvbChlZmZDb2wpID09IDEpIHsKICAgICAgICAgICAg
ICAgICBtX2xheW91dFN0cnVjdFtlZmZDb2xdLmxvZ2ljYWxXaWR0aCA9IGNvbExvZ2ljYWxXaWR0
aDsKICAgICAgICAgICAgICAgICBpZiAoY29sTG9naWNhbFdpZHRoLmlzRml4ZWQoKSAmJiBtX2xh
eW91dFN0cnVjdFtlZmZDb2xdLm1heExvZ2ljYWxXaWR0aCA8IGNvbExvZ2ljYWxXaWR0aC52YWx1
ZSgpKQpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpmdWxsUmVjYWxj
KCkKICAgICAgICAgY2hpbGQgPSBuZXh0OwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbkVmZkNvbHM7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7
IGkrKykKICAgICAgICAgcmVjYWxjQ29sdW1uKGkpOwogfQogCkBAIC0yOTMsMTMgKzI5MywxMyBA
QCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlTG9naWNhbFdpZHRoKCkKICAgICAg
ICAgaWYgKCFjZWxsKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaW50IHNwYW4gPSBj
ZWxsLT5jb2xTcGFuKCk7CisgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7
CiAKICAgICAgICAgTGVuZ3RoIGNlbGxMb2dpY2FsV2lkdGggPSBjZWxsLT5zdHlsZU9yQ29sTG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIGlmICghY2VsbExvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCkg
JiYgY2VsbExvZ2ljYWxXaWR0aC5pc1plcm8oKSkKICAgICAgICAgICAgIGNlbGxMb2dpY2FsV2lk
dGggPSBMZW5ndGgoKTsgLy8gbWFrZSBpdCBBdXRvCiAKLSAgICAgICAgaW50IGVmZkNvbCA9IG1f
dGFibGUtPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKKyAgICAgICAgdW5zaWduZWQgZWZmQ29s
ID0gbV90YWJsZS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkpOwogICAgICAgICBzaXplX3QgbGFz
dENvbCA9IGVmZkNvbDsKICAgICAgICAgaW50IGNlbGxNaW5Mb2dpY2FsV2lkdGggPSBjZWxsLT5t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIHNwYWNpbmdJblJvd0RpcmVjdGlvbjsKICAgICAg
ICAgZmxvYXQgY2VsbE1heExvZ2ljYWxXaWR0aCA9IGNlbGwtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpICsgc3BhY2luZ0luUm93RGlyZWN0aW9uOwpAQCAtNDU1LDE3ICs0NTUsMTcgQEAgdm9p
ZCBBdXRvVGFibGVMYXlvdXQ6Omluc2VydFNwYW5DZWxsKFJlbmRlclRhYmxlQ2VsbCAqY2VsbCkK
ICAgICBpZiAoIWNlbGwgfHwgY2VsbC0+Y29sU3BhbigpID09IDEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGludCBzaXplID0gbV9zcGFuQ2VsbHMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemUg
PSBtX3NwYW5DZWxscy5zaXplKCk7CiAgICAgaWYgKCFzaXplIHx8IG1fc3BhbkNlbGxzW3NpemUt
MV0gIT0gMCkgewogICAgICAgICBtX3NwYW5DZWxscy5ncm93KHNpemUgKyAxMCk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDEwOyBpKyspCiAgICAgICAgICAgICBtX3NwYW5DZWxsc1tzaXplK2ldID0gMDsKICAg
ICAgICAgc2l6ZSArPSAxMDsKICAgICB9CiAKICAgICAvLyBhZGQgdGhlbSBpbiBzb3J0LiBUaGlz
IGlzIGEgc2xvdyBhbGdvcml0aG0sIGFuZCBhIGJpbmFyeSBzZWFyY2ggb3IgYSBmYXN0IHNvcnRp
bmcgYWZ0ZXIgY29sbGVjdGlvbiB3b3VsZCBiZSBiZXR0ZXIKLSAgICB1bnNpZ25lZCBpbnQgcG9z
ID0gMDsKLSAgICBpbnQgc3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKKyAgICB1bnNpZ25lZCBwb3Mg
PSAwOworICAgIHVuc2lnbmVkIHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgd2hpbGUgKHBv
cyA8IG1fc3BhbkNlbGxzLnNpemUoKSAmJiBtX3NwYW5DZWxsc1twb3NdICYmIHNwYW4gPiBtX3Nw
YW5DZWxsc1twb3NdLT5jb2xTcGFuKCkpCiAgICAgICAgIHBvcysrOwogICAgIG1lbW1vdmUobV9z
cGFuQ2VsbHMuZGF0YSgpK3BvcysxLCBtX3NwYW5DZWxscy5kYXRhKCkrcG9zLCAoc2l6ZS1wb3Mt
MSkqc2l6ZW9mKFJlbmRlclRhYmxlQ2VsbCAqKSk7CkBAIC02MjYsNyArNjI2LDcgQEAgdm9pZCBB
dXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAKICAgICAvLyBzcHJlYWQgb3ZlciB0aGUgcmVzdAog
ICAgIGlmIChhdmFpbGFibGUgPiAwICYmIG5FZmZDb2xzID4gbnVtQXV0b0VtcHR5Q2VsbHNPbmx5
KSB7Ci0gICAgICAgIGludCB0b3RhbCA9IG5FZmZDb2xzIC0gbnVtQXV0b0VtcHR5Q2VsbHNPbmx5
OworICAgICAgICB1bnNpZ25lZCB0b3RhbCA9IG5FZmZDb2xzIC0gbnVtQXV0b0VtcHR5Q2VsbHNP
bmx5OwogICAgICAgICAvLyBzdGlsbCBoYXZlIHNvbWUgd2lkdGggdG8gc3ByZWFkCiAgICAgICAg
IGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAgICAv
LyB2YXJpYWJsZSBjb2x1bW5zIHdpdGggZW1wdHkgY2VsbHMgb25seSBkb24ndCBnZXQgYW55IHdp
ZHRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKaW5kZXggMjNi
Yzk2MGFkY2NmNDRiNDIyNWI3ZWRjYzg0MDNjZmM0N2Y1ODI5YS4uOWY2MTIwYTlhMGYwNzcyMTcy
MzFjNDMwMDE5ODRkOGNlYzQ2NjkyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9BdXRv
VGFibGVMYXlvdXQuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBmdWxsUmVjYWxjKCk7Ci0gICAgdm9pZCByZWNhbGNDb2x1bW4oaW50IGVmZkNvbCk7Cisg
ICAgdm9pZCByZWNhbGNDb2x1bW4odW5zaWduZWQgZWZmQ29sKTsKIAogICAgIGludCBjYWxjRWZm
ZWN0aXZlTG9naWNhbFdpZHRoKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhl
ZFRhYmxlTGF5b3V0LmNwcAppbmRleCBkNTFhNmIzY2MxNTkzODU2NWQ4YjM2ZjNjZmEyN2NkNjRh
M2FiN2Q5Li5mZTk3YzYzNmYyYWU4NjE4ZGNlNTI2YzZiZjc1MjRlNmY3NGMxZWVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCkBAIC04MywxMSAr
ODMsMTEgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCkKIAogICAg
IC8vIGl0ZXJhdGUgb3ZlciBhbGwgPGNvbD4gZWxlbWVudHMKICAgICBSZW5kZXJPYmplY3QqIGNo
aWxkID0gbV90YWJsZS0+Zmlyc3RDaGlsZCgpOwotICAgIGludCBuRWZmQ29scyA9IG1fdGFibGUt
Pm51bUVmZkNvbHMoKTsKKyAgICB1bnNpZ25lZCBuRWZmQ29scyA9IG1fdGFibGUtPm51bUVmZkNv
bHMoKTsKICAgICBtX3dpZHRoLnJlc2l6ZShuRWZmQ29scyk7CiAgICAgbV93aWR0aC5maWxsKExl
bmd0aChBdXRvKSk7CiAKLSAgICBpbnQgY3VycmVudEVmZmVjdGl2ZUNvbHVtbiA9IDA7CisgICAg
dW5zaWduZWQgY3VycmVudEVmZmVjdGl2ZUNvbHVtbiA9IDA7CiAgICAgTGVuZ3RoIGdycFdpZHRo
OwogICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+aXNUYWJsZUNvbCgpKSB7CiAgICAgICAgIFJl
bmRlclRhYmxlQ29sKiBjb2wgPSB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKTsKQEAgLTEwMSw5ICsx
MDEsOSBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50KQogICAgICAg
ICAgICAgaWYgKHcuaXNGaXhlZCgpICYmIHcudmFsdWUoKSA+IDApCiAgICAgICAgICAgICAgICAg
ZWZmV2lkdGggPSB3LnZhbHVlKCk7CiAKLSAgICAgICAgICAgIGludCBzcGFuID0gY29sLT5zcGFu
KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzcGFuID0gY29sLT5zcGFuKCk7CiAgICAgICAgICAg
ICB3aGlsZSAoc3BhbikgewotICAgICAgICAgICAgICAgIGludCBzcGFuSW5DdXJyZW50RWZmZWN0
aXZlQ29sdW1uOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5JbkN1cnJlbnRFZmZlY3Rp
dmVDb2x1bW47CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4gPj0g
bkVmZkNvbHMpIHsKICAgICAgICAgICAgICAgICAgICAgbV90YWJsZS0+YXBwZW5kQ29sdW1uKHNw
YW4pOwogICAgICAgICAgICAgICAgICAgICBuRWZmQ29scysrOwpAQCAtMTQxLDcgKzE0MSw3IEBA
IGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiAgICAgLy8gSXRlcmF0
ZSBvdmVyIHRoZSBmaXJzdCByb3cgaW4gY2FzZSBzb21lIGFyZSB1bnNwZWNpZmllZC4KICAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBtX3RhYmxlLT50b3BOb25FbXB0eVNlY3Rpb24o
KTsKICAgICBpZiAoc2VjdGlvbikgewotICAgICAgICBpbnQgY0NvbCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIGNDb2wgPSAwOwogICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Um93ID0gc2VjdGlv
bi0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBjaGlsZCA9IGZpcnN0Um93LT5maXJzdENoaWxkKCk7
CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewpAQCAtMTUxLDEzICsxNTEsMTMgQEAgaW50IEZpeGVk
VGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCkKICAgICAgICAgICAgICAgICAgICAgY2Vs
bC0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAogICAgICAgICAgICAgICAgIExl
bmd0aCB3ID0gY2VsbC0+c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgICAg
IGludCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNw
YW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAgICAgICAgICAgaW50IGVmZldpZHRoID0gMDsK
ICAgICAgICAgICAgICAgICBpZiAody5pc0ZpeGVkKCkgJiYgdy5pc1Bvc2l0aXZlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGVmZldpZHRoID0gdy52YWx1ZSgpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGludCB1c2VkU3BhbiA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IGkg
PSAwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVzZWRTcGFuID0gMDsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpID0gMDsKICAgICAgICAgICAgICAgICB3aGlsZSAodXNlZFNwYW4gPCBz
cGFuICYmIGNDb2wgKyBpIDwgbkVmZkNvbHMpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
ZVNwYW4gPSBtX3RhYmxlLT5zcGFuT2ZFZmZDb2woY0NvbCArIGkpOwogICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IHNldCBpZiBubyBjb2wgZWxlbWVudCBoYXMgYWxyZWFkeSBzZXQgaXQuCkBA
IC0yMjMsMTEgKzIyMywxMSBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbldpZHRoLCBMYXlvdQogdm9pZCBGaXhlZFRh
YmxlTGF5b3V0OjpsYXlvdXQoKQogewogICAgIGludCB0YWJsZUxvZ2ljYWxXaWR0aCA9IG1fdGFi
bGUtPmxvZ2ljYWxXaWR0aCgpIC0gbV90YWJsZS0+Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5S
b3dEaXJlY3Rpb24oKTsKLSAgICBpbnQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xzKCk7
CisgICAgdW5zaWduZWQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xzKCk7CiAgICAgVmVj
dG9yPGludD4gY2FsY1dpZHRoKG5FZmZDb2xzLCAwKTsKIAotICAgIGludCBudW1BdXRvID0gMDsK
LSAgICBpbnQgYXV0b1NwYW4gPSAwOworICAgIHVuc2lnbmVkIG51bUF1dG8gPSAwOworICAgIHVu
c2lnbmVkIGF1dG9TcGFuID0gMDsKICAgICBpbnQgdG90YWxGaXhlZFdpZHRoID0gMDsKICAgICBp
bnQgdG90YWxQZXJjZW50V2lkdGggPSAwOwogICAgIGZsb2F0IHRvdGFsUGVyY2VudCA9IDA7CkBA
IC0yMzYsNyArMjM2LDcgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgIC8v
IFBlcmNlbnRhZ2VzIGFyZSBvZiB0aGUgdGFibGUncyB3aWR0aCwgc28gZm9yIGV4YW1wbGUKICAg
ICAvLyBmb3IgYSB0YWJsZSB3aWR0aCBvZiAxMDBweCB3aXRoIGNvbHVtbnMgKDQwcHgsIDEwJSks
IHRoZSAxMCUgY29tcHV0ZQogICAgIC8vIHRvIDEwcHggaGVyZSwgYW5kIHdpbGwgc2NhbGUgdXAg
dG8gMjBweCBpbiB0aGUgZmluYWwgKDgwcHgsIDIwcHgpLgotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbkVmZkNvbHM7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuRWZmQ29s
czsgaSsrKSB7CiAgICAgICAgIGlmIChtX3dpZHRoW2ldLmlzRml4ZWQoKSkgewogICAgICAgICAg
ICAgY2FsY1dpZHRoW2ldID0gbV93aWR0aFtpXS52YWx1ZSgpOwogICAgICAgICAgICAgdG90YWxG
aXhlZFdpZHRoICs9IGNhbGNXaWR0aFtpXTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEZpeGVk
VGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAgICAvLyBGaXhlZCB3aWR0aHMgb25seSBz
Y2FsZSB1cAogICAgICAgICAgICAgaWYgKHRvdGFsRml4ZWRXaWR0aCAmJiB0b3RhbFdpZHRoIDwg
dGFibGVMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAgICB0b3RhbEZpeGVkV2lkdGggPSAw
OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3dpZHRoW2ldLmlzRml4ZWQoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsY1dpZHRoW2ldID0gY2FsY1dpZHRoW2ldICogdGFibGVMb2dp
Y2FsV2lkdGggLyB0b3RhbFdpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxGaXhl
ZFdpZHRoICs9IGNhbGNXaWR0aFtpXTsKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodG90YWxQ
ZXJjZW50KSB7CiAgICAgICAgICAgICAgICAgdG90YWxQZXJjZW50V2lkdGggPSAwOwotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3dpZHRoW2ldLmlzUGVyY2VudCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxjV2lkdGhbaV0gPSBtX3dpZHRoW2ldLnBlcmNlbnQoKSAqICh0YWJsZUxv
Z2ljYWxXaWR0aCAtIHRvdGFsRml4ZWRXaWR0aCkgLyB0b3RhbFBlcmNlbnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3RhbFBlcmNlbnRXaWR0aCArPSBjYWxjV2lkdGhbaV07CkBAIC0yNzks
MTEgKzI3OSwxMiBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBEaXZpZGUgdGhlIHJlbWFpbmluZyB3aWR0aCBhbW9u
ZyB0aGUgYXV0byBjb2x1bW5zLgorICAgICAgICBBU1NFUlQoYXV0b1NwYW4gPj0gbnVtQXV0byk7
CiAgICAgICAgIGludCByZW1haW5pbmdXaWR0aCA9IHRhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxG
aXhlZFdpZHRoIC0gdG90YWxQZXJjZW50V2lkdGggLSBoc3BhY2luZyAqIChhdXRvU3BhbiAtIG51
bUF1dG8pOwogICAgICAgICBpbnQgbGFzdEF1dG8gPSAwOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG5FZmZDb2xzOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG5FZmZDb2xzOyBpKyspIHsKICAgICAgICAgICAgIGlmIChtX3dpZHRoW2ldLmlzQXV0bygpKSB7
Ci0gICAgICAgICAgICAgICAgaW50IHNwYW4gPSBtX3RhYmxlLT5zcGFuT2ZFZmZDb2woaSk7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc3BhbiA9IG1fdGFibGUtPnNwYW5PZkVmZkNvbChpKTsK
ICAgICAgICAgICAgICAgICBpbnQgdyA9IHJlbWFpbmluZ1dpZHRoICogc3BhbiAvIGF1dG9TcGFu
OwogICAgICAgICAgICAgICAgIGNhbGNXaWR0aFtpXSA9IHcgKyBoc3BhY2luZyAqIChzcGFuIC0g
MSk7CiAgICAgICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gdzsKQEAgLTI5MSw2ICsyOTIs
NyBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGxhc3RBdXRvID0gaTsKICAgICAgICAgICAgICAgICBu
dW1BdXRvLS07CisgICAgICAgICAgICAgICAgQVNTRVJUKGF1dG9TcGFuID49IHNwYW4pOwogICAg
ICAgICAgICAgICAgIGF1dG9TcGFuIC09IHNwYW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTMxNCw3ICszMTYsNyBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAg
fQogICAgIAogICAgIGludCBwb3MgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkVmZkNv
bHM7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7
CiAgICAgICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW2ldID0gcG9zOwogICAgICAgICBw
b3MgKz0gY2FsY1dpZHRoW2ldICsgaHNwYWNpbmc7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggOTgyNTVmYTM3ZjJiMzk5MjZmMDAzMzY4MTQxZDQ3
ZGY4OTIxYzRiYy4uODJiY2E4YmUyYzk3MGQyMTUyODA0NzQ3ZDljMjRlZjZhNGFlOWZhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC02MzQsMTIgKzYzNCwx
MiBAQCBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjp0b3BOb25FbXB0eVNlY3Rpb24o
KSBjb25zdAogICAgIHJldHVybiBzZWN0aW9uOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpzcGxp
dENvbHVtbih1bnNpZ25lZCBwb3NpdGlvbiwgaW50IGZpcnN0U3BhbikKK3ZvaWQgUmVuZGVyVGFi
bGU6OnNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBmaXJzdFNwYW4pCiB7
CiAgICAgLy8gd2UgbmVlZCB0byBhZGQgYSBuZXcgY29sdW1uU3RydWN0CiAgICAgdW5zaWduZWQg
b2xkU2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgbV9jb2x1bW5zLmdyb3cob2xkU2l6ZSAr
IDEpOwotICAgIGludCBvbGRTcGFuID0gbV9jb2x1bW5zW3Bvc2l0aW9uXS5zcGFuOworICAgIHVu
c2lnbmVkIG9sZFNwYW4gPSBtX2NvbHVtbnNbcG9zaXRpb25dLnNwYW47CiAgICAgQVNTRVJUKG9s
ZFNwYW4gPiBmaXJzdFNwYW4pOwogICAgIG1fY29sdW1uc1twb3NpdGlvbl0uc3BhbiA9IGZpcnN0
U3BhbjsKICAgICBtZW1tb3ZlKG1fY29sdW1ucy5kYXRhKCkgKyBwb3NpdGlvbiArIDEsIG1fY29s
dW1ucy5kYXRhKCkgKyBwb3NpdGlvbiwgKG9sZFNpemUgLSBwb3NpdGlvbikgKiBzaXplb2YoQ29s
dW1uU3RydWN0KSk7CkBAIC02NjIsNyArNjYyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRD
b2x1bW4odW5zaWduZWQgcG9zaXRpb24sIGludCBmaXJzdFNwYW4pCiAgICAgc2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGU6OmFwcGVuZENv
bHVtbihpbnQgc3BhbikKK3ZvaWQgUmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbih1bnNpZ25lZCBz
cGFuKQogewogICAgIHVuc2lnbmVkIHBvcyA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgdW5zaWdu
ZWQgbmV3U2l6ZSA9IHBvcyArIDE7CkBAIC03MDUsMTIgKzcwNSwxMiBAQCBSZW5kZXJUYWJsZUNv
bCogUmVuZGVyVGFibGU6Om5leHRDb2xFbGVtZW50KFJlbmRlclRhYmxlQ29sKiBjdXJyZW50KSBj
b25zdAogICAgIHJldHVybiAwOwogfQogCi1SZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGU6OmNv
bEVsZW1lbnQoaW50IGNvbCwgYm9vbCogc3RhcnRFZGdlLCBib29sKiBlbmRFZGdlKSBjb25zdAor
UmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxlOjpjb2xFbGVtZW50KHVuc2lnbmVkIGNvbCwgYm9v
bCogc3RhcnRFZGdlLCBib29sKiBlbmRFZGdlKSBjb25zdAogewogICAgIGlmICghbV9oYXNDb2xF
bGVtZW50cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsKLSAgICBpbnQgY0NvbCA9IDA7CisgICAgdW5zaWduZWQgY0NvbCA9IDA7CiAK
ICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkpCkBA
IC03MjQsMTAgKzcyNCwxMSBAQCBSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGU6OmNvbEVsZW1l
bnQoaW50IGNvbCwgYm9vbCogc3RhcnRFZGdlLCBib29sKiBlbmRFZGdlKQogCiAgICAgUmVuZGVy
VGFibGVDb2wqIGNvbEVsZW0gPSB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKTsKICAgICB3aGlsZSAo
Y29sRWxlbSkgewotICAgICAgICBpbnQgc3BhbiA9IGNvbEVsZW0tPnNwYW4oKTsKKyAgICAgICAg
dW5zaWduZWQgc3BhbiA9IGNvbEVsZW0tPnNwYW4oKTsKICAgICAgICAgaWYgKCFjb2xFbGVtLT5m
aXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgIGludCBzdGFydENvbCA9IGNDb2w7Ci0gICAgICAg
ICAgICBpbnQgZW5kQ29sID0gY0NvbCArIHNwYW4gLSAxOworICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRDb2wgPSBjQ29sOworICAgICAgICAgICAgQVNTRVJUKHNwYW4gPj0gMSk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBlbmRDb2wgPSBjQ29sICsgc3BhbiAtIDE7CiAgICAgICAgICAgICBjQ29s
ICs9IHNwYW47CiAgICAgICAgICAgICBpZiAoY0NvbCA+IGNvbCkgewogICAgICAgICAgICAgICAg
IGlmIChzdGFydEVkZ2UpCkBAIC04MTMsMTEgKzgxNCwxMSBAQCB2b2lkIFJlbmRlclRhYmxlOjpy
ZWNhbGNTZWN0aW9ucygpIGNvbnN0CiAgICAgfQogCiAgICAgLy8gcmVwYWlyIGNvbHVtbiBjb3Vu
dCAoYWRkQ2hpbGQgY2FuIGdyb3cgaXQgdG9vIG11Y2gsIGJlY2F1c2UgaXQgYWx3YXlzIGFkZHMg
ZWxlbWVudHMgdG8gdGhlIGxhc3Qgcm93IG9mIGEgc2VjdGlvbikKLSAgICBpbnQgbWF4Q29scyA9
IDA7CisgICAgdW5zaWduZWQgbWF4Q29scyA9IDA7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFJl
bmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsK
LSAgICAgICAgICAgIGludCBzZWN0aW9uQ29scyA9IHNlY3Rpb24tPm51bUNvbHVtbnMoKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNlY3Rpb25Db2xzID0gc2VjdGlvbi0+bnVtQ29sdW1ucygpOwog
ICAgICAgICAgICAgaWYgKHNlY3Rpb25Db2xzID4gbWF4Q29scykKICAgICAgICAgICAgICAgICBt
YXhDb2xzID0gc2VjdGlvbkNvbHM7CiAgICAgICAgIH0KQEAgLTExMDEsMTcgKzExMDIsMTkgQEAg
UmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCogY2VsbCkgY29uc3QKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKICAgICAv
LyBGaW5kIHRoZSBzZWN0aW9uIGFuZCByb3cgdG8gbG9vayBpbgotICAgIGludCByID0gY2VsbC0+
cm93KCk7CisgICAgdW5zaWduZWQgciA9IGNlbGwtPnJvdygpOwogICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbiA9IDA7Ci0gICAgaW50IHJBYm92ZSA9IDA7CisgICAgdW5zaWduZWQgckFi
b3ZlID0gMDsKICAgICBpZiAociA+IDApIHsKICAgICAgICAgLy8gY2VsbCBpcyBub3QgaW4gdGhl
IGZpcnN0IHJvdywgc28gdXNlIHRoZSBhYm92ZSByb3cgaW4gaXRzIG93biBzZWN0aW9uCiAgICAg
ICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7CiAgICAgICAgIHJBYm92ZSA9IHIgLSAxOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQWJvdmUoY2VsbC0+c2VjdGlv
bigpLCBTa2lwRW1wdHlTZWN0aW9ucyk7Ci0gICAgICAgIGlmIChzZWN0aW9uKQorICAgICAgICBp
ZiAoc2VjdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKHNlY3Rpb24tPm51bVJvd3MoKSk7CiAg
ICAgICAgICAgICByQWJvdmUgPSBzZWN0aW9uLT5udW1Sb3dzKCkgLSAxOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gTG9vayB1cCB0aGUgY2VsbCBpbiB0aGUgc2VjdGlvbidzIGdyaWQsIHdo
aWNoIHJlcXVpcmVzIGVmZmVjdGl2ZSBjb2wgaW5kZXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmgKaW5kZXggNzg4MGIzNzJhYzdlYjNmNjkyYjVhNDViMjZjOWJlZTViZGYzNTc5
Yi4uNzhkNmYzNjE2YjFkMzkyYzQ3OTI0MmY3N2VhMGQ0YTM3Y2YwMWUzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IGV4cGxpY2l0IFJlbmRlclRhYmxlKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYWJsZSgp
OwogCi0gICAgTGF5b3V0VW5pdCBnZXRDb2x1bW5Qb3MoaW50IGNvbCkgY29uc3QgeyByZXR1cm4g
bV9jb2x1bW5Qb3NbY29sXTsgfQorICAgIExheW91dFVuaXQgZ2V0Q29sdW1uUG9zKHVuc2lnbmVk
IGNvbCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5Qb3NbY29sXTsgfQogCiAgICAgaW50IGhCb3Jk
ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oU3BhY2luZzsgfQogICAgIGludCB2Qm9yZGVy
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdlNwYWNpbmc7IH0KQEAgLTE0NiwxMCArMTQ2LDEw
IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdGFibGUg
aGFzIG5vIG5vbi1lbXB0eSBzZWN0aW9ucy4KICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHRvcE5v
bkVtcHR5U2VjdGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBw
b3NpdGlvbiwgaW50IGZpcnN0U3Bhbik7Ci0gICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4p
OworICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGZpcnN0
U3Bhbik7CisgICAgdm9pZCBhcHBlbmRDb2x1bW4odW5zaWduZWQgc3Bhbik7CiAgICAgdW5zaWdu
ZWQgbnVtRWZmQ29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1ucy5zaXplKCk7IH0KLSAgICBp
bnQgc3Bhbk9mRWZmQ29sKGludCBlZmZDb2wpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uc1tlZmZD
b2xdLnNwYW47IH0KKyAgICB1bnNpZ25lZCBzcGFuT2ZFZmZDb2wodW5zaWduZWQgZWZmQ29sKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29sXS5zcGFuOyB9CiAgICAgCiAgICAgdW5zaWdu
ZWQgY29sVG9FZmZDb2wodW5zaWduZWQgY29sdW1uKSBjb25zdAogICAgIHsKQEAgLTE2MCwxMCAr
MTYwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGVmZkNvbHVtbjsKICAgICB9CiAgICAg
Ci0gICAgaW50IGVmZkNvbFRvQ29sKGludCBlZmZDb2wpIGNvbnN0CisgICAgdW5zaWduZWQgZWZm
Q29sVG9Db2wodW5zaWduZWQgZWZmQ29sKSBjb25zdAogICAgIHsKLSAgICAgICAgaW50IGMgPSAw
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVmZkNvbDsgaSsrKQorICAgICAgICB1bnNp
Z25lZCBjID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVmZkNvbDsgaSsr
KQogICAgICAgICAgICAgYyArPSBtX2NvbHVtbnNbaV0uc3BhbjsKICAgICAgICAgcmV0dXJuIGM7
CiAgICAgfQpAQCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgIChjb2xs
YXBzZUJvcmRlcnMoKSA/IDAgOiAocGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkgKyAobnVt
RWZmQ29scygpICsgMSkgKiBoQm9yZGVyU3BhY2luZygpKSk7CiAgICAgfQogCi0gICAgUmVuZGVy
VGFibGVDb2wqIGNvbEVsZW1lbnQoaW50IGNvbCwgYm9vbCogc3RhcnRFZGdlID0gMCwgYm9vbCog
ZW5kRWRnZSA9IDApIGNvbnN0OworICAgIFJlbmRlclRhYmxlQ29sKiBjb2xFbGVtZW50KHVuc2ln
bmVkIGNvbCwgYm9vbCogc3RhcnRFZGdlID0gMCwgYm9vbCogZW5kRWRnZSA9IDApIGNvbnN0Owog
ICAgIFJlbmRlclRhYmxlQ29sKiBuZXh0Q29sRWxlbWVudChSZW5kZXJUYWJsZUNvbCogY3VycmVu
dCkgY29uc3Q7CiAKICAgICBib29sIG5lZWRzU2VjdGlvblJlY2FsYygpIGNvbnN0IHsgcmV0dXJu
IG1fbmVlZHNTZWN0aW9uUmVjYWxjOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCmluZGV4IDNjY2E2MTIxMDMxMmY3M2Q1ZWUwNWY4MDFjMzU1ZGVhNzEw
MDhlMmYuLmFlNjc1NzFkNTM4MzY5YzUwMGZjY2JmYjU0ODFiYzM2ZjNlODVhZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC02Miw3ICs2Miw3
IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjp3aWxsQmVEZXN0cm95ZWQoKQogICAgICAgICByZWNh
bGNTZWN0aW9uLT5zZXROZWVkc0NlbGxSZWNhbGMoKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2Vs
bDo6Y29sU3BhbigpIGNvbnN0Cit1bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OmNvbFNwYW4oKSBj
b25zdAogewogICAgIGlmIChVTkxJS0VMWSghbV9oYXNBc3NvY2lhdGVkVGFibGVDZWxsRWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiAxOwpAQCAtNzAsNyArNzAsNyBAQCBpbnQgUmVuZGVyVGFibGVD
ZWxsOjpjb2xTcGFuKCkgY29uc3QKICAgICByZXR1cm4gdG9IVE1MVGFibGVDZWxsRWxlbWVudChu
b2RlKCkpLT5jb2xTcGFuKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4oKSBj
b25zdAordW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKCkgY29uc3QKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIW1faGFzQXNzb2NpYXRlZFRhYmxlQ2VsbEVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gMTsKQEAgLTk2LDEwICs5NiwxMCBAQCBMZW5ndGggUmVuZGVyVGFibGVDZWxsOjpzdHls
ZU9yQ29sTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHc7CiAKICAgICBpZiAo
UmVuZGVyVGFibGVDb2wqIHRhYmxlQ29sID0gdGFibGUoKS0+Y29sRWxlbWVudChjb2woKSkpIHsK
LSAgICAgICAgaW50IGNvbFNwYW5Db3VudCA9IGNvbFNwYW4oKTsKKyAgICAgICAgdW5zaWduZWQg
Y29sU3BhbkNvdW50ID0gY29sU3BhbigpOwogCiAgICAgICAgIExlbmd0aCBjb2xXaWR0aFN1bSA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGNvbFNwYW5D
b3VudDsgaSsrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gY29sU3BhbkNv
dW50OyBpKyspIHsKICAgICAgICAgICAgIExlbmd0aCBjb2xXaWR0aCA9IHRhYmxlQ29sLT5zdHls
ZSgpLT5sb2dpY2FsV2lkdGgoKTsKIAogICAgICAgICAgICAgLy8gUGVyY2VudGFnZSB2YWx1ZSBz
aG91bGQgYmUgcmV0dXJuZWQgb25seSBmb3IgY29sU3BhbiA9PSAxLgpAQCAtODY2LDcgKzg2Niw3
IEBAIHB1YmxpYzoKIAogICAgIENvbGxhcHNlZEJvcmRlciogbmV4dEJvcmRlcigpCiAgICAgewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY291bnQ7IGkrKykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobV9i
b3JkZXJzW2ldLmJvcmRlclZhbHVlLmV4aXN0cygpICYmIG1fYm9yZGVyc1tpXS5zaG91bGRQYWlu
dCkgewogICAgICAgICAgICAgICAgIG1fYm9yZGVyc1tpXS5zaG91bGRQYWludCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIHJldHVybiAmbV9ib3JkZXJzW2ldOwpAQCAtODc3LDcgKzg3Nyw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgQ29sbGFwc2VkQm9yZGVyIG1fYm9yZGVyc1s0XTsK
LSAgICBpbnQgbV9jb3VudDsKKyAgICB1bnNpZ25lZCBtX2NvdW50OwogfTsKIAogc3RhdGljIHZv
aWQgYWRkQm9yZGVyU3R5bGUoUmVuZGVyVGFibGU6OkNvbGxhcHNlZEJvcmRlclZhbHVlcyYgYm9y
ZGVyVmFsdWVzLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmlu
ZGV4IGExYWYxOGQ5OTA3YzU5ODQ2ZDQwYzliZGE0OWU3OTg1ZTgzNGRjZjYuLjFkMjQ1ZWJmNTgz
NmIyNmM3MTIyMzM2NGViNTg2ZjE4NTBiZTJjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTQzLDggKzQzLDggQEAgcHVibGljOgogICAgIGludCBj
ZWxsSW5kZXgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdm9pZCBzZXRDZWxsSW5kZXgoaW50
KSB7IH0KIAotICAgIGludCBjb2xTcGFuKCkgY29uc3Q7Ci0gICAgaW50IHJvd1NwYW4oKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBjb2xTcGFuKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm93U3Bhbigp
IGNvbnN0OwogCiAgICAgLy8gQ2FsbGVkIGZyb20gSFRNTFRhYmxlQ2VsbEVsZW1lbnQuCiAgICAg
dm9pZCBjb2xTcGFuT3JSb3dTcGFuQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNvbC5jcHAKaW5kZXggZTQwMGE1NWFjZmM4N2Y2YTgwN2M3Zjk4YjgwODkz
ZjNjY2RiYzhkYS4uNjQ5YWFhYWJiZDJhMzcxNjM4MTllYWU1ZDI2NzU4NmY3YWVjYWE2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCkBAIC01OCw3ICs1
OCw3IEBAIHZvaWQgUmVuZGVyVGFibGVDb2w6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkCiAKIHZvaWQgUmVuZGVyVGFibGVDb2w6OnVw
ZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBpbnQgb2xkU3BhbiA9IG1fc3BhbjsKKyAgICB1bnNp
Z25lZCBvbGRTcGFuID0gbV9zcGFuOwogICAgIE5vZGUqIG4gPSBub2RlKCk7CiAgICAgaWYgKG4g
JiYgKG4tPmhhc1RhZ05hbWUoY29sVGFnKSB8fCBuLT5oYXNUYWdOYW1lKGNvbGdyb3VwVGFnKSkp
IHsKICAgICAgICAgSFRNTFRhYmxlQ29sRWxlbWVudCogdGMgPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDb2xFbGVtZW50Kj4obik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNv
bC5oCmluZGV4IDVkOTM5YzQwNzg0MWU3Nzc3YjUwZjM4NTI5MzA0NDJjZWFiN2I5NjQuLjc2YzI4
YTNhNTdiZmZjZjNjNmE0NGYyZDYwOGFkZmRiYTZlODY4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCkBAIC00MSw4ICs0MSw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCi0gICAgaW50
IHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KLSAgICB2b2lkIHNldFNwYW4oaW50IHNw
YW4pIHsgbV9zcGFuID0gc3BhbjsgfQorICAgIHVuc2lnbmVkIHNwYW4oKSBjb25zdCB7IHJldHVy
biBtX3NwYW47IH0KKyAgICB2b2lkIHNldFNwYW4odW5zaWduZWQgc3BhbikgeyBtX3NwYW4gPSBz
cGFuOyB9CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZp
cnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KQEAgLTY0LDcgKzY0LDcgQEAg
cHJpdmF0ZToKICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdDsKIAogICAgIFJlbmRlck9i
amVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIGludCBtX3NwYW47CisgICAgdW5zaWduZWQg
bV9zcGFuOwogfTsKIAogaW5saW5lIFJlbmRlclRhYmxlQ29sKiB0b1JlbmRlclRhYmxlQ29sKFJl
bmRlck9iamVjdCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcAppbmRleCBlMjc0N2NmYWRhNGQ0Y2Q4ZTg5YTU4NGQwMWZmNzkxN2Uw
NTNlZTVmLi5jYmIyMTJmNzA3ZDBhMDJjNDk5NGI2OGRjZjFiN2E5ZGNjODE5YzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTkz
LDggKzE5Myw4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxl
Q2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKICAgICBpZiAobmVlZHNDZWxsUmVjYWxj
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCByU3BhbiA9IGNlbGwtPnJvd1NwYW4oKTsK
LSAgICBpbnQgY1NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CisgICAgdW5zaWduZWQgclNwYW4gPSBj
ZWxsLT5yb3dTcGFuKCk7CisgICAgdW5zaWduZWQgY1NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAg
ICAgVmVjdG9yPFJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1Y3Q+JiBjb2x1bW5zID0gdGFibGUoKS0+
Y29sdW1ucygpOwogICAgIHVuc2lnbmVkIG5Db2xzID0gY29sdW1ucy5zaXplKCk7CiAgICAgLy8g
YWRkQ2VsbCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgbV9jUm93IGhhcyBiZWVuIGluY3Jl
bWVudGVkLgpAQCAtMjQxLDE2ICsyNDEsMTYgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFk
ZENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBSZW5kZXJUYWJsZVJvdyogcm93KQogICAgIC8v
IHRlbGwgdGhlIGNlbGwgd2hlcmUgaXQgaXMKICAgICBib29sIGluQ29sU3BhbiA9IGZhbHNlOwog
ICAgIHdoaWxlIChjU3BhbikgewotICAgICAgICBpbnQgY3VycmVudFNwYW47CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRTcGFuOwogICAgICAgICBpZiAobV9jQ29sID49IG5Db2xzKSB7CiAgICAg
ICAgICAgICB0YWJsZSgpLT5hcHBlbmRDb2x1bW4oY1NwYW4pOwogICAgICAgICAgICAgY3VycmVu
dFNwYW4gPSBjU3BhbjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjU3BhbiA8
IChpbnQpY29sdW1uc1ttX2NDb2xdLnNwYW4pCisgICAgICAgICAgICBpZiAoY1NwYW4gPCBjb2x1
bW5zW21fY0NvbF0uc3BhbikKICAgICAgICAgICAgICAgICB0YWJsZSgpLT5zcGxpdENvbHVtbiht
X2NDb2wsIGNTcGFuKTsKICAgICAgICAgICAgIGN1cnJlbnRTcGFuID0gY29sdW1uc1ttX2NDb2xd
LnNwYW47CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByU3Bhbjsgcisr
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgciA9IDA7IHIgPCByU3BhbjsgcisrKSB7CiAgICAg
ICAgICAgICBDZWxsU3RydWN0JiBjID0gY2VsbEF0KGluc2VydGlvblJvdyArIHIsIG1fY0NvbCk7
CiAgICAgICAgICAgICBBU1NFUlQoY2VsbCk7CiAgICAgICAgICAgICBjLmNlbGxzLmFwcGVuZChj
ZWxsKTsKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2Vs
bExvZ2ljYWxXaWR0aHMoKQogICAgICAgICAgICAgaWYgKCFjZWxsIHx8IGN1cnJlbnQuaW5Db2xT
cGFuKQogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZENv
bCA9IGo7Ci0gICAgICAgICAgICBpbnQgY3NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBjc3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKICAgICAgICAgICAgIHdoaWxl
IChjc3BhbiAmJiBlbmRDb2wgPCBjb2xzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZENv
bCA8IHRhYmxlKCktPmNvbHVtbnMoKS5zaXplKCkpOwogICAgICAgICAgICAgICAgIGNzcGFuIC09
IHRhYmxlKCktPmNvbHVtbnMoKVtlbmRDb2xdLnNwYW47CkBAIC00MzgsNyArNDM4LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0b0FkZCkK
ICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCiAgICAgTGF5b3V0VW5pdCBySGVpZ2h0Owot
ICAgIGludCByaW5keDsKKyAgICB1bnNpZ25lZCByaW5keDsKICAgICB1bnNpZ25lZCB0b3RhbFJv
d3MgPSBtX2dyaWQuc2l6ZSgpOwogCiAgICAgLy8gU2V0IHRoZSB3aWR0aCBvZiBvdXIgc2VjdGlv
biBub3cuICBUaGUgcm93cyB3aWxsIGFsc28gYmUgdGhpcyB3aWR0aC4KQEAgLTUwOSw3ICs1MDks
NyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0
IHRvQWRkKQogCiAgICAgTGF5b3V0VW5pdCBoc3BhY2luZyA9IHRhYmxlKCktPmhCb3JkZXJTcGFj
aW5nKCk7CiAgICAgTGF5b3V0VW5pdCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5n
KCk7Ci0gICAgTGF5b3V0VW5pdCBuRWZmQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKKyAg
ICB1bnNpZ25lZCBuRWZmQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKIAogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIExheW91dFNpemUoeCgp
LCB5KCkpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKIApAQCAtNTIy
LDcgKzUyMiw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExh
eW91dFVuaXQgdG9BZGQpCiAgICAgICAgICAgICByb3dSZW5kZXJlci0+dXBkYXRlTGF5ZXJUcmFu
c2Zvcm0oKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbkVmZkNv
bHM7IGMrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgbkVmZkNvbHM7IGMr
KykgewogICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3MgPSBjZWxsQXQociwgYyk7CiAgICAgICAg
ICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjcy5wcmltYXJ5Q2VsbCgpOwogCkBAIC02Nzks
NyArNjc5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5
b3V0VW5pdCB0b0FkZCkKICNlbmRpZgogICAgIC8vIE5vdyB0aGF0IG91ciBoZWlnaHQgaGFzIGJl
ZW4gZGV0ZXJtaW5lZCwgYWRkIGluIG92ZXJmbG93IGZyb20gY2VsbHMuCiAgICAgZm9yICh1bnNp
Z25lZCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7Ci0gICAgICAgIGZvciAoaW50IGMgPSAw
OyBjIDwgbkVmZkNvbHM7IGMrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwg
bkVmZkNvbHM7IGMrKykgewogICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3MgPSBjZWxsQXQociwg
Yyk7CiAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjcy5wcmltYXJ5Q2VsbCgp
OwogICAgICAgICAgICAgaWYgKCFjZWxsIHx8IGNzLmluQ29sU3BhbikKQEAgLTcxMCw3ICs3MTAs
NyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlvdXRVbml0
IHRvQWRkKQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVy
QmVmb3JlKCkgY29uc3QKIHsKLSAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29s
cygpOworICAgIHVuc2lnbmVkIHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAg
ICBpZiAoIW1fZ3JpZC5zaXplKCkgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAK
QEAgLTcyOSw3ICs3MjksNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091
dGVyQm9yZGVyQmVmb3JlKCkgY29uc3QKICAgICAgICAgYm9yZGVyV2lkdGggPSByYi53aWR0aCgp
OwogCiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0cnVlOwotICAgIGZvciAoaW50IGMgPSAwOyBjIDwg
dG90YWxDb2xzOyBjKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdG90YWxDb2xz
OyBjKyspIHsKICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdCgwLCBj
KTsKICAgICAgICAgaWYgKGN1cnJlbnQuaW5Db2xTcGFuIHx8ICFjdXJyZW50Lmhhc0NlbGxzKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc2MSw3ICs3NjEsNyBAQCBMYXlvdXRVbml0IFJl
bmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQmVmb3JlKCkgY29uc3QKIAogTGF5b3V0
VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckFmdGVyKCkgY29uc3QKIHsK
LSAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworICAgIHVuc2lnbmVk
IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICBpZiAoIW1fZ3JpZC5zaXpl
KCkgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc4MCw3ICs3ODAsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQWZ0ZXIoKSBj
b25zdAogICAgICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoKCk7CiAKICAgICBib29sIGFsbEhp
ZGRlbiA9IHRydWU7Ci0gICAgZm9yIChpbnQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewor
ICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICBj
b25zdCBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KG1fZ3JpZC5zaXplKCkgLSAxLCBjKTsK
ICAgICAgICAgaWYgKGN1cnJlbnQuaW5Db2xTcGFuIHx8ICFjdXJyZW50Lmhhc0NlbGxzKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTgxMiw3ICs4MTIsNyBAQCBMYXlvdXRVbml0IFJlbmRl
clRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQWZ0ZXIoKSBjb25zdAogCiBMYXlvdXRVbml0
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyU3RhcnQoKSBjb25zdAogewotICAg
IGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CisgICAgdW5zaWduZWQgdG90
YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwogICAgIGlmICghbV9ncmlkLnNpemUoKSB8
fCAhdG90YWxDb2xzKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtODU2LDcgKzg1Niw3IEBAIExh
eW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0
CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJFbmQoKSBj
b25zdAogewotICAgIGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CisgICAg
dW5zaWduZWQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwogICAgIGlmICghbV9n
cmlkLnNpemUoKSB8fCAhdG90YWxDb2xzKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTEwNiw5
ICsxMTA2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBzdGQ6OnNvcnQoY2VsbHMuYmVnaW4oKSwgY2VsbHMuZW5kKCksIGNvbXBh
cmVDZWxsUG9zaXRpb25zV2l0aE92ZXJmbG93aW5nQ2VsbHMpOwogCi0gICAgICAgICAgICBpbnQg
c2l6ZSA9IGNlbGxzLnNpemUoKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHRoZSBjZWxscy4KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlbGxzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAg
IHBhaW50Q2VsbChjZWxsc1tpXSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMTgzLDcgKzExODEsNyBAQCB1bnNpZ25lZCBSZW5kZXJUYWJsZVNlY3Rpb246
Om51bUNvbHVtbnMoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQgKyAxOwogfQogCi12b2lkIFJl
bmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKGludCBwb3MpCit2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6YXBwZW5kQ29sdW1uKHVuc2lnbmVkIHBvcykKIHsKICAgICBBU1NFUlQoIW1fbmVl
ZHNDZWxsUmVjYWxjKTsKIApAQCAtMTE5MSw3ICsxMTg5LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQogICAgICAgICBtX2dyaWRbcm93XS5yb3cucmVz
aXplKHBvcyArIDEpOwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
dW5zaWduZWQgcG9zLCBpbnQgZmlyc3QpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRD
b2x1bW4odW5zaWduZWQgcG9zLCB1bnNpZ25lZCBmaXJzdCkKIHsKICAgICBBU1NFUlQoIW1fbmVl
ZHNDZWxsUmVjYWxjKTsKIApAQCAtMTIwNCw3ICsxMjAyLDggQEAgdm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OnNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KQogICAgICAgICAgICAg
cltwb3MgKyAxXS5jZWxscy5hcHBlbmQocltwb3NdLmNlbGxzKTsKICAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbCA9IHJbcG9zXS5wcmltYXJ5Q2VsbCgpOwogICAgICAgICAgICAgQVNT
RVJUKGNlbGwpOwotICAgICAgICAgICAgaW50IGNvbGxlZnQgPSBjZWxsLT5jb2xTcGFuKCkgLSBy
W3Bvc10uaW5Db2xTcGFuOworICAgICAgICAgICAgQVNTRVJUKGNlbGwtPmNvbFNwYW4oKSA+PSBy
W3Bvc10uaW5Db2xTcGFuKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbGxlZnQgPSBjZWxsLT5j
b2xTcGFuKCkgLSByW3Bvc10uaW5Db2xTcGFuOwogICAgICAgICAgICAgaWYgKGZpcnN0ID4gY29s
bGVmdCkKICAgICAgICAgICAgICAgcltwb3MgKyAxXS5pbkNvbFNwYW4gPSAwOwogICAgICAgICAg
ICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
CmluZGV4IGM1NDQ5ZDdhYjQ0NWRmZmM1NzRiM2NlOTZhOTI2ZTUzNTI2ZGQ3MWEuLjg2ZjM0MzQz
NzcwNmRiZjI1MGRjMDUxYjA2MGE1YmUyZmQ5ZmMzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTkwLDE2ICs5MCwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0OwogICAgIH07CiAKLSAgICBDZWxsU3RydWN0
JiBjZWxsQXQoaW50IHJvdywgIGludCBjb2wpIHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xd
OyB9Ci0gICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbEF0KGludCByb3csIGludCBjb2wpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xdOyB9Ci0gICAgUmVuZGVyVGFibGVDZWxsKiBw
cmltYXJ5Q2VsbEF0KGludCByb3csIGludCBjb2wpCisgICAgQ2VsbFN0cnVjdCYgY2VsbEF0KHVu
c2lnbmVkIHJvdywgIHVuc2lnbmVkIGNvbCkgeyByZXR1cm4gbV9ncmlkW3Jvd10ucm93W2NvbF07
IH0KKyAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsQXQodW5zaWduZWQgcm93LCB1bnNpZ25lZCBj
b2wpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xdOyB9CisgICAgUmVuZGVyVGFi
bGVDZWxsKiBwcmltYXJ5Q2VsbEF0KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sKQogICAgIHsK
ICAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IG1fZ3JpZFtyb3ddLnJvd1tjb2xdOwogICAgICAgICBy
ZXR1cm4gYy5wcmltYXJ5Q2VsbCgpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kQ29sdW1uKGlu
dCBwb3MpOwotICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9zLCBpbnQgZmlyc3QpOwor
ICAgIHZvaWQgYXBwZW5kQ29sdW1uKHVuc2lnbmVkIHBvcyk7CisgICAgdm9pZCBzcGxpdENvbHVt
bih1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGZpcnN0KTsKIAogICAgIExheW91dFVuaXQgY2FsY091
dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjYWxjT3V0ZXJCb3JkZXJB
ZnRlcigpIGNvbnN0OwpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRz
Q2VsbFJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNDZWxsUmVjYWxjOyB9CiAgICAgdm9p
ZCBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIAotICAgIExheW91dFVuaXQgZ2V0QmFzZWxpbmUoaW50
IHJvdykgeyByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZWxpbmU7IH0KKyAgICBMYXlvdXRVbml0IGdl
dEJhc2VsaW5lKHVuc2lnbmVkIHJvdykgeyByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZWxpbmU7IH0K
IAogICAgIHZvaWQgcm93TG9naWNhbEhlaWdodENoYW5nZWQodW5zaWduZWQgcm93SW5kZXgpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115056</attachid>
            <date>2011-11-14 16:36:23 -0800</date>
            <delta_ts>2011-11-15 17:47:00 -0800</delta_ts>
            <desc>Fixed the reverse iterators after Darin&apos;s suggestion.</desc>
            <filename>bug-72083-20111114163622.patch</filename>
            <type>text/plain</type>
            <size>38554</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiOWRhZTM4MDYwY2Yx
YmJhN2ZhMTI1YzU4MDIxNTdiZDM1MDdjMS4uMzM4MjhiYTBkYzU1NWI5ZDJlNjY1MDk3ZTk2NGM3
YjFkYmY1ZmY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDExLTExLTE0ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFN3aXRjaCB0
YWJsZSBpbmRleGluZyB0byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzIwODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBleHBlY3RlZCBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAg
ICAgQWxsIG9mIHRoZSBjb2RlIGlzIG5vdyB1c2luZyB1bnNpZ25lZCBmb3IgaW5kZXhpbmchCisK
KyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4pOgorICAgICAgICBBZGRlZCBzb21lIEFTU0VSVHMg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IHVuZGVyZmxvdy4gTG9va2luZyBhdCBob3cKKyAgICAgICAg
dGhlIGRpZmZlcmVudCB2YXJpYWJsZXMgYXJlIHBvcHVsYXRlZCwgdGhleSBzaG91bGQgbm90IGJl
IHJlYWNoZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sU3Bhbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4pOgorICAgICAgICBUaG9zZSAyIGZ1bmN0aW9u
cyBwcm9tb3RlcyBIVE1MVGFibGVDZWxsRWxlbWVudCdzIGludCB0byB1bnNpZ25lZAorICAgICAg
ICB3aGljaCBzaG91bGQgYmUgZmluZSBhcyB3ZSBtYWtlIHN1cmUgdGhlaXIgYXJlIHBvc2l0aXZl
LiBBbHNvIEhUTUw1CisgICAgICAgIG1ha2VzIHRob3NlIDIgZmllbGRzICJ1bnNpZ25lZCBsb25n
IiB3aGljaCBnb2VzIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0
OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAg
ICAgIFJld3JvdGUgYSBjb3VwbGUgb2YgcmV2ZXJzZSBpdGVyYXRpbmcgdG8gYmUgYWJsZSB0byB1
c2UgdW5zaWduZWQKKyAgICAgICAgd2l0aG91dCBvdmVyZmxvd2luZy4KKworICAgICAgICAqIHJl
bmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxl
TGF5b3V0OjpyZWNhbGNDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0
OjpmdWxsUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxheW91dDo6Y2FsY0Vm
ZmVjdGl2ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFibGVMYXlvdXQ6
Omluc2VydFNwYW5DZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3Bs
aXRDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6cmVjYWxjU2VjdGlvbnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OmdldENvbHVtblBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3Bhbk9m
RWZmQ29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZDb2xUb0NvbCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sbGFwc2VkQm9yZGVyczo6bmV4dEJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDb2w6OnNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
b2w6OnNldFNwYW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQmVmb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQWZ0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3Jk
ZXJTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRl
ckJvcmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29s
dW1uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNlbGxBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OnByaW1hcnlDZWxsQXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpnZXRCYXNlbGluZSk6CisgICAgICAgIE1lY2hhbmljYWwgY2hh
bmdlIGludCAtPiB1bnNpZ25lZC4KKwogMjAxMS0xMS0xNCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5u
ZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGlwZSBjb21wb3NpdG9yIGNvbW1p
dC9zd2FwIHVwIHRvIFdlYldpZGdldENsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcAppbmRleCBmZmFmZTczNmMzNDdiMzkwYWVhY2NjNzY0ZWU1MzNi
MGVkYTAxZmE0Li44ODdkNWZjNDE1YTlmYTE1NWE3MzY1ZDM5MzAyY2ZhZDgyYjdhYzU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcApAQCAtNDIsNyAr
NDIsNyBAQCBBdXRvVGFibGVMYXlvdXQ6On5BdXRvVGFibGVMYXlvdXQoKQogewogfQogCi12b2lk
IEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlZmZDb2wpCit2b2lkIEF1dG9UYWJs
ZUxheW91dDo6cmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCkKIHsKICAgICBMYXlvdXQmIGNv
bHVtbkxheW91dCA9IG1fbGF5b3V0U3RydWN0W2VmZkNvbF07CiAKQEAgLTU0LDggKzU0LDggQEAg
dm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZWZmQ29sKQogICAgICAgICAg
ICAgdG9SZW5kZXJUYWJsZUNvbChjaGlsZCktPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihj
aGlsZCk7Ci0gICAgICAgICAgICBpbnQgbnVtUm93cyA9IHNlY3Rpb24tPm51bVJvd3MoKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBudW1Sb3dzID0gc2VjdGlvbi0+bnVtUm93cygpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJvd3M7IGkrKykgewogICAgICAgICAgICAgICAgIFJl
bmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCBjdXJyZW50ID0gc2VjdGlvbi0+Y2VsbEF0KGks
IGVmZkNvbCk7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3VycmVu
dC5wcmltYXJ5Q2VsbCgpOwogICAgICAgICAgICAgICAgIApAQCAtMTQzLDE3ICsxNDMsMTcgQEAg
dm9pZCBBdXRvVGFibGVMYXlvdXQ6OmZ1bGxSZWNhbGMoKQogICAgIG1faGFzUGVyY2VudCA9IGZh
bHNlOwogICAgIG1fZWZmZWN0aXZlTG9naWNhbFdpZHRoRGlydHkgPSB0cnVlOwogCi0gICAgaW50
IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOworICAgIHVuc2lnbmVkIG5FZmZDb2xz
ID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAgIG1fbGF5b3V0U3RydWN0LnJlc2l6ZShuRWZm
Q29scyk7CiAgICAgbV9sYXlvdXRTdHJ1Y3QuZmlsbChMYXlvdXQoKSk7CiAgICAgbV9zcGFuQ2Vs
bHMuZmlsbCgwKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBtX3RhYmxlLT5maXJzdENo
aWxkKCk7CiAgICAgTGVuZ3RoIGdyb3VwTG9naWNhbFdpZHRoOwotICAgIGludCBjdXJyZW50Q29s
dW1uID0gMDsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q29sdW1uID0gMDsKICAgICB3aGlsZSAoY2hp
bGQgJiYgY2hpbGQtPmlzVGFibGVDb2woKSkgewogICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29s
ID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7Ci0gICAgICAgIGludCBzcGFuID0gY29sLT5zcGFu
KCk7CisgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBjb2wtPnNwYW4oKTsKICAgICAgICAgaWYgKGNv
bC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgZ3JvdXBMb2dpY2FsV2lkdGggPSBjb2wtPnN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBlbHNlIHsKQEAgLTE2Miw3ICsxNjIsNyBA
QCB2b2lkIEF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYygpCiAgICAgICAgICAgICAgICAgY29s
TG9naWNhbFdpZHRoID0gZ3JvdXBMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAoKGNvbExv
Z2ljYWxXaWR0aC5pc0ZpeGVkKCkgfHwgY29sTG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKSAmJiBj
b2xMb2dpY2FsV2lkdGguaXNaZXJvKCkpCiAgICAgICAgICAgICAgICAgY29sTG9naWNhbFdpZHRo
ID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpbnQgZWZmQ29sID0gbV90YWJsZS0+Y29sVG9FZmZD
b2woY3VycmVudENvbHVtbik7CisgICAgICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBtX3RhYmxl
LT5jb2xUb0VmZkNvbChjdXJyZW50Q29sdW1uKTsKICAgICAgICAgICAgIGlmICghY29sTG9naWNh
bFdpZHRoLmlzQXV0bygpICYmIHNwYW4gPT0gMSAmJiBlZmZDb2wgPCBuRWZmQ29scyAmJiBtX3Rh
YmxlLT5zcGFuT2ZFZmZDb2woZWZmQ29sKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgbV9sYXlv
dXRTdHJ1Y3RbZWZmQ29sXS5sb2dpY2FsV2lkdGggPSBjb2xMb2dpY2FsV2lkdGg7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvbExvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYgbV9sYXlvdXRTdHJ1Y3Rb
ZWZmQ29sXS5tYXhMb2dpY2FsV2lkdGggPCBjb2xMb2dpY2FsV2lkdGgudmFsdWUoKSkKQEAgLTE4
MSw3ICsxODEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYygpCiAgICAgICAg
IGNoaWxkID0gbmV4dDsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xz
OyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKyspCiAgICAg
ICAgIHJlY2FsY0NvbHVtbihpKTsKIH0KIApAQCAtMjkzLDEzICsyOTMsMTMgQEAgaW50IEF1dG9U
YWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIGlmICghY2Vs
bCkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGludCBzcGFuID0gY2VsbC0+Y29sU3Bh
bigpOworICAgICAgICB1bnNpZ25lZCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogCiAgICAgICAg
IExlbmd0aCBjZWxsTG9naWNhbFdpZHRoID0gY2VsbC0+c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgp
OwogICAgICAgICBpZiAoIWNlbGxMb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpICYmIGNlbGxMb2dp
Y2FsV2lkdGguaXNaZXJvKCkpCiAgICAgICAgICAgICBjZWxsTG9naWNhbFdpZHRoID0gTGVuZ3Ro
KCk7IC8vIG1ha2UgaXQgQXV0bwogCi0gICAgICAgIGludCBlZmZDb2wgPSBtX3RhYmxlLT5jb2xU
b0VmZkNvbChjZWxsLT5jb2woKSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IG1fdGFibGUt
PmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKICAgICAgICAgc2l6ZV90IGxhc3RDb2wgPSBlZmZD
b2w7CiAgICAgICAgIGludCBjZWxsTWluTG9naWNhbFdpZHRoID0gY2VsbC0+bWluUHJlZmVycmVk
TG9naWNhbFdpZHRoKCkgKyBzcGFjaW5nSW5Sb3dEaXJlY3Rpb247CiAgICAgICAgIGZsb2F0IGNl
bGxNYXhMb2dpY2FsV2lkdGggPSBjZWxsLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIHNw
YWNpbmdJblJvd0RpcmVjdGlvbjsKQEAgLTQ1NSwxNyArNDU1LDE3IEBAIHZvaWQgQXV0b1RhYmxl
TGF5b3V0OjppbnNlcnRTcGFuQ2VsbChSZW5kZXJUYWJsZUNlbGwgKmNlbGwpCiAgICAgaWYgKCFj
ZWxsIHx8IGNlbGwtPmNvbFNwYW4oKSA9PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
c2l6ZSA9IG1fc3BhbkNlbGxzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gbV9zcGFuQ2Vs
bHMuc2l6ZSgpOwogICAgIGlmICghc2l6ZSB8fCBtX3NwYW5DZWxsc1tzaXplLTFdICE9IDApIHsK
ICAgICAgICAgbV9zcGFuQ2VsbHMuZ3JvdyhzaXplICsgMTApOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDEwOyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsg
aSsrKQogICAgICAgICAgICAgbV9zcGFuQ2VsbHNbc2l6ZStpXSA9IDA7CiAgICAgICAgIHNpemUg
Kz0gMTA7CiAgICAgfQogCiAgICAgLy8gYWRkIHRoZW0gaW4gc29ydC4gVGhpcyBpcyBhIHNsb3cg
YWxnb3JpdGhtLCBhbmQgYSBiaW5hcnkgc2VhcmNoIG9yIGEgZmFzdCBzb3J0aW5nIGFmdGVyIGNv
bGxlY3Rpb24gd291bGQgYmUgYmV0dGVyCi0gICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAg
aW50IHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CisgICAgdW5zaWduZWQgcG9zID0gMDsKKyAgICB1
bnNpZ25lZCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogICAgIHdoaWxlIChwb3MgPCBtX3NwYW5D
ZWxscy5zaXplKCkgJiYgbV9zcGFuQ2VsbHNbcG9zXSAmJiBzcGFuID4gbV9zcGFuQ2VsbHNbcG9z
XS0+Y29sU3BhbigpKQogICAgICAgICBwb3MrKzsKICAgICBtZW1tb3ZlKG1fc3BhbkNlbGxzLmRh
dGEoKStwb3MrMSwgbV9zcGFuQ2VsbHMuZGF0YSgpK3BvcywgKHNpemUtcG9zLTEpKnNpemVvZihS
ZW5kZXJUYWJsZUNlbGwgKikpOwpAQCAtNTQ0LDcgKzU0NCw4IEBAIHZvaWQgQXV0b1RhYmxlTGF5
b3V0OjpsYXlvdXQoKQogICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMTAwKSB7CiAgICAgICAg
ICAgICAvLyByZW1vdmUgb3ZlcmFsbG9jYXRlZCBzcGFjZSBmcm9tIHRoZSBsYXN0IGNvbHVtbnMK
ICAgICAgICAgICAgIGludCBleGNlc3MgPSB0YWJsZUxvZ2ljYWxXaWR0aCAqICh0b3RhbFBlcmNl
bnQgLSAxMDApIC8gMTAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5FZmZDb2xzOyBp
OyApIHsKKyAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGF5b3V0
U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1
dGVkTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgICAgICBpbnQgcmVkdWN0aW9uID0gbWlu
KGNlbGxMb2dpY2FsV2lkdGgsICBleGNlc3MpOwpAQCAtNjI2LDkgKzYyNywxMCBAQCB2b2lkIEF1
dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKIAogICAgIC8vIHNwcmVhZCBvdmVyIHRoZSByZXN0CiAg
ICAgaWYgKGF2YWlsYWJsZSA+IDAgJiYgbkVmZkNvbHMgPiBudW1BdXRvRW1wdHlDZWxsc09ubHkp
IHsKLSAgICAgICAgaW50IHRvdGFsID0gbkVmZkNvbHMgLSBudW1BdXRvRW1wdHlDZWxsc09ubHk7
CisgICAgICAgIHVuc2lnbmVkIHRvdGFsID0gbkVmZkNvbHMgLSBudW1BdXRvRW1wdHlDZWxsc09u
bHk7CiAgICAgICAgIC8vIHN0aWxsIGhhdmUgc29tZSB3aWR0aCB0byBzcHJlYWQKLSAgICAgICAg
Zm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbkVmZkNvbHM7IGk7ICkgeworICAgICAgICAgICAgLS1pOwogICAgICAgICAg
ICAgLy8gdmFyaWFibGUgY29sdW1ucyB3aXRoIGVtcHR5IGNlbGxzIG9ubHkgZG9uJ3QgZ2V0IGFu
eSB3aWR0aAogICAgICAgICAgICAgaWYgKG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2lj
YWxXaWR0aC5pc0F1dG8oKSAmJiBtX2xheW91dFN0cnVjdFtpXS5lbXB0eUNlbGxzT25seSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY1MCwxMyArNjUyLDE1IEBAIHZvaWQgQXV0b1Rh
YmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAvLyBUaGlzIGlzIGJhc2ljYWxseSB0aGUgcmV2
ZXJzZSBvZiBob3cgd2UgZ3JldyB0aGUgY2VsbHMuCiAgICAgICAgIGlmIChhdmFpbGFibGUgPCAw
KSB7CiAgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKLSAgICAgICAg
ICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaTsgKSB7CisgICAgICAgICAgICAgICAgLS1p
OwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3Rb
aV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lk
dGguaXNBdXRvKCkpCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiAr
PSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0U3RydWN0
W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYmIGxvZ2lj
YWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbkVmZkNvbHM7IGkgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgKSB7CisgICAgICAg
ICAgICAgICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9s
YXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlm
IChsb2dpY2FsV2lkdGguaXNBdXRvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IG1pbk1h
eERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0
U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKQEAgLTY3MiwxMyArNjc2LDE1IEBA
IHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogCiAgICAgICAgIGlmIChhdmFpbGFibGUg
PCAwKSB7CiAgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaTsgKSB7CisgICAgICAgICAgICAgICAg
LS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1
Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2Fs
V2lkdGguaXNSZWxhdGl2ZSgpKQogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGhCZXlv
bmRNaW4gKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBtX2xheW91
dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMCAm
JiBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5FZmZDb2xzOyBpICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7ICkgewor
ICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0
aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
ICAgICBpZiAobG9naWNhbFdpZHRoLmlzUmVsYXRpdmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRo
IC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwpAQCAtNjk0LDEz
ICs3MDAsMTUgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAKICAgICAgICAgaWYg
KGF2YWlsYWJsZSA8IDApIHsKICAgICAgICAgICAgIGludCBsb2dpY2FsV2lkdGhCZXlvbmRNaW4g
PSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5FZmZDb2xzOyBpOyApIHsKKyAgICAg
ICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBt
X2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAg
aWYgKGxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxX
aWR0aEJleW9uZE1pbiArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAt
IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsg
aSA+PSAwICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbkVmZkNvbHM7IGkgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4g
MDsgKSB7CisgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9n
aWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAg
ICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBtaW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2Fs
V2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CkBAIC03
MTYsMTMgKzcyNCwxNSBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKIAogICAgICAg
ICBpZiAoYXZhaWxhYmxlIDwgMCkgewogICAgICAgICAgICAgaW50IGxvZ2ljYWxXaWR0aEJleW9u
ZE1pbiA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbkVmZkNvbHM7IGk7ICkgewor
ICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2ljYWxXaWR0
aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAg
ICAgICBpZiAobG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgICAgICAgICBs
b2dpY2FsV2lkdGhCZXlvbmRNaW4gKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2Fs
V2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29s
cy0xOyBpID49IDAgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgaS0tKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaSAmJiBsb2dpY2FsV2lkdGhCZXlvbmRN
aW4gPiAwOyApIHsKKyAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgTGVuZ3Ro
JiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVk
TG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRo
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCmluZGV4IDIzYmM5
NjBhZGNjZjQ0YjQyMjViN2VkY2M4NDAzY2ZjNDdmNTgyOWEuLjlmNjEyMGE5YTBmMDc3MjE3MjMx
YzQzMDAxOTg0ZDhjZWM0NjY5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZv
aWQgZnVsbFJlY2FsYygpOwotICAgIHZvaWQgcmVjYWxjQ29sdW1uKGludCBlZmZDb2wpOworICAg
IHZvaWQgcmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCk7CiAKICAgICBpbnQgY2FsY0VmZmVj
dGl2ZUxvZ2ljYWxXaWR0aCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRml4ZWRUYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRU
YWJsZUxheW91dC5jcHAKaW5kZXggZDUxYTZiM2NjMTU5Mzg1NjVkOGIzNmYzY2ZhMjdjZDY0YTNh
YjdkOS4uZmU5N2M2MzZmMmFlODYxOGRjZTUyNmM2YmY3NTI0ZTZmNzRjMWVlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcApAQCAtODMsMTEgKzgz
LDExIEBAIGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiAKICAgICAv
LyBpdGVyYXRlIG92ZXIgYWxsIDxjb2w+IGVsZW1lbnRzCiAgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IG1fdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICBpbnQgbkVmZkNvbHMgPSBtX3RhYmxlLT5u
dW1FZmZDb2xzKCk7CisgICAgdW5zaWduZWQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1FZmZDb2xz
KCk7CiAgICAgbV93aWR0aC5yZXNpemUobkVmZkNvbHMpOwogICAgIG1fd2lkdGguZmlsbChMZW5n
dGgoQXV0bykpOwogCi0gICAgaW50IGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4gPSAwOworICAgIHVu
c2lnbmVkIGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4gPSAwOwogICAgIExlbmd0aCBncnBXaWR0aDsK
ICAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQtPmlzVGFibGVDb2woKSkgewogICAgICAgICBSZW5k
ZXJUYWJsZUNvbCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CkBAIC0xMDEsOSArMTAx
LDkgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCkKICAgICAgICAg
ICAgIGlmICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQogICAgICAgICAgICAgICAgIGVm
ZldpZHRoID0gdy52YWx1ZSgpOwogCi0gICAgICAgICAgICBpbnQgc3BhbiA9IGNvbC0+c3Bhbigp
OworICAgICAgICAgICAgdW5zaWduZWQgc3BhbiA9IGNvbC0+c3BhbigpOwogICAgICAgICAgICAg
d2hpbGUgKHNwYW4pIHsKLSAgICAgICAgICAgICAgICBpbnQgc3BhbkluQ3VycmVudEVmZmVjdGl2
ZUNvbHVtbjsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcGFuSW5DdXJyZW50RWZmZWN0aXZl
Q29sdW1uOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWZmZWN0aXZlQ29sdW1uID49IG5F
ZmZDb2xzKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdGFibGUtPmFwcGVuZENvbHVtbihzcGFu
KTsKICAgICAgICAgICAgICAgICAgICAgbkVmZkNvbHMrKzsKQEAgLTE0MSw3ICsxNDEsNyBAQCBp
bnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50KQogICAgIC8vIEl0ZXJhdGUg
b3ZlciB0aGUgZmlyc3Qgcm93IGluIGNhc2Ugc29tZSBhcmUgdW5zcGVjaWZpZWQuCiAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV90YWJsZS0+dG9wTm9uRW1wdHlTZWN0aW9uKCk7
CiAgICAgaWYgKHNlY3Rpb24pIHsKLSAgICAgICAgaW50IGNDb2wgPSAwOworICAgICAgICB1bnNp
Z25lZCBjQ29sID0gMDsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdFJvdyA9IHNlY3Rpb24t
PmZpcnN0Q2hpbGQoKTsKICAgICAgICAgY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGlsZCgpOwog
ICAgICAgICB3aGlsZSAoY2hpbGQpIHsKQEAgLTE1MSwxMyArMTUxLDEzIEBAIGludCBGaXhlZFRh
YmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiAgICAgICAgICAgICAgICAgICAgIGNlbGwt
PmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKICAgICAgICAgICAgICAgICBMZW5n
dGggdyA9IGNlbGwtPnN0eWxlT3JDb2xMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAgICBp
bnQgc3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcGFu
ID0gY2VsbC0+Y29sU3BhbigpOwogICAgICAgICAgICAgICAgIGludCBlZmZXaWR0aCA9IDA7CiAg
ICAgICAgICAgICAgICAgaWYgKHcuaXNGaXhlZCgpICYmIHcuaXNQb3NpdGl2ZSgpKQogICAgICAg
ICAgICAgICAgICAgICBlZmZXaWR0aCA9IHcudmFsdWUoKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpbnQgdXNlZFNwYW4gPSAwOwotICAgICAgICAgICAgICAgIGludCBpID0g
MDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkU3BhbiA9IDA7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaSA9IDA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZWRTcGFuIDwgc3Bh
biAmJiBjQ29sICsgaSA8IG5FZmZDb2xzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGVT
cGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGNDb2wgKyBpKTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gT25seSBzZXQgaWYgbm8gY29sIGVsZW1lbnQgaGFzIGFscmVhZHkgc2V0IGl0LgpAQCAt
MjIzLDExICsyMjMsMTEgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5XaWR0aCwgTGF5b3UKIHZvaWQgRml4ZWRUYWJs
ZUxheW91dDo6bGF5b3V0KCkKIHsKICAgICBpbnQgdGFibGVMb2dpY2FsV2lkdGggPSBtX3RhYmxl
LT5sb2dpY2FsV2lkdGgoKSAtIG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0luUm93
RGlyZWN0aW9uKCk7Ci0gICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwor
ICAgIHVuc2lnbmVkIG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAgIFZlY3Rv
cjxpbnQ+IGNhbGNXaWR0aChuRWZmQ29scywgMCk7CiAKLSAgICBpbnQgbnVtQXV0byA9IDA7Ci0g
ICAgaW50IGF1dG9TcGFuID0gMDsKKyAgICB1bnNpZ25lZCBudW1BdXRvID0gMDsKKyAgICB1bnNp
Z25lZCBhdXRvU3BhbiA9IDA7CiAgICAgaW50IHRvdGFsRml4ZWRXaWR0aCA9IDA7CiAgICAgaW50
IHRvdGFsUGVyY2VudFdpZHRoID0gMDsKICAgICBmbG9hdCB0b3RhbFBlcmNlbnQgPSAwOwpAQCAt
MjM2LDcgKzIzNiw3IEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKICAgICAvLyBQ
ZXJjZW50YWdlcyBhcmUgb2YgdGhlIHRhYmxlJ3Mgd2lkdGgsIHNvIGZvciBleGFtcGxlCiAgICAg
Ly8gZm9yIGEgdGFibGUgd2lkdGggb2YgMTAwcHggd2l0aCBjb2x1bW5zICg0MHB4LCAxMCUpLCB0
aGUgMTAlIGNvbXB1dGUKICAgICAvLyB0byAxMHB4IGhlcmUsIGFuZCB3aWxsIHNjYWxlIHVwIHRv
IDIwcHggaW4gdGhlIGZpbmFsICg4MHB4LCAyMHB4KS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IG5FZmZDb2xzOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7
IGkrKykgewogICAgICAgICBpZiAobV93aWR0aFtpXS5pc0ZpeGVkKCkpIHsKICAgICAgICAgICAg
IGNhbGNXaWR0aFtpXSA9IG1fd2lkdGhbaV0udmFsdWUoKTsKICAgICAgICAgICAgIHRvdGFsRml4
ZWRXaWR0aCArPSBjYWxjV2lkdGhbaV07CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBGaXhlZFRh
YmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgLy8gRml4ZWQgd2lkdGhzIG9ubHkgc2Nh
bGUgdXAKICAgICAgICAgICAgIGlmICh0b3RhbEZpeGVkV2lkdGggJiYgdG90YWxXaWR0aCA8IHRh
YmxlTG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgdG90YWxGaXhlZFdpZHRoID0gMDsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewog
ICAgICAgICAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc0ZpeGVkKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGNXaWR0aFtpXSA9IGNhbGNXaWR0aFtpXSAqIHRhYmxlTG9naWNh
bFdpZHRoIC8gdG90YWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRml4ZWRX
aWR0aCArPSBjYWxjV2lkdGhbaV07CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBGaXhlZFRhYmxl
TGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRvdGFsUGVy
Y2VudCkgewogICAgICAgICAgICAgICAgIHRvdGFsUGVyY2VudFdpZHRoID0gMDsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewogICAgICAgICAg
ICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc1BlcmNlbnQoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsY1dpZHRoW2ldID0gbV93aWR0aFtpXS5wZXJjZW50KCkgKiAodGFibGVMb2dp
Y2FsV2lkdGggLSB0b3RhbEZpeGVkV2lkdGgpIC8gdG90YWxQZXJjZW50OwogICAgICAgICAgICAg
ICAgICAgICAgICAgdG90YWxQZXJjZW50V2lkdGggKz0gY2FsY1dpZHRoW2ldOwpAQCAtMjc5LDEx
ICsyNzksMTIgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gRGl2aWRlIHRoZSByZW1haW5pbmcgd2lkdGggYW1vbmcg
dGhlIGF1dG8gY29sdW1ucy4KKyAgICAgICAgQVNTRVJUKGF1dG9TcGFuID49IG51bUF1dG8pOwog
ICAgICAgICBpbnQgcmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsRml4
ZWRXaWR0aCAtIHRvdGFsUGVyY2VudFdpZHRoIC0gaHNwYWNpbmcgKiAoYXV0b1NwYW4gLSBudW1B
dXRvKTsKICAgICAgICAgaW50IGxhc3RBdXRvID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuRWZmQ29sczsgaSsrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
RWZmQ29sczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc0F1dG8oKSkgewot
ICAgICAgICAgICAgICAgIGludCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBtX3RhYmxlLT5zcGFuT2ZFZmZDb2woaSk7CiAg
ICAgICAgICAgICAgICAgaW50IHcgPSByZW1haW5pbmdXaWR0aCAqIHNwYW4gLyBhdXRvU3BhbjsK
ICAgICAgICAgICAgICAgICBjYWxjV2lkdGhbaV0gPSB3ICsgaHNwYWNpbmcgKiAoc3BhbiAtIDEp
OwogICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IHc7CkBAIC0yOTEsNiArMjkyLDcg
QEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBsYXN0QXV0byA9IGk7CiAgICAgICAgICAgICAgICAgbnVt
QXV0by0tOworICAgICAgICAgICAgICAgIEFTU0VSVChhdXRvU3BhbiA+PSBzcGFuKTsKICAgICAg
ICAgICAgICAgICBhdXRvU3BhbiAtPSBzcGFuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zMTQsNyArMzE2LDcgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgIH0K
ICAgICAKICAgICBpbnQgcG9zID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xz
OyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewog
ICAgICAgICBtX3RhYmxlLT5jb2x1bW5Qb3NpdGlvbnMoKVtpXSA9IHBvczsKICAgICAgICAgcG9z
ICs9IGNhbGNXaWR0aFtpXSArIGhzcGFjaW5nOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDFjMmViY2IwMGIzZWFkOWE2MjNkMzZhZmQ2Y2RhZGNl
ODc1NjRjYjMuLmM5NTYxMjUwNGZiYzI3ZmExNDA1YzRkM2RlOWJlMzA4Y2Q3YTkxZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtNjMzLDEyICs2MzMsMTIg
QEAgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wTm9uRW1wdHlTZWN0aW9uKCkg
Y29uc3QKICAgICByZXR1cm4gc2VjdGlvbjsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRD
b2x1bW4odW5zaWduZWQgcG9zaXRpb24sIGludCBmaXJzdFNwYW4pCit2b2lkIFJlbmRlclRhYmxl
OjpzcGxpdENvbHVtbih1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgZmlyc3RTcGFuKQogewog
ICAgIC8vIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGNvbHVtblN0cnVjdAogICAgIHVuc2lnbmVkIG9s
ZFNpemUgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIG1fY29sdW1ucy5ncm93KG9sZFNpemUgKyAx
KTsKLSAgICBpbnQgb2xkU3BhbiA9IG1fY29sdW1uc1twb3NpdGlvbl0uc3BhbjsKKyAgICB1bnNp
Z25lZCBvbGRTcGFuID0gbV9jb2x1bW5zW3Bvc2l0aW9uXS5zcGFuOwogICAgIEFTU0VSVChvbGRT
cGFuID4gZmlyc3RTcGFuKTsKICAgICBtX2NvbHVtbnNbcG9zaXRpb25dLnNwYW4gPSBmaXJzdFNw
YW47CiAgICAgbWVtbW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9zaXRpb24gKyAxLCBtX2NvbHVt
bnMuZGF0YSgpICsgcG9zaXRpb24sIChvbGRTaXplIC0gcG9zaXRpb24pICogc2l6ZW9mKENvbHVt
blN0cnVjdCkpOwpAQCAtNjYxLDcgKzY2MSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29s
dW1uKHVuc2lnbmVkIHBvc2l0aW9uLCBpbnQgZmlyc3RTcGFuKQogICAgIHNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjphcHBlbmRDb2x1
bW4oaW50IHNwYW4pCit2b2lkIFJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4odW5zaWduZWQgc3Bh
bikKIHsKICAgICB1bnNpZ25lZCBwb3MgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIHVuc2lnbmVk
IG5ld1NpemUgPSBwb3MgKyAxOwpAQCAtNzA0LDEyICs3MDQsMTIgQEAgUmVuZGVyVGFibGVDb2wq
IFJlbmRlclRhYmxlOjpuZXh0Q29sRWxlbWVudChSZW5kZXJUYWJsZUNvbCogY3VycmVudCkgY29u
c3QKICAgICByZXR1cm4gMDsKIH0KIAotUmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxlOjpjb2xF
bGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkgY29uc3QKK1Jl
bmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6Y29sRWxlbWVudCh1bnNpZ25lZCBjb2wsIGJvb2wq
IHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkgY29uc3QKIHsKICAgICBpZiAoIW1faGFzQ29sRWxl
bWVudHMpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7Ci0gICAgaW50IGNDb2wgPSAwOworICAgIHVuc2lnbmVkIGNDb2wgPSAwOwogCiAg
ICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKQpAQCAt
NzIzLDEwICs3MjMsMTEgQEAgUmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxlOjpjb2xFbGVtZW50
KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkKIAogICAgIFJlbmRlclRh
YmxlQ29sKiBjb2xFbGVtID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CiAgICAgd2hpbGUgKGNv
bEVsZW0pIHsKLSAgICAgICAgaW50IHNwYW4gPSBjb2xFbGVtLT5zcGFuKCk7CisgICAgICAgIHVu
c2lnbmVkIHNwYW4gPSBjb2xFbGVtLT5zcGFuKCk7CiAgICAgICAgIGlmICghY29sRWxlbS0+Zmly
c3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnRDb2wgPSBjQ29sOwotICAgICAgICAg
ICAgaW50IGVuZENvbCA9IGNDb2wgKyBzcGFuIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0Q29sID0gY0NvbDsKKyAgICAgICAgICAgIEFTU0VSVChzcGFuID49IDEpOworICAgICAgICAg
ICAgdW5zaWduZWQgZW5kQ29sID0gY0NvbCArIHNwYW4gLSAxOwogICAgICAgICAgICAgY0NvbCAr
PSBzcGFuOwogICAgICAgICAgICAgaWYgKGNDb2wgPiBjb2wpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3RhcnRFZGdlKQpAQCAtNzkyLDExICs3OTMsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVj
YWxjU2VjdGlvbnMoKSBjb25zdAogICAgIH0KIAogICAgIC8vIHJlcGFpciBjb2x1bW4gY291bnQg
KGFkZENoaWxkIGNhbiBncm93IGl0IHRvbyBtdWNoLCBiZWNhdXNlIGl0IGFsd2F5cyBhZGRzIGVs
ZW1lbnRzIHRvIHRoZSBsYXN0IHJvdyBvZiBhIHNlY3Rpb24pCi0gICAgaW50IG1heENvbHMgPSAw
OworICAgIHVuc2lnbmVkIG1heENvbHMgPSAwOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7Ci0g
ICAgICAgICAgICBpbnQgc2VjdGlvbkNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzZWN0aW9uQ29scyA9IHNlY3Rpb24tPm51bUNvbHVtbnMoKTsKICAg
ICAgICAgICAgIGlmIChzZWN0aW9uQ29scyA+IG1heENvbHMpCiAgICAgICAgICAgICAgICAgbWF4
Q29scyA9IHNlY3Rpb25Db2xzOwogICAgICAgICB9CkBAIC0xMDgwLDE3ICsxMDgxLDE5IEBAIFJl
bmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZShjb25zdCBSZW5kZXJUYWJsZUNl
bGwqIGNlbGwpIGNvbnN0CiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCiAgICAgLy8g
RmluZCB0aGUgc2VjdGlvbiBhbmQgcm93IHRvIGxvb2sgaW4KLSAgICBpbnQgciA9IGNlbGwtPnJv
dygpOworICAgIHVuc2lnbmVkIHIgPSBjZWxsLT5yb3coKTsKICAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIHNlY3Rpb24gPSAwOwotICAgIGludCByQWJvdmUgPSAwOworICAgIHVuc2lnbmVkIHJBYm92
ZSA9IDA7CiAgICAgaWYgKHIgPiAwKSB7CiAgICAgICAgIC8vIGNlbGwgaXMgbm90IGluIHRoZSBm
aXJzdCByb3csIHNvIHVzZSB0aGUgYWJvdmUgcm93IGluIGl0cyBvd24gc2VjdGlvbgogICAgICAg
ICBzZWN0aW9uID0gY2VsbC0+c2VjdGlvbigpOwogICAgICAgICByQWJvdmUgPSByIC0gMTsKICAg
ICB9IGVsc2UgewogICAgICAgICBzZWN0aW9uID0gc2VjdGlvbkFib3ZlKGNlbGwtPnNlY3Rpb24o
KSwgU2tpcEVtcHR5U2VjdGlvbnMpOwotICAgICAgICBpZiAoc2VjdGlvbikKKyAgICAgICAgaWYg
KHNlY3Rpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChzZWN0aW9uLT5udW1Sb3dzKCkpOwogICAg
ICAgICAgICAgckFib3ZlID0gc2VjdGlvbi0+bnVtUm93cygpIC0gMTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIExvb2sgdXAgdGhlIGNlbGwgaW4gdGhlIHNlY3Rpb24ncyBncmlkLCB3aGlj
aCByZXF1aXJlcyBlZmZlY3RpdmUgY29sIGluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5oCmluZGV4IGNlMzE2OGU5MDNjNDc5NzI3MTA3ZWYyY2Y0NGZiMzFjMTY1MTViM2Eu
LjJkZTkwMGNlYjRiOGVmNDE2OGI0NjE3ODllM2I1MjVjNTdjNDIwOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBSZW5kZXJUYWJsZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFibGUoKTsK
IAotICAgIExheW91dFVuaXQgZ2V0Q29sdW1uUG9zKGludCBjb2wpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sdW1uUG9zW2NvbF07IH0KKyAgICBMYXlvdXRVbml0IGdldENvbHVtblBvcyh1bnNpZ25lZCBj
b2wpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUG9zW2NvbF07IH0KIAogICAgIGludCBoQm9yZGVy
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1faFNwYWNpbmc7IH0KICAgICBpbnQgdkJvcmRlclNw
YWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZTcGFjaW5nOyB9CkBAIC0xNDYsMTAgKzE0NiwxMCBA
QCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHRhYmxlIGhh
cyBubyBub24tZW1wdHkgc2VjdGlvbnMuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BOb25F
bXB0eVNlY3Rpb24oKSBjb25zdDsKIAotICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9z
aXRpb24sIGludCBmaXJzdFNwYW4pOwotICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBzcGFuKTsK
KyAgICB2b2lkIHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBmaXJzdFNw
YW4pOworICAgIHZvaWQgYXBwZW5kQ29sdW1uKHVuc2lnbmVkIHNwYW4pOwogICAgIHVuc2lnbmVk
IG51bUVmZkNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9Ci0gICAgaW50
IHNwYW5PZkVmZkNvbChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29s
XS5zcGFuOyB9CisgICAgdW5zaWduZWQgc3Bhbk9mRWZmQ29sKHVuc2lnbmVkIGVmZkNvbCkgY29u
c3QgeyByZXR1cm4gbV9jb2x1bW5zW2VmZkNvbF0uc3BhbjsgfQogICAgIAogICAgIHVuc2lnbmVk
IGNvbFRvRWZmQ29sKHVuc2lnbmVkIGNvbHVtbikgY29uc3QKICAgICB7CkBAIC0xNjAsMTAgKzE2
MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBlZmZDb2x1bW47CiAgICAgfQogICAgIAot
ICAgIGludCBlZmZDb2xUb0NvbChpbnQgZWZmQ29sKSBjb25zdAorICAgIHVuc2lnbmVkIGVmZkNv
bFRvQ29sKHVuc2lnbmVkIGVmZkNvbCkgY29uc3QKICAgICB7Ci0gICAgICAgIGludCBjID0gMDsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlZmZDb2w7IGkrKykKKyAgICAgICAgdW5zaWdu
ZWQgYyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZmZDb2w7IGkrKykK
ICAgICAgICAgICAgIGMgKz0gbV9jb2x1bW5zW2ldLnNwYW47CiAgICAgICAgIHJldHVybiBjOwog
ICAgIH0KQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAoY29sbGFw
c2VCb3JkZXJzKCkgPyAwIDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsgKG51bUVm
ZkNvbHMoKSArIDEpICogaEJvcmRlclNwYWNpbmcoKSkpOwogICAgIH0KIAotICAgIFJlbmRlclRh
YmxlQ29sKiBjb2xFbGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJvb2wqIGVu
ZEVkZ2UgPSAwKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZUNvbCogY29sRWxlbWVudCh1bnNpZ25l
ZCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJvb2wqIGVuZEVkZ2UgPSAwKSBjb25zdDsKICAg
ICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbEVsZW1lbnQoUmVuZGVyVGFibGVDb2wqIGN1cnJlbnQp
IGNvbnN0OwogCiAgICAgYm9vbCBuZWVkc1NlY3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBt
X25lZWRzU2VjdGlvblJlY2FsYzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAppbmRleCBiNTRmZjI1OWFkNDliNjIyMTJiOTExMDc2MGU0MDNjZjRmYzU4
ZDExLi4yMDQxYzE5N2U3Y2I1OTMwMDM5NWMxNGQ1NmJlNjBiYTkyNzIxNWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNjIsNyArNjIsNyBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICAgICAgcmVjYWxj
U2VjdGlvbi0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6
OmNvbFNwYW4oKSBjb25zdAordW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpjb2xTcGFuKCkgY29u
c3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1faGFzQXNzb2NpYXRlZFRhYmxlQ2VsbEVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gMTsKQEAgLTcwLDcgKzcwLDcgQEAgaW50IFJlbmRlclRhYmxlQ2Vs
bDo6Y29sU3BhbigpIGNvbnN0CiAgICAgcmV0dXJuIHRvSFRNTFRhYmxlQ2VsbEVsZW1lbnQobm9k
ZSgpKS0+Y29sU3BhbigpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKCkgY29u
c3QKK3Vuc2lnbmVkIFJlbmRlclRhYmxlQ2VsbDo6cm93U3BhbigpIGNvbnN0CiB7CiAgICAgaWYg
KFVOTElLRUxZKCFtX2hhc0Fzc29jaWF0ZWRUYWJsZUNlbGxFbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIDE7CkBAIC05NiwxMCArOTYsMTAgQEAgTGVuZ3RoIFJlbmRlclRhYmxlQ2VsbDo6c3R5bGVP
ckNvbExvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB3OwogCiAgICAgaWYgKFJl
bmRlclRhYmxlQ29sKiB0YWJsZUNvbCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoY29sKCkpKSB7Ci0g
ICAgICAgIGludCBjb2xTcGFuQ291bnQgPSBjb2xTcGFuKCk7CisgICAgICAgIHVuc2lnbmVkIGNv
bFNwYW5Db3VudCA9IGNvbFNwYW4oKTsKIAogICAgICAgICBMZW5ndGggY29sV2lkdGhTdW0gPSBM
ZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjb2xTcGFuQ291
bnQ7IGkrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGNvbFNwYW5Db3Vu
dDsgaSsrKSB7CiAgICAgICAgICAgICBMZW5ndGggY29sV2lkdGggPSB0YWJsZUNvbC0+c3R5bGUo
KS0+bG9naWNhbFdpZHRoKCk7CiAKICAgICAgICAgICAgIC8vIFBlcmNlbnRhZ2UgdmFsdWUgc2hv
dWxkIGJlIHJldHVybmVkIG9ubHkgZm9yIGNvbFNwYW4gPT0gMS4KQEAgLTg2Niw3ICs4NjYsNyBA
QCBwdWJsaWM6CiAKICAgICBDb2xsYXBzZWRCb3JkZXIqIG5leHRCb3JkZXIoKQogICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NvdW50OyBpKyspIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY291bnQ7IGkrKykgewogICAgICAgICAgICAgaWYgKG1fYm9y
ZGVyc1tpXS5ib3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQp
IHsKICAgICAgICAgICAgICAgICBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gJm1fYm9yZGVyc1tpXTsKQEAgLTg3Nyw3ICs4NzcsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIENvbGxhcHNlZEJvcmRlciBtX2JvcmRlcnNbNF07Ci0g
ICAgaW50IG1fY291bnQ7CisgICAgdW5zaWduZWQgbV9jb3VudDsKIH07CiAKIHN0YXRpYyB2b2lk
IGFkZEJvcmRlclN0eWxlKFJlbmRlclRhYmxlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZXMmIGJvcmRl
clZhbHVlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRl
eCA1ZjA1ZTgxNDZmYmY3Mjc5NTA4NDM2NTFjM2ExYjNlZTQwZTEwNzkxLi5lYTk3N2MxMWFlNzU2
OGVlYjBlMDk1YTgzYjA1ODExNDcwM2I0ODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oCkBAIC00Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICBpbnQgY2Vs
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgc2V0Q2VsbEluZGV4KGludCkg
eyB9CiAKLSAgICBpbnQgY29sU3BhbigpIGNvbnN0OwotICAgIGludCByb3dTcGFuKCkgY29uc3Q7
CisgICAgdW5zaWduZWQgY29sU3BhbigpIGNvbnN0OworICAgIHVuc2lnbmVkIHJvd1NwYW4oKSBj
b25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIEhUTUxUYWJsZUNlbGxFbGVtZW50LgogICAgIHZv
aWQgY29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IGU0MDBhNTVhY2ZjODdmNmE4MDdjN2Y5OGI4MDg5M2Yz
Y2NkYmM4ZGEuLjY0OWFhYWFiYmQyYTM3MTYzODE5ZWFlNWQyNjc1ODZmN2FlY2FhNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAtNTgsNyArNTgs
NyBAQCB2b2lkIFJlbmRlclRhYmxlQ29sOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZAogCiB2b2lkIFJlbmRlclRhYmxlQ29sOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgaW50IG9sZFNwYW4gPSBtX3NwYW47CisgICAgdW5zaWdu
ZWQgb2xkU3BhbiA9IG1fc3BhbjsKICAgICBOb2RlKiBuID0gbm9kZSgpOwogICAgIGlmIChuICYm
IChuLT5oYXNUYWdOYW1lKGNvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShjb2xncm91cFRhZykpKSB7
CiAgICAgICAgIEhUTUxUYWJsZUNvbEVsZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Q29sRWxlbWVudCo+KG4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wu
aAppbmRleCA1ZDkzOWM0MDc4NDFlNzc3N2I1MGYzODUyOTMwNDQyY2VhYjdiOTY0Li43NmMyOGEz
YTU3YmZmY2YzYzZhNDRmMmQ2MDhhZGZkYmE2ZTg2OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDb2wuaApAQCAtNDEsOCArNDEsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAotICAgIGludCBz
cGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9Ci0gICAgdm9pZCBzZXRTcGFuKGludCBzcGFu
KSB7IG1fc3BhbiA9IHNwYW47IH0KKyAgICB1bnNpZ25lZCBzcGFuKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFuOyB9CisgICAgdm9pZCBzZXRTcGFuKHVuc2lnbmVkIHNwYW4pIHsgbV9zcGFuID0gc3Bh
bjsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0
dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC02NCw3ICs2NCw3IEBAIHBy
aXZhdGU6CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CiAKICAgICBSZW5kZXJPYmpl
Y3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKLSAgICBpbnQgbV9zcGFuOworICAgIHVuc2lnbmVkIG1f
c3BhbjsKIH07CiAKIGlubGluZSBSZW5kZXJUYWJsZUNvbCogdG9SZW5kZXJUYWJsZUNvbChSZW5k
ZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAKaW5kZXggMTBlOTY0N2QyYjZhNDczNGZhODg0MzcyNTk0YThmODU5MDQx
Yjg2NC4uZWUwODAwYTdiZWFiYmY5Y2I0NmJkMWZkMjY1OGFiZWQzN2Q1YzkxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE5Myw4
ICsxOTMsOCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNl
bGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAgaWYgKG5lZWRzQ2VsbFJlY2FsYygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgclNwYW4gPSBjZWxsLT5yb3dTcGFuKCk7Ci0g
ICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOworICAgIHVuc2lnbmVkIHJTcGFuID0gY2Vs
bC0+cm93U3BhbigpOworICAgIHVuc2lnbmVkIGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOwogICAg
IFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1uU3RydWN0PiYgY29sdW1ucyA9IHRhYmxlKCktPmNv
bHVtbnMoKTsKICAgICB1bnNpZ25lZCBuQ29scyA9IGNvbHVtbnMuc2l6ZSgpOwogICAgIC8vIGFk
ZENlbGwgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIG1fY1JvdyBoYXMgYmVlbiBpbmNyZW1l
bnRlZC4KQEAgLTI0MSwxNiArMjQxLDE2IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKICAgICAvLyB0
ZWxsIHRoZSBjZWxsIHdoZXJlIGl0IGlzCiAgICAgYm9vbCBpbkNvbFNwYW4gPSBmYWxzZTsKICAg
ICB3aGlsZSAoY1NwYW4pIHsKLSAgICAgICAgaW50IGN1cnJlbnRTcGFuOworICAgICAgICB1bnNp
Z25lZCBjdXJyZW50U3BhbjsKICAgICAgICAgaWYgKG1fY0NvbCA+PSBuQ29scykgewogICAgICAg
ICAgICAgdGFibGUoKS0+YXBwZW5kQ29sdW1uKGNTcGFuKTsKICAgICAgICAgICAgIGN1cnJlbnRT
cGFuID0gY1NwYW47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY1NwYW4gPCAo
aW50KWNvbHVtbnNbbV9jQ29sXS5zcGFuKQorICAgICAgICAgICAgaWYgKGNTcGFuIDwgY29sdW1u
c1ttX2NDb2xdLnNwYW4pCiAgICAgICAgICAgICAgICAgdGFibGUoKS0+c3BsaXRDb2x1bW4obV9j
Q29sLCBjU3Bhbik7CiAgICAgICAgICAgICBjdXJyZW50U3BhbiA9IGNvbHVtbnNbbV9jQ29sXS5z
cGFuOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgclNwYW47IHIrKykg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgclNwYW47IHIrKykgewogICAgICAg
ICAgICAgQ2VsbFN0cnVjdCYgYyA9IGNlbGxBdChpbnNlcnRpb25Sb3cgKyByLCBtX2NDb2wpOwog
ICAgICAgICAgICAgQVNTRVJUKGNlbGwpOwogICAgICAgICAgICAgYy5jZWxscy5hcHBlbmQoY2Vs
bCk7CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENlbGxM
b2dpY2FsV2lkdGhzKCkKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50LmluQ29sU3Bh
bikKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmRDb2wg
PSBqOwotICAgICAgICAgICAgaW50IGNzcGFuID0gY2VsbC0+Y29sU3BhbigpOworICAgICAgICAg
ICAgdW5zaWduZWQgY3NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAgICAgICB3aGlsZSAo
Y3NwYW4gJiYgZW5kQ29sIDwgY29scykgewogICAgICAgICAgICAgICAgIEFTU0VSVChlbmRDb2wg
PCB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBjc3BhbiAtPSB0
YWJsZSgpLT5jb2x1bW5zKClbZW5kQ29sXS5zcGFuOwpAQCAtNDM4LDcgKzQzOCw3IEBAIExheW91
dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9BZGQpCiAg
ICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIAogICAgIExheW91dFVuaXQgckhlaWdodDsKLSAg
ICBpbnQgcmluZHg7CisgICAgdW5zaWduZWQgcmluZHg7CiAgICAgdW5zaWduZWQgdG90YWxSb3dz
ID0gbV9ncmlkLnNpemUoKTsKIAogICAgIC8vIFNldCB0aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24g
bm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCkBAIC01MDksNyArNTA5LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0
b0FkZCkKIAogICAgIExheW91dFVuaXQgaHNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2lu
ZygpOwogICAgIExheW91dFVuaXQgdnNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2luZygp
OwotICAgIExheW91dFVuaXQgbkVmZkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CisgICAg
dW5zaWduZWQgbkVmZkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAKICAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBMYXlvdXRTaXplKHgoKSwg
eSgpKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKQEAgLTUyMiw3
ICs1MjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhMYXlv
dXRVbml0IHRvQWRkKQogICAgICAgICAgICAgcm93UmVuZGVyZXItPnVwZGF0ZUxheWVyVHJhbnNm
b3JtKCk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IG5FZmZDb2xz
OyBjKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IG5FZmZDb2xzOyBjKysp
IHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gY2VsbEF0KHIsIGMpOwogICAgICAgICAg
ICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFyeUNlbGwoKTsKIApAQCAtNjc5LDcg
KzY3OSw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91
dFVuaXQgdG9BZGQpCiAjZW5kaWYKICAgICAvLyBOb3cgdGhhdCBvdXIgaGVpZ2h0IGhhcyBiZWVu
IGRldGVybWluZWQsIGFkZCBpbiBvdmVyZmxvdyBmcm9tIGNlbGxzLgogICAgIGZvciAodW5zaWdu
ZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAgICAgICBmb3IgKGludCBjID0gMDsg
YyA8IG5FZmZDb2xzOyBjKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IG5F
ZmZDb2xzOyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gY2VsbEF0KHIsIGMp
OwogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFyeUNlbGwoKTsK
ICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjcy5pbkNvbFNwYW4pCkBAIC03MTAsNyArNzEwLDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0VW5pdCB0
b0FkZCkKIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJl
Zm9yZSgpIGNvbnN0CiB7Ci0gICAgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMo
KTsKKyAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAgICAg
aWYgKCFtX2dyaWQuc2l6ZSgpIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCkBA
IC03MjksNyArNzI5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRl
ckJvcmRlckJlZm9yZSgpIGNvbnN0CiAgICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lkdGgoKTsK
IAogICAgIGJvb2wgYWxsSGlkZGVuID0gdHJ1ZTsKLSAgICBmb3IgKGludCBjID0gMDsgYyA8IHRv
dGFsQ29sczsgYysrKSB7CisgICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IHRvdGFsQ29sczsg
YysrKSB7CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQoMCwgYyk7
CiAgICAgICAgIGlmIChjdXJyZW50LmluQ29sU3BhbiB8fCAhY3VycmVudC5oYXNDZWxscygpKQog
ICAgICAgICAgICAgY29udGludWU7CkBAIC03NjEsNyArNzYxLDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CiAKIExheW91dFVu
aXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0CiB7Ci0g
ICAgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKKyAgICB1bnNpZ25lZCB0
b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAgICAgaWYgKCFtX2dyaWQuc2l6ZSgp
IHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC03ODAsNyArNzgwLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckFmdGVyKCkgY29u
c3QKICAgICAgICAgYm9yZGVyV2lkdGggPSByYi53aWR0aCgpOwogCiAgICAgYm9vbCBhbGxIaWRk
ZW4gPSB0cnVlOwotICAgIGZvciAoaW50IGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsKICAgICAgICAgY29u
c3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChtX2dyaWQuc2l6ZSgpIC0gMSwgYyk7CiAg
ICAgICAgIGlmIChjdXJyZW50LmluQ29sU3BhbiB8fCAhY3VycmVudC5oYXNDZWxscygpKQogICAg
ICAgICAgICAgY29udGludWU7CkBAIC04MTIsNyArODEyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
YWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckFmdGVyKCkgY29uc3QKIAogTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KCkgY29uc3QKIHsKLSAgICBp
bnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworICAgIHVuc2lnbmVkIHRvdGFs
Q29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICBpZiAoIW1fZ3JpZC5zaXplKCkgfHwg
IXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTg1Niw3ICs4NTYsNyBAQCBMYXlv
dXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyU3RhcnQoKSBjb25zdAog
CiBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyRW5kKCkgY29u
c3QKIHsKLSAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworICAgIHVu
c2lnbmVkIHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICBpZiAoIW1fZ3Jp
ZC5zaXplKCkgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExMDYsOSAr
MTEwNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgc3RkOjpzb3J0KGNlbGxzLmJlZ2luKCksIGNlbGxzLmVuZCgpLCBjb21wYXJl
Q2VsbFBvc2l0aW9uc1dpdGhPdmVyZmxvd2luZ0NlbGxzKTsKIAotICAgICAgICAgICAgaW50IHNp
emUgPSBjZWxscy5zaXplKCk7Ci0gICAgICAgICAgICAvLyBQYWludCB0aGUgY2VsbHMuCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjZWxscy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBw
YWludENlbGwoY2VsbHNbaV0sIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTE4NCw3ICsxMTgyLDcgQEAgdW5zaWduZWQgUmVuZGVyVGFibGVTZWN0aW9uOjpu
dW1Db2x1bW5zKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0ICsgMTsKIH0KIAotdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQordm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmFwcGVuZENvbHVtbih1bnNpZ25lZCBwb3MpCiB7CiAgICAgQVNTRVJUKCFtX25lZWRz
Q2VsbFJlY2FsYyk7CiAKQEAgLTExOTIsNyArMTE5MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjphcHBlbmRDb2x1bW4oaW50IHBvcykKICAgICAgICAgbV9ncmlkW3Jvd10ucm93LnJlc2l6
ZShwb3MgKyAxKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKHVu
c2lnbmVkIHBvcywgaW50IGZpcnN0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29s
dW1uKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgZmlyc3QpCiB7CiAgICAgQVNTRVJUKCFtX25lZWRz
Q2VsbFJlY2FsYyk7CiAKQEAgLTEyMDUsNyArMTIwMyw4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpzcGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIGludCBmaXJzdCkKICAgICAgICAgICAgIHJb
cG9zICsgMV0uY2VsbHMuYXBwZW5kKHJbcG9zXS5jZWxscyk7CiAgICAgICAgICAgICBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwgPSByW3Bvc10ucHJpbWFyeUNlbGwoKTsKICAgICAgICAgICAgIEFTU0VS
VChjZWxsKTsKLSAgICAgICAgICAgIGludCBjb2xsZWZ0ID0gY2VsbC0+Y29sU3BhbigpIC0gcltw
b3NdLmluQ29sU3BhbjsKKyAgICAgICAgICAgIEFTU0VSVChjZWxsLT5jb2xTcGFuKCkgPj0gcltw
b3NdLmluQ29sU3Bhbik7CisgICAgICAgICAgICB1bnNpZ25lZCBjb2xsZWZ0ID0gY2VsbC0+Y29s
U3BhbigpIC0gcltwb3NdLmluQ29sU3BhbjsKICAgICAgICAgICAgIGlmIChmaXJzdCA+IGNvbGxl
ZnQpCiAgICAgICAgICAgICAgIHJbcG9zICsgMV0uaW5Db2xTcGFuID0gMDsKICAgICAgICAgICAg
IGVsc2UKQEAgLTEyNzksNyArMTI3OCw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAg
aWYgKCFjdXJyZW50Lmhhc0NlbGxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZv
ciAoaW50IGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyApIHsKKyAgICAgICAg
LS1pOwogICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwog
ICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGls
ZChjZWxsLCBhZGp1c3RlZExvY2F0aW9uKTsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFJlbmRl
ck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250
YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IGM1NDQ5ZDdhYjQ0NWRmZmM1NzRiM2NlOTZhOTI2
ZTUzNTI2ZGQ3MWEuLjg2ZjM0MzQzNzcwNmRiZjI1MGRjMDUxYjA2MGE1YmUyZmQ5ZmMzMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTkw
LDE2ICs5MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0OwogICAg
IH07CiAKLSAgICBDZWxsU3RydWN0JiBjZWxsQXQoaW50IHJvdywgIGludCBjb2wpIHsgcmV0dXJu
IG1fZ3JpZFtyb3ddLnJvd1tjb2xdOyB9Ci0gICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbEF0KGlu
dCByb3csIGludCBjb2wpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xdOyB9Ci0g
ICAgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbEF0KGludCByb3csIGludCBjb2wpCisgICAg
Q2VsbFN0cnVjdCYgY2VsbEF0KHVuc2lnbmVkIHJvdywgIHVuc2lnbmVkIGNvbCkgeyByZXR1cm4g
bV9ncmlkW3Jvd10ucm93W2NvbF07IH0KKyAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsQXQodW5z
aWduZWQgcm93LCB1bnNpZ25lZCBjb2wpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tj
b2xdOyB9CisgICAgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbEF0KHVuc2lnbmVkIHJvdywg
dW5zaWduZWQgY29sKQogICAgIHsKICAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IG1fZ3JpZFtyb3dd
LnJvd1tjb2xdOwogICAgICAgICByZXR1cm4gYy5wcmltYXJ5Q2VsbCgpOwogICAgIH0KIAotICAg
IHZvaWQgYXBwZW5kQ29sdW1uKGludCBwb3MpOwotICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWdu
ZWQgcG9zLCBpbnQgZmlyc3QpOworICAgIHZvaWQgYXBwZW5kQ29sdW1uKHVuc2lnbmVkIHBvcyk7
CisgICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGZpcnN0KTsKIAog
ICAgIExheW91dFVuaXQgY2FsY091dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBjYWxjT3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0OwpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1
YmxpYzoKICAgICBib29sIG5lZWRzQ2VsbFJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHND
ZWxsUmVjYWxjOyB9CiAgICAgdm9pZCBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIAotICAgIExheW91
dFVuaXQgZ2V0QmFzZWxpbmUoaW50IHJvdykgeyByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZWxpbmU7
IH0KKyAgICBMYXlvdXRVbml0IGdldEJhc2VsaW5lKHVuc2lnbmVkIHJvdykgeyByZXR1cm4gbV9n
cmlkW3Jvd10uYmFzZWxpbmU7IH0KIAogICAgIHZvaWQgcm93TG9naWNhbEhlaWdodENoYW5nZWQo
dW5zaWduZWQgcm93SW5kZXgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115289</attachid>
            <date>2011-11-15 17:47:04 -0800</date>
            <delta_ts>2011-11-15 18:04:14 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-72083-20111115174703.patch</filename>
            <type>text/plain</type>
            <size>38570</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTIwMzJjNzU2MjcxYTll
ZDY0ZDJjNDg1ZWQ4NmI5NDA2OWYyZTYyOC4uOGE1OTEwMmIxOWM0YWU3NTg4NDVhOTA3OTVkNzVj
MTkwNTg3NTNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDExLTExLTE1ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFN3aXRjaCB0
YWJsZSBpbmRleGluZyB0byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzIwODMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICBObyBleHBlY3RlZCBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAg
QWxsIG9mIHRoZSBjb2RlIGlzIG5vdyB1c2luZyB1bnNpZ25lZCBmb3IgaW5kZXhpbmchCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4pOgorICAgICAgICBBZGRlZCBzb21lIEFTU0VSVHMgdG8g
bWFrZSBzdXJlIHdlIGRvbid0IHVuZGVyZmxvdy4gTG9va2luZyBhdCBob3cKKyAgICAgICAgdGhl
IGRpZmZlcmVudCB2YXJpYWJsZXMgYXJlIHBvcHVsYXRlZCwgdGhleSBzaG91bGQgbm90IGJlIHJl
YWNoZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sU3Bhbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4pOgorICAgICAgICBUaG9zZSAyIGZ1bmN0aW9ucyBw
cm9tb3RlcyBIVE1MVGFibGVDZWxsRWxlbWVudCdzIGludCB0byB1bnNpZ25lZAorICAgICAgICB3
aGljaCBzaG91bGQgYmUgZmluZSBhcyB3ZSBtYWtlIHN1cmUgdGhlaXIgYXJlIHBvc2l0aXZlLiBB
bHNvIEhUTUw1CisgICAgICAgIG1ha2VzIHRob3NlIDIgZmllbGRzICJ1bnNpZ25lZCBsb25nIiB3
aGljaCBnb2VzIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9B
dXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0Ojps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAg
IFJld3JvdGUgYSBjb3VwbGUgb2YgcmV2ZXJzZSBpdGVyYXRpbmcgdG8gYmUgYWJsZSB0byB1c2Ug
dW5zaWduZWQKKyAgICAgICAgd2l0aG91dCBvdmVyZmxvd2luZy4KKworICAgICAgICAqIHJlbmRl
cmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5
b3V0OjpyZWNhbGNDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0Ojpm
dWxsUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVj
dGl2ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFibGVMYXlvdXQ6Omlu
c2VydFNwYW5DZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3BsaXRD
b2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6cmVjYWxjU2VjdGlvbnMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6
OmdldENvbHVtblBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3Bhbk9mRWZm
Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZDb2xUb0NvbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sbGFwc2VkQm9yZGVyczo6bmV4dEJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVDb2w6OnNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDb2w6
OnNldFNwYW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQWZ0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJT
dGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1u
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OnByaW1hcnlDZWxsQXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVTZWN0aW9uOjpnZXRCYXNlbGluZSk6CisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdl
IGludCAtPiB1bnNpZ25lZC4KKwogMjAxMS0xMS0xNSAgVmluY2VudCBTY2hlaWIgIDxzY2hlaWJA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFBvaW50ZXIgTG9jazogUmVmYWN0b3Jpbmc6IFBvaW50
ZXJMb2NrLmlkbDogRHJvcHBpbmcgd2Via2l0IHByZWZpeApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAppbmRleCBmZmFmZTczNmMzNDdiMzkwYWVhY2NjNzY0
ZWU1MzNiMGVkYTAxZmE0Li44ODdkNWZjNDE1YTlmYTE1NWE3MzY1ZDM5MzAyY2ZhZDgyYjdhYzU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcApAQCAt
NDIsNyArNDIsNyBAQCBBdXRvVGFibGVMYXlvdXQ6On5BdXRvVGFibGVMYXlvdXQoKQogewogfQog
Ci12b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlZmZDb2wpCit2b2lkIEF1
dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCkKIHsKICAgICBMYXlv
dXQmIGNvbHVtbkxheW91dCA9IG1fbGF5b3V0U3RydWN0W2VmZkNvbF07CiAKQEAgLTU0LDggKzU0
LDggQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZWZmQ29sKQogICAg
ICAgICAgICAgdG9SZW5kZXJUYWJsZUNvbChjaGlsZCktPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAg
ICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2Vj
dGlvbihjaGlsZCk7Ci0gICAgICAgICAgICBpbnQgbnVtUm93cyA9IHNlY3Rpb24tPm51bVJvd3Mo
KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBudW1Sb3dzID0gc2VjdGlvbi0+bnVtUm93cygpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJvd3M7IGkrKykgewogICAgICAgICAgICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCBjdXJyZW50ID0gc2VjdGlvbi0+Y2Vs
bEF0KGksIGVmZkNvbCk7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
Y3VycmVudC5wcmltYXJ5Q2VsbCgpOwogICAgICAgICAgICAgICAgIApAQCAtMTQzLDE3ICsxNDMs
MTcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmZ1bGxSZWNhbGMoKQogICAgIG1faGFzUGVyY2Vu
dCA9IGZhbHNlOwogICAgIG1fZWZmZWN0aXZlTG9naWNhbFdpZHRoRGlydHkgPSB0cnVlOwogCi0g
ICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOworICAgIHVuc2lnbmVkIG5F
ZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAgIG1fbGF5b3V0U3RydWN0LnJlc2l6
ZShuRWZmQ29scyk7CiAgICAgbV9sYXlvdXRTdHJ1Y3QuZmlsbChMYXlvdXQoKSk7CiAgICAgbV9z
cGFuQ2VsbHMuZmlsbCgwKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBtX3RhYmxlLT5m
aXJzdENoaWxkKCk7CiAgICAgTGVuZ3RoIGdyb3VwTG9naWNhbFdpZHRoOwotICAgIGludCBjdXJy
ZW50Q29sdW1uID0gMDsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q29sdW1uID0gMDsKICAgICB3aGls
ZSAoY2hpbGQgJiYgY2hpbGQtPmlzVGFibGVDb2woKSkgewogICAgICAgICBSZW5kZXJUYWJsZUNv
bCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7Ci0gICAgICAgIGludCBzcGFuID0gY29s
LT5zcGFuKCk7CisgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBjb2wtPnNwYW4oKTsKICAgICAgICAg
aWYgKGNvbC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgZ3JvdXBMb2dpY2FsV2lkdGggPSBj
b2wtPnN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBlbHNlIHsKQEAgLTE2Miw3ICsx
NjIsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYygpCiAgICAgICAgICAgICAg
ICAgY29sTG9naWNhbFdpZHRoID0gZ3JvdXBMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAo
KGNvbExvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgfHwgY29sTG9naWNhbFdpZHRoLmlzUGVyY2VudCgp
KSAmJiBjb2xMb2dpY2FsV2lkdGguaXNaZXJvKCkpCiAgICAgICAgICAgICAgICAgY29sTG9naWNh
bFdpZHRoID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpbnQgZWZmQ29sID0gbV90YWJsZS0+Y29s
VG9FZmZDb2woY3VycmVudENvbHVtbik7CisgICAgICAgICAgICB1bnNpZ25lZCBlZmZDb2wgPSBt
X3RhYmxlLT5jb2xUb0VmZkNvbChjdXJyZW50Q29sdW1uKTsKICAgICAgICAgICAgIGlmICghY29s
TG9naWNhbFdpZHRoLmlzQXV0bygpICYmIHNwYW4gPT0gMSAmJiBlZmZDb2wgPCBuRWZmQ29scyAm
JiBtX3RhYmxlLT5zcGFuT2ZFZmZDb2woZWZmQ29sKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAg
bV9sYXlvdXRTdHJ1Y3RbZWZmQ29sXS5sb2dpY2FsV2lkdGggPSBjb2xMb2dpY2FsV2lkdGg7CiAg
ICAgICAgICAgICAgICAgaWYgKGNvbExvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkgJiYgbV9sYXlvdXRT
dHJ1Y3RbZWZmQ29sXS5tYXhMb2dpY2FsV2lkdGggPCBjb2xMb2dpY2FsV2lkdGgudmFsdWUoKSkK
QEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6ZnVsbFJlY2FsYygpCiAg
ICAgICAgIGNoaWxkID0gbmV4dDsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5F
ZmZDb2xzOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKysp
CiAgICAgICAgIHJlY2FsY0NvbHVtbihpKTsKIH0KIApAQCAtMjkzLDEzICsyOTMsMTMgQEAgaW50
IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIGlm
ICghY2VsbCkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGludCBzcGFuID0gY2VsbC0+
Y29sU3BhbigpOworICAgICAgICB1bnNpZ25lZCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogCiAg
ICAgICAgIExlbmd0aCBjZWxsTG9naWNhbFdpZHRoID0gY2VsbC0+c3R5bGVPckNvbExvZ2ljYWxX
aWR0aCgpOwogICAgICAgICBpZiAoIWNlbGxMb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpICYmIGNl
bGxMb2dpY2FsV2lkdGguaXNaZXJvKCkpCiAgICAgICAgICAgICBjZWxsTG9naWNhbFdpZHRoID0g
TGVuZ3RoKCk7IC8vIG1ha2UgaXQgQXV0bwogCi0gICAgICAgIGludCBlZmZDb2wgPSBtX3RhYmxl
LT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKSk7CisgICAgICAgIHVuc2lnbmVkIGVmZkNvbCA9IG1f
dGFibGUtPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKICAgICAgICAgc2l6ZV90IGxhc3RDb2wg
PSBlZmZDb2w7CiAgICAgICAgIGludCBjZWxsTWluTG9naWNhbFdpZHRoID0gY2VsbC0+bWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCkgKyBzcGFjaW5nSW5Sb3dEaXJlY3Rpb247CiAgICAgICAgIGZs
b2F0IGNlbGxNYXhMb2dpY2FsV2lkdGggPSBjZWxsLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSArIHNwYWNpbmdJblJvd0RpcmVjdGlvbjsKQEAgLTQ1NSwxNyArNDU1LDE3IEBAIHZvaWQgQXV0
b1RhYmxlTGF5b3V0OjppbnNlcnRTcGFuQ2VsbChSZW5kZXJUYWJsZUNlbGwgKmNlbGwpCiAgICAg
aWYgKCFjZWxsIHx8IGNlbGwtPmNvbFNwYW4oKSA9PSAxKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgc2l6ZSA9IG1fc3BhbkNlbGxzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gbV9z
cGFuQ2VsbHMuc2l6ZSgpOwogICAgIGlmICghc2l6ZSB8fCBtX3NwYW5DZWxsc1tzaXplLTFdICE9
IDApIHsKICAgICAgICAgbV9zcGFuQ2VsbHMuZ3JvdyhzaXplICsgMTApOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAxMDsgaSsrKQogICAgICAgICAgICAgbV9zcGFuQ2VsbHNbc2l6ZStpXSA9IDA7CiAgICAgICAg
IHNpemUgKz0gMTA7CiAgICAgfQogCiAgICAgLy8gYWRkIHRoZW0gaW4gc29ydC4gVGhpcyBpcyBh
IHNsb3cgYWxnb3JpdGhtLCBhbmQgYSBiaW5hcnkgc2VhcmNoIG9yIGEgZmFzdCBzb3J0aW5nIGFm
dGVyIGNvbGxlY3Rpb24gd291bGQgYmUgYmV0dGVyCi0gICAgdW5zaWduZWQgaW50IHBvcyA9IDA7
Ci0gICAgaW50IHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CisgICAgdW5zaWduZWQgcG9zID0gMDsK
KyAgICB1bnNpZ25lZCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogICAgIHdoaWxlIChwb3MgPCBt
X3NwYW5DZWxscy5zaXplKCkgJiYgbV9zcGFuQ2VsbHNbcG9zXSAmJiBzcGFuID4gbV9zcGFuQ2Vs
bHNbcG9zXS0+Y29sU3BhbigpKQogICAgICAgICBwb3MrKzsKICAgICBtZW1tb3ZlKG1fc3BhbkNl
bGxzLmRhdGEoKStwb3MrMSwgbV9zcGFuQ2VsbHMuZGF0YSgpK3BvcywgKHNpemUtcG9zLTEpKnNp
emVvZihSZW5kZXJUYWJsZUNlbGwgKikpOwpAQCAtNTQ0LDcgKzU0NCw4IEBAIHZvaWQgQXV0b1Rh
YmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMTAwKSB7CiAg
ICAgICAgICAgICAvLyByZW1vdmUgb3ZlcmFsbG9jYXRlZCBzcGFjZSBmcm9tIHRoZSBsYXN0IGNv
bHVtbnMKICAgICAgICAgICAgIGludCBleGNlc3MgPSB0YWJsZUxvZ2ljYWxXaWR0aCAqICh0b3Rh
bFBlcmNlbnQgLSAxMDApIC8gMTAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xz
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5FZmZD
b2xzOyBpOyApIHsKKyAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgaWYgKG1f
bGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewogICAg
ICAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ld
LmNvbXB1dGVkTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgICAgICBpbnQgcmVkdWN0aW9u
ID0gbWluKGNlbGxMb2dpY2FsV2lkdGgsICBleGNlc3MpOwpAQCAtNjI2LDkgKzYyNywxMCBAQCB2
b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKIAogICAgIC8vIHNwcmVhZCBvdmVyIHRoZSBy
ZXN0CiAgICAgaWYgKGF2YWlsYWJsZSA+IDAgJiYgbkVmZkNvbHMgPiBudW1BdXRvRW1wdHlDZWxs
c09ubHkpIHsKLSAgICAgICAgaW50IHRvdGFsID0gbkVmZkNvbHMgLSBudW1BdXRvRW1wdHlDZWxs
c09ubHk7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsID0gbkVmZkNvbHMgLSBudW1BdXRvRW1wdHlD
ZWxsc09ubHk7CiAgICAgICAgIC8vIHN0aWxsIGhhdmUgc29tZSB3aWR0aCB0byBzcHJlYWQKLSAg
ICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbkVmZkNvbHM7IGk7ICkgeworICAgICAgICAgICAgLS1pOwogICAg
ICAgICAgICAgLy8gdmFyaWFibGUgY29sdW1ucyB3aXRoIGVtcHR5IGNlbGxzIG9ubHkgZG9uJ3Qg
Z2V0IGFueSB3aWR0aAogICAgICAgICAgICAgaWYgKG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2
ZUxvZ2ljYWxXaWR0aC5pc0F1dG8oKSAmJiBtX2xheW91dFN0cnVjdFtpXS5lbXB0eUNlbGxzT25s
eSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY1MCwxMyArNjUyLDE1IEBAIHZvaWQg
QXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAvLyBUaGlzIGlzIGJhc2ljYWxseSB0
aGUgcmV2ZXJzZSBvZiBob3cgd2UgZ3JldyB0aGUgY2VsbHMuCiAgICAgICAgIGlmIChhdmFpbGFi
bGUgPCAwKSB7CiAgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaTsgKSB7CisgICAgICAgICAgICAg
ICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRT
dHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChsb2dp
Y2FsV2lkdGguaXNBdXRvKCkpCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aEJleW9u
ZE1pbiArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1fbGF5b3V0
U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAwICYm
IGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbkVmZkNvbHM7IGkgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgKSB7Cisg
ICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRo
ID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAg
ICAgIGlmIChsb2dpY2FsV2lkdGguaXNBdXRvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50
IG1pbk1heERpZmYgPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIG1f
bGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKQEAgLTY3MiwxMyArNjc2
LDE1IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogCiAgICAgICAgIGlmIChhdmFp
bGFibGUgPCAwKSB7CiAgICAgICAgICAgICBpbnQgbG9naWNhbFdpZHRoQmV5b25kTWluID0gMDsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaTsgKSB7CisgICAgICAgICAg
ICAgICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlv
dXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIGlmIChs
b2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpKQogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsV2lk
dGhCZXlvbmRNaW4gKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggLSBt
X2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkg
Pj0gMCAmJiBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5FZmZDb2xzOyBpICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7
ICkgeworICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2lj
YWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzUmVsYXRpdmUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNh
bFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwpAQCAt
Njk0LDEzICs3MDAsMTUgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAKICAgICAg
ICAgaWYgKGF2YWlsYWJsZSA8IDApIHsKICAgICAgICAgICAgIGludCBsb2dpY2FsV2lkdGhCZXlv
bmRNaW4gPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xzIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5FZmZDb2xzOyBpOyApIHsK
KyAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lk
dGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAg
ICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxXaWR0aEJleW9uZE1pbiArPSBtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxX
aWR0aCAtIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1pbkxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG5FZmZDb2xz
IC0gMTsgaSA+PSAwICYmIGxvZ2ljYWxXaWR0aEJleW9uZE1pbiA+IDA7IC0taSkgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbkVmZkNvbHM7IGkgJiYgbG9naWNhbFdpZHRoQmV5b25k
TWluID4gMDsgKSB7CisgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgICAgIExlbmd0
aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRo
OwogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGludCBtaW5NYXhEaWZmID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRM
b2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7
CkBAIC03MTYsMTMgKzcyNCwxNSBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6bGF5b3V0KCkKIAog
ICAgICAgICBpZiAoYXZhaWxhYmxlIDwgMCkgewogICAgICAgICAgICAgaW50IGxvZ2ljYWxXaWR0
aEJleW9uZE1pbiA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gbkVmZkNvbHMgLSAxOyBp
ID49IDA7IC0taSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbkVmZkNvbHM7IGk7
ICkgeworICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBMZW5ndGgmIGxvZ2lj
YWxXaWR0aCA9IG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aDsKICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsV2lkdGhCZXlvbmRNaW4gKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRM
b2dpY2FsV2lkdGggLSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBu
RWZmQ29scy0xOyBpID49IDAgJiYgbG9naWNhbFdpZHRoQmV5b25kTWluID4gMDsgaS0tKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuRWZmQ29sczsgaSAmJiBsb2dpY2FsV2lkdGhC
ZXlvbmRNaW4gPiAwOyApIHsKKyAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICAgICAg
TGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2Fs
V2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnQgbWluTWF4RGlmZiA9IG1fbGF5b3V0U3RydWN0W2ldLmNv
bXB1dGVkTG9naWNhbFdpZHRoIC0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNh
bFdpZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxh
eW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oCmluZGV4
IDIzYmM5NjBhZGNjZjQ0YjQyMjViN2VkY2M4NDAzY2ZjNDdmNTgyOWEuLjlmNjEyMGE5YTBmMDc3
MjE3MjMxYzQzMDAxOTg0ZDhjZWM0NjY5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgZnVsbFJlY2FsYygpOwotICAgIHZvaWQgcmVjYWxjQ29sdW1uKGludCBlZmZDb2wp
OworICAgIHZvaWQgcmVjYWxjQ29sdW1uKHVuc2lnbmVkIGVmZkNvbCk7CiAKICAgICBpbnQgY2Fs
Y0VmZmVjdGl2ZUxvZ2ljYWxXaWR0aCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Rml4ZWRUYWJsZUxheW91dC5jcHAKaW5kZXggZDUxYTZiM2NjMTU5Mzg1NjVkOGIzNmYzY2ZhMjdj
ZDY0YTNhYjdkOS4uZmU5N2M2MzZmMmFlODYxOGRjZTUyNmM2YmY3NTI0ZTZmNzRjMWVlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcApAQCAtODMs
MTEgKzgzLDExIEBAIGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiAK
ICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIDxjb2w+IGVsZW1lbnRzCiAgICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IG1fdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICBpbnQgbkVmZkNvbHMgPSBtX3Rh
YmxlLT5udW1FZmZDb2xzKCk7CisgICAgdW5zaWduZWQgbkVmZkNvbHMgPSBtX3RhYmxlLT5udW1F
ZmZDb2xzKCk7CiAgICAgbV93aWR0aC5yZXNpemUobkVmZkNvbHMpOwogICAgIG1fd2lkdGguZmls
bChMZW5ndGgoQXV0bykpOwogCi0gICAgaW50IGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4gPSAwOwor
ICAgIHVuc2lnbmVkIGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4gPSAwOwogICAgIExlbmd0aCBncnBX
aWR0aDsKICAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQtPmlzVGFibGVDb2woKSkgewogICAgICAg
ICBSZW5kZXJUYWJsZUNvbCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CkBAIC0xMDEs
OSArMTAxLDkgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCkKICAg
ICAgICAgICAgIGlmICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQogICAgICAgICAgICAg
ICAgIGVmZldpZHRoID0gdy52YWx1ZSgpOwogCi0gICAgICAgICAgICBpbnQgc3BhbiA9IGNvbC0+
c3BhbigpOworICAgICAgICAgICAgdW5zaWduZWQgc3BhbiA9IGNvbC0+c3BhbigpOwogICAgICAg
ICAgICAgd2hpbGUgKHNwYW4pIHsKLSAgICAgICAgICAgICAgICBpbnQgc3BhbkluQ3VycmVudEVm
ZmVjdGl2ZUNvbHVtbjsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcGFuSW5DdXJyZW50RWZm
ZWN0aXZlQ29sdW1uOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWZmZWN0aXZlQ29sdW1u
ID49IG5FZmZDb2xzKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdGFibGUtPmFwcGVuZENvbHVt
bihzcGFuKTsKICAgICAgICAgICAgICAgICAgICAgbkVmZkNvbHMrKzsKQEAgLTE0MSw3ICsxNDEs
NyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50KQogICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgZmlyc3Qgcm93IGluIGNhc2Ugc29tZSBhcmUgdW5zcGVjaWZpZWQuCiAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV90YWJsZS0+dG9wTm9uRW1wdHlTZWN0
aW9uKCk7CiAgICAgaWYgKHNlY3Rpb24pIHsKLSAgICAgICAgaW50IGNDb2wgPSAwOworICAgICAg
ICB1bnNpZ25lZCBjQ29sID0gMDsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdFJvdyA9IHNl
Y3Rpb24tPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGls
ZCgpOwogICAgICAgICB3aGlsZSAoY2hpbGQpIHsKQEAgLTE1MSwxMyArMTUxLDEzIEBAIGludCBG
aXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiAgICAgICAgICAgICAgICAgICAg
IGNlbGwtPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKICAgICAgICAgICAgICAg
ICBMZW5ndGggdyA9IGNlbGwtPnN0eWxlT3JDb2xMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAg
ICAgICBpbnQgc3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogICAgICAgICAgICAgICAgIGludCBlZmZXaWR0aCA9
IDA7CiAgICAgICAgICAgICAgICAgaWYgKHcuaXNGaXhlZCgpICYmIHcuaXNQb3NpdGl2ZSgpKQog
ICAgICAgICAgICAgICAgICAgICBlZmZXaWR0aCA9IHcudmFsdWUoKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpbnQgdXNlZFNwYW4gPSAwOwotICAgICAgICAgICAgICAgIGlu
dCBpID0gMDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkU3BhbiA9IDA7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZWRTcGFu
IDwgc3BhbiAmJiBjQ29sICsgaSA8IG5FZmZDb2xzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGVTcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGNDb2wgKyBpKTsKICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSBzZXQgaWYgbm8gY29sIGVsZW1lbnQgaGFzIGFscmVhZHkgc2V0IGl0
LgpAQCAtMjIzLDExICsyMjMsMTEgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5XaWR0aCwgTGF5b3UKIHZvaWQgRml4
ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKIHsKICAgICBpbnQgdGFibGVMb2dpY2FsV2lkdGggPSBt
X3RhYmxlLT5sb2dpY2FsV2lkdGgoKSAtIG1fdGFibGUtPmJvcmRlcnNQYWRkaW5nQW5kU3BhY2lu
Z0luUm93RGlyZWN0aW9uKCk7Ci0gICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29s
cygpOworICAgIHVuc2lnbmVkIG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAg
IFZlY3RvcjxpbnQ+IGNhbGNXaWR0aChuRWZmQ29scywgMCk7CiAKLSAgICBpbnQgbnVtQXV0byA9
IDA7Ci0gICAgaW50IGF1dG9TcGFuID0gMDsKKyAgICB1bnNpZ25lZCBudW1BdXRvID0gMDsKKyAg
ICB1bnNpZ25lZCBhdXRvU3BhbiA9IDA7CiAgICAgaW50IHRvdGFsRml4ZWRXaWR0aCA9IDA7CiAg
ICAgaW50IHRvdGFsUGVyY2VudFdpZHRoID0gMDsKICAgICBmbG9hdCB0b3RhbFBlcmNlbnQgPSAw
OwpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKICAg
ICAvLyBQZXJjZW50YWdlcyBhcmUgb2YgdGhlIHRhYmxlJ3Mgd2lkdGgsIHNvIGZvciBleGFtcGxl
CiAgICAgLy8gZm9yIGEgdGFibGUgd2lkdGggb2YgMTAwcHggd2l0aCBjb2x1bW5zICg0MHB4LCAx
MCUpLCB0aGUgMTAlIGNvbXB1dGUKICAgICAvLyB0byAxMHB4IGhlcmUsIGFuZCB3aWxsIHNjYWxl
IHVwIHRvIDIwcHggaW4gdGhlIGZpbmFsICg4MHB4LCAyMHB4KS4KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG5FZmZDb2xzOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVm
ZkNvbHM7IGkrKykgewogICAgICAgICBpZiAobV93aWR0aFtpXS5pc0ZpeGVkKCkpIHsKICAgICAg
ICAgICAgIGNhbGNXaWR0aFtpXSA9IG1fd2lkdGhbaV0udmFsdWUoKTsKICAgICAgICAgICAgIHRv
dGFsRml4ZWRXaWR0aCArPSBjYWxjV2lkdGhbaV07CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBG
aXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgLy8gRml4ZWQgd2lkdGhzIG9u
bHkgc2NhbGUgdXAKICAgICAgICAgICAgIGlmICh0b3RhbEZpeGVkV2lkdGggJiYgdG90YWxXaWR0
aCA8IHRhYmxlTG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgdG90YWxGaXhlZFdpZHRo
ID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkr
KykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc0ZpeGVkKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGNXaWR0aFtpXSA9IGNhbGNXaWR0aFtpXSAqIHRhYmxl
TG9naWNhbFdpZHRoIC8gdG90YWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFs
Rml4ZWRXaWR0aCArPSBjYWxjV2lkdGhbaV07CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBGaXhl
ZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRv
dGFsUGVyY2VudCkgewogICAgICAgICAgICAgICAgIHRvdGFsUGVyY2VudFdpZHRoID0gMDsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5FZmZDb2xzOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykgewogICAg
ICAgICAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc1BlcmNlbnQoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsY1dpZHRoW2ldID0gbV93aWR0aFtpXS5wZXJjZW50KCkgKiAodGFi
bGVMb2dpY2FsV2lkdGggLSB0b3RhbEZpeGVkV2lkdGgpIC8gdG90YWxQZXJjZW50OwogICAgICAg
ICAgICAgICAgICAgICAgICAgdG90YWxQZXJjZW50V2lkdGggKz0gY2FsY1dpZHRoW2ldOwpAQCAt
Mjc5LDExICsyNzksMTIgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRGl2aWRlIHRoZSByZW1haW5pbmcgd2lkdGgg
YW1vbmcgdGhlIGF1dG8gY29sdW1ucy4KKyAgICAgICAgQVNTRVJUKGF1dG9TcGFuID49IG51bUF1
dG8pOwogICAgICAgICBpbnQgcmVtYWluaW5nV2lkdGggPSB0YWJsZUxvZ2ljYWxXaWR0aCAtIHRv
dGFsRml4ZWRXaWR0aCAtIHRvdGFsUGVyY2VudFdpZHRoIC0gaHNwYWNpbmcgKiAoYXV0b1NwYW4g
LSBudW1BdXRvKTsKICAgICAgICAgaW50IGxhc3RBdXRvID0gMDsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuRWZmQ29sczsgaSsrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuRWZmQ29sczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc0F1dG8o
KSkgewotICAgICAgICAgICAgICAgIGludCBzcGFuID0gbV90YWJsZS0+c3Bhbk9mRWZmQ29sKGkp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBtX3RhYmxlLT5zcGFuT2ZFZmZDb2wo
aSk7CiAgICAgICAgICAgICAgICAgaW50IHcgPSByZW1haW5pbmdXaWR0aCAqIHNwYW4gLyBhdXRv
U3BhbjsKICAgICAgICAgICAgICAgICBjYWxjV2lkdGhbaV0gPSB3ICsgaHNwYWNpbmcgKiAoc3Bh
biAtIDEpOwogICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IHc7CkBAIC0yOTEsNiAr
MjkyLDcgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBsYXN0QXV0byA9IGk7CiAgICAgICAgICAgICAg
ICAgbnVtQXV0by0tOworICAgICAgICAgICAgICAgIEFTU0VSVChhdXRvU3BhbiA+PSBzcGFuKTsK
ICAgICAgICAgICAgICAgICBhdXRvU3BhbiAtPSBzcGFuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0zMTQsNyArMzE2LDcgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQog
ICAgIH0KICAgICAKICAgICBpbnQgcG9zID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5F
ZmZDb2xzOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkr
KykgewogICAgICAgICBtX3RhYmxlLT5jb2x1bW5Qb3NpdGlvbnMoKVtpXSA9IHBvczsKICAgICAg
ICAgcG9zICs9IGNhbGNXaWR0aFtpXSArIGhzcGFjaW5nOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDFjMmViY2IwMGIzZWFkOWE2MjNkMzZhZmQ2
Y2RhZGNlODc1NjRjYjMuLmM5NTYxMjUwNGZiYzI3ZmExNDA1YzRkM2RlOWJlMzA4Y2Q3YTkxZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtNjMzLDEyICs2
MzMsMTIgQEAgUmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6dG9wTm9uRW1wdHlTZWN0
aW9uKCkgY29uc3QKICAgICByZXR1cm4gc2VjdGlvbjsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6
c3BsaXRDb2x1bW4odW5zaWduZWQgcG9zaXRpb24sIGludCBmaXJzdFNwYW4pCit2b2lkIFJlbmRl
clRhYmxlOjpzcGxpdENvbHVtbih1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgZmlyc3RTcGFu
KQogewogICAgIC8vIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGNvbHVtblN0cnVjdAogICAgIHVuc2ln
bmVkIG9sZFNpemUgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIG1fY29sdW1ucy5ncm93KG9sZFNp
emUgKyAxKTsKLSAgICBpbnQgb2xkU3BhbiA9IG1fY29sdW1uc1twb3NpdGlvbl0uc3BhbjsKKyAg
ICB1bnNpZ25lZCBvbGRTcGFuID0gbV9jb2x1bW5zW3Bvc2l0aW9uXS5zcGFuOwogICAgIEFTU0VS
VChvbGRTcGFuID4gZmlyc3RTcGFuKTsKICAgICBtX2NvbHVtbnNbcG9zaXRpb25dLnNwYW4gPSBm
aXJzdFNwYW47CiAgICAgbWVtbW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9zaXRpb24gKyAxLCBt
X2NvbHVtbnMuZGF0YSgpICsgcG9zaXRpb24sIChvbGRTaXplIC0gcG9zaXRpb24pICogc2l6ZW9m
KENvbHVtblN0cnVjdCkpOwpAQCAtNjYxLDcgKzY2MSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnNw
bGl0Q29sdW1uKHVuc2lnbmVkIHBvc2l0aW9uLCBpbnQgZmlyc3RTcGFuKQogICAgIHNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjphcHBl
bmRDb2x1bW4oaW50IHNwYW4pCit2b2lkIFJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4odW5zaWdu
ZWQgc3BhbikKIHsKICAgICB1bnNpZ25lZCBwb3MgPSBtX2NvbHVtbnMuc2l6ZSgpOwogICAgIHVu
c2lnbmVkIG5ld1NpemUgPSBwb3MgKyAxOwpAQCAtNzA0LDEyICs3MDQsMTIgQEAgUmVuZGVyVGFi
bGVDb2wqIFJlbmRlclRhYmxlOjpuZXh0Q29sRWxlbWVudChSZW5kZXJUYWJsZUNvbCogY3VycmVu
dCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotUmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxl
Ojpjb2xFbGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkgY29u
c3QKK1JlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6Y29sRWxlbWVudCh1bnNpZ25lZCBjb2ws
IGJvb2wqIHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkgY29uc3QKIHsKICAgICBpZiAoIW1faGFz
Q29sRWxlbWVudHMpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlck9iamVjdCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7Ci0gICAgaW50IGNDb2wgPSAwOworICAgIHVuc2lnbmVkIGNDb2wgPSAw
OwogCiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgp
KQpAQCAtNzIzLDEwICs3MjMsMTEgQEAgUmVuZGVyVGFibGVDb2wqIFJlbmRlclRhYmxlOjpjb2xF
bGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSwgYm9vbCogZW5kRWRnZSkKIAogICAgIFJl
bmRlclRhYmxlQ29sKiBjb2xFbGVtID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CiAgICAgd2hp
bGUgKGNvbEVsZW0pIHsKLSAgICAgICAgaW50IHNwYW4gPSBjb2xFbGVtLT5zcGFuKCk7CisgICAg
ICAgIHVuc2lnbmVkIHNwYW4gPSBjb2xFbGVtLT5zcGFuKCk7CiAgICAgICAgIGlmICghY29sRWxl
bS0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnRDb2wgPSBjQ29sOwotICAg
ICAgICAgICAgaW50IGVuZENvbCA9IGNDb2wgKyBzcGFuIC0gMTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0Q29sID0gY0NvbDsKKyAgICAgICAgICAgIEFTU0VSVChzcGFuID49IDEpOworICAg
ICAgICAgICAgdW5zaWduZWQgZW5kQ29sID0gY0NvbCArIHNwYW4gLSAxOwogICAgICAgICAgICAg
Y0NvbCArPSBzcGFuOwogICAgICAgICAgICAgaWYgKGNDb2wgPiBjb2wpIHsKICAgICAgICAgICAg
ICAgICBpZiAoc3RhcnRFZGdlKQpAQCAtNzkyLDExICs3OTMsMTEgQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6cmVjYWxjU2VjdGlvbnMoKSBjb25zdAogICAgIH0KIAogICAgIC8vIHJlcGFpciBjb2x1bW4g
Y291bnQgKGFkZENoaWxkIGNhbiBncm93IGl0IHRvbyBtdWNoLCBiZWNhdXNlIGl0IGFsd2F5cyBh
ZGRzIGVsZW1lbnRzIHRvIHRoZSBsYXN0IHJvdyBvZiBhIHNlY3Rpb24pCi0gICAgaW50IG1heENv
bHMgPSAwOworICAgIHVuc2lnbmVkIG1heENvbHMgPSAwOwogICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAg
ICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGls
ZCk7Ci0gICAgICAgICAgICBpbnQgc2VjdGlvbkNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBzZWN0aW9uQ29scyA9IHNlY3Rpb24tPm51bUNvbHVtbnMo
KTsKICAgICAgICAgICAgIGlmIChzZWN0aW9uQ29scyA+IG1heENvbHMpCiAgICAgICAgICAgICAg
ICAgbWF4Q29scyA9IHNlY3Rpb25Db2xzOwogICAgICAgICB9CkBAIC0xMDgwLDE3ICsxMDgxLDE5
IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZShjb25zdCBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwpIGNvbnN0CiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCiAg
ICAgLy8gRmluZCB0aGUgc2VjdGlvbiBhbmQgcm93IHRvIGxvb2sgaW4KLSAgICBpbnQgciA9IGNl
bGwtPnJvdygpOworICAgIHVuc2lnbmVkIHIgPSBjZWxsLT5yb3coKTsKICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHNlY3Rpb24gPSAwOwotICAgIGludCByQWJvdmUgPSAwOworICAgIHVuc2lnbmVk
IHJBYm92ZSA9IDA7CiAgICAgaWYgKHIgPiAwKSB7CiAgICAgICAgIC8vIGNlbGwgaXMgbm90IGlu
IHRoZSBmaXJzdCByb3csIHNvIHVzZSB0aGUgYWJvdmUgcm93IGluIGl0cyBvd24gc2VjdGlvbgog
ICAgICAgICBzZWN0aW9uID0gY2VsbC0+c2VjdGlvbigpOwogICAgICAgICByQWJvdmUgPSByIC0g
MTsKICAgICB9IGVsc2UgewogICAgICAgICBzZWN0aW9uID0gc2VjdGlvbkFib3ZlKGNlbGwtPnNl
Y3Rpb24oKSwgU2tpcEVtcHR5U2VjdGlvbnMpOwotICAgICAgICBpZiAoc2VjdGlvbikKKyAgICAg
ICAgaWYgKHNlY3Rpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChzZWN0aW9uLT5udW1Sb3dzKCkp
OwogICAgICAgICAgICAgckFib3ZlID0gc2VjdGlvbi0+bnVtUm93cygpIC0gMTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIExvb2sgdXAgdGhlIGNlbGwgaW4gdGhlIHNlY3Rpb24ncyBncmlk
LCB3aGljaCByZXF1aXJlcyBlZmZlY3RpdmUgY29sIGluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oCmluZGV4IGNlMzE2OGU5MDNjNDc5NzI3MTA3ZWYyY2Y0NGZiMzFjMTY1
MTViM2EuLjJkZTkwMGNlYjRiOGVmNDE2OGI0NjE3ODllM2I1MjVjNTdjNDIwOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBSZW5kZXJUYWJsZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFi
bGUoKTsKIAotICAgIExheW91dFVuaXQgZ2V0Q29sdW1uUG9zKGludCBjb2wpIGNvbnN0IHsgcmV0
dXJuIG1fY29sdW1uUG9zW2NvbF07IH0KKyAgICBMYXlvdXRVbml0IGdldENvbHVtblBvcyh1bnNp
Z25lZCBjb2wpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUG9zW2NvbF07IH0KIAogICAgIGludCBo
Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1faFNwYWNpbmc7IH0KICAgICBpbnQgdkJv
cmRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZTcGFjaW5nOyB9CkBAIC0xNDYsMTAgKzE0
NiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHRh
YmxlIGhhcyBubyBub24tZW1wdHkgc2VjdGlvbnMuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0
b3BOb25FbXB0eVNlY3Rpb24oKSBjb25zdDsKIAotICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWdu
ZWQgcG9zaXRpb24sIGludCBmaXJzdFNwYW4pOwotICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBz
cGFuKTsKKyAgICB2b2lkIHNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBm
aXJzdFNwYW4pOworICAgIHZvaWQgYXBwZW5kQ29sdW1uKHVuc2lnbmVkIHNwYW4pOwogICAgIHVu
c2lnbmVkIG51bUVmZkNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9Ci0g
ICAgaW50IHNwYW5PZkVmZkNvbChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNb
ZWZmQ29sXS5zcGFuOyB9CisgICAgdW5zaWduZWQgc3Bhbk9mRWZmQ29sKHVuc2lnbmVkIGVmZkNv
bCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zW2VmZkNvbF0uc3BhbjsgfQogICAgIAogICAgIHVu
c2lnbmVkIGNvbFRvRWZmQ29sKHVuc2lnbmVkIGNvbHVtbikgY29uc3QKICAgICB7CkBAIC0xNjAs
MTAgKzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBlZmZDb2x1bW47CiAgICAgfQog
ICAgIAotICAgIGludCBlZmZDb2xUb0NvbChpbnQgZWZmQ29sKSBjb25zdAorICAgIHVuc2lnbmVk
IGVmZkNvbFRvQ29sKHVuc2lnbmVkIGVmZkNvbCkgY29uc3QKICAgICB7Ci0gICAgICAgIGludCBj
ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlZmZDb2w7IGkrKykKKyAgICAgICAg
dW5zaWduZWQgYyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZmZDb2w7
IGkrKykKICAgICAgICAgICAgIGMgKz0gbV9jb2x1bW5zW2ldLnNwYW47CiAgICAgICAgIHJldHVy
biBjOwogICAgIH0KQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAo
Y29sbGFwc2VCb3JkZXJzKCkgPyAwIDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsg
KG51bUVmZkNvbHMoKSArIDEpICogaEJvcmRlclNwYWNpbmcoKSkpOwogICAgIH0KIAotICAgIFJl
bmRlclRhYmxlQ29sKiBjb2xFbGVtZW50KGludCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJv
b2wqIGVuZEVkZ2UgPSAwKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZUNvbCogY29sRWxlbWVudCh1
bnNpZ25lZCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJvb2wqIGVuZEVkZ2UgPSAwKSBjb25z
dDsKICAgICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbEVsZW1lbnQoUmVuZGVyVGFibGVDb2wqIGN1
cnJlbnQpIGNvbnN0OwogCiAgICAgYm9vbCBuZWVkc1NlY3Rpb25SZWNhbGMoKSBjb25zdCB7IHJl
dHVybiBtX25lZWRzU2VjdGlvblJlY2FsYzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCBiNTRmZjI1OWFkNDliNjIyMTJiOTExMDc2MGU0MDNj
ZjRmYzU4ZDExLi4yMDQxYzE5N2U3Y2I1OTMwMDM5NWMxNGQ1NmJlNjBiYTkyNzIxNWE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNjIsNyAr
NjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICAgICAg
cmVjYWxjU2VjdGlvbi0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CiB9CiAKLWludCBSZW5kZXJUYWJs
ZUNlbGw6OmNvbFNwYW4oKSBjb25zdAordW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpjb2xTcGFu
KCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1faGFzQXNzb2NpYXRlZFRhYmxlQ2VsbEVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gMTsKQEAgLTcwLDcgKzcwLDcgQEAgaW50IFJlbmRlclRh
YmxlQ2VsbDo6Y29sU3BhbigpIGNvbnN0CiAgICAgcmV0dXJuIHRvSFRNTFRhYmxlQ2VsbEVsZW1l
bnQobm9kZSgpKS0+Y29sU3BhbigpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpyb3dTcGFu
KCkgY29uc3QKK3Vuc2lnbmVkIFJlbmRlclRhYmxlQ2VsbDo6cm93U3BhbigpIGNvbnN0CiB7CiAg
ICAgaWYgKFVOTElLRUxZKCFtX2hhc0Fzc29jaWF0ZWRUYWJsZUNlbGxFbGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIDE7CkBAIC05NiwxMCArOTYsMTAgQEAgTGVuZ3RoIFJlbmRlclRhYmxlQ2VsbDo6
c3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB3OwogCiAgICAg
aWYgKFJlbmRlclRhYmxlQ29sKiB0YWJsZUNvbCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoY29sKCkp
KSB7Ci0gICAgICAgIGludCBjb2xTcGFuQ291bnQgPSBjb2xTcGFuKCk7CisgICAgICAgIHVuc2ln
bmVkIGNvbFNwYW5Db3VudCA9IGNvbFNwYW4oKTsKIAogICAgICAgICBMZW5ndGggY29sV2lkdGhT
dW0gPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjb2xT
cGFuQ291bnQ7IGkrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGNvbFNw
YW5Db3VudDsgaSsrKSB7CiAgICAgICAgICAgICBMZW5ndGggY29sV2lkdGggPSB0YWJsZUNvbC0+
c3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CiAKICAgICAgICAgICAgIC8vIFBlcmNlbnRhZ2UgdmFs
dWUgc2hvdWxkIGJlIHJldHVybmVkIG9ubHkgZm9yIGNvbFNwYW4gPT0gMS4KQEAgLTg2Niw3ICs4
NjYsNyBAQCBwdWJsaWM6CiAKICAgICBDb2xsYXBzZWRCb3JkZXIqIG5leHRCb3JkZXIoKQogICAg
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NvdW50OyBpKyspIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY291bnQ7IGkrKykgewogICAgICAgICAgICAgaWYg
KG1fYm9yZGVyc1tpXS5ib3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBtX2JvcmRlcnNbaV0uc2hvdWxk
UGFpbnQpIHsKICAgICAgICAgICAgICAgICBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gJm1fYm9yZGVyc1tpXTsKQEAgLTg3Nyw3ICs4Nzcs
NyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIENvbGxhcHNlZEJvcmRlciBtX2JvcmRlcnNb
NF07Ci0gICAgaW50IG1fY291bnQ7CisgICAgdW5zaWduZWQgbV9jb3VudDsKIH07CiAKIHN0YXRp
YyB2b2lkIGFkZEJvcmRlclN0eWxlKFJlbmRlclRhYmxlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZXMm
IGJvcmRlclZhbHVlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
aAppbmRleCA1ZjA1ZTgxNDZmYmY3Mjc5NTA4NDM2NTFjM2ExYjNlZTQwZTEwNzkxLi5lYTk3N2Mx
MWFlNzU2OGVlYjBlMDk1YTgzYjA1ODExNDcwM2I0ODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC00Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICBp
bnQgY2VsbEluZGV4KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgc2V0Q2VsbEluZGV4
KGludCkgeyB9CiAKLSAgICBpbnQgY29sU3BhbigpIGNvbnN0OwotICAgIGludCByb3dTcGFuKCkg
Y29uc3Q7CisgICAgdW5zaWduZWQgY29sU3BhbigpIGNvbnN0OworICAgIHVuc2lnbmVkIHJvd1Nw
YW4oKSBjb25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIEhUTUxUYWJsZUNlbGxFbGVtZW50Lgog
ICAgIHZvaWQgY29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IGU0MDBhNTVhY2ZjODdmNmE4MDdjN2Y5OGI4
MDg5M2YzY2NkYmM4ZGEuLjY0OWFhYWFiYmQyYTM3MTYzODE5ZWFlNWQyNjc1ODZmN2FlY2FhNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcApAQCAtNTgs
NyArNTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ29sOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZAogCiB2b2lkIFJlbmRlclRhYmxlQ29s
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgaW50IG9sZFNwYW4gPSBtX3NwYW47CisgICAg
dW5zaWduZWQgb2xkU3BhbiA9IG1fc3BhbjsKICAgICBOb2RlKiBuID0gbm9kZSgpOwogICAgIGlm
IChuICYmIChuLT5oYXNUYWdOYW1lKGNvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShjb2xncm91cFRh
ZykpKSB7CiAgICAgICAgIEhUTUxUYWJsZUNvbEVsZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlQ29sRWxlbWVudCo+KG4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDb2wuaAppbmRleCA1ZDkzOWM0MDc4NDFlNzc3N2I1MGYzODUyOTMwNDQyY2VhYjdiOTY0Li43
NmMyOGEzYTU3YmZmY2YzYzZhNDRmMmQ2MDhhZGZkYmE2ZTg2OGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaApAQCAtNDEsOCArNDEsOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAotICAg
IGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9Ci0gICAgdm9pZCBzZXRTcGFuKGlu
dCBzcGFuKSB7IG1fc3BhbiA9IHNwYW47IH0KKyAgICB1bnNpZ25lZCBzcGFuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFuOyB9CisgICAgdm9pZCBzZXRTcGFuKHVuc2lnbmVkIHNwYW4pIHsgbV9zcGFu
ID0gc3BhbjsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC02NCw3ICs2NCw3
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CiAKICAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKLSAgICBpbnQgbV9zcGFuOworICAgIHVuc2ln
bmVkIG1fc3BhbjsKIH07CiAKIGlubGluZSBSZW5kZXJUYWJsZUNvbCogdG9SZW5kZXJUYWJsZUNv
bChSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggMTBlOTY0N2QyYjZhNDczNGZhODg0MzcyNTk0YThm
ODU5MDQxYjg2NC4uZGJmNTE4ZWZkZTQ5YTc0ZjZkNWFmNTFhZjk1ZGQyNDc0NmE3ODM1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAg
LTE5Myw4ICsxOTMsOCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJU
YWJsZUNlbGwqIGNlbGwsIFJlbmRlclRhYmxlUm93KiByb3cpCiAgICAgaWYgKG5lZWRzQ2VsbFJl
Y2FsYygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgclNwYW4gPSBjZWxsLT5yb3dTcGFu
KCk7Ci0gICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOworICAgIHVuc2lnbmVkIHJTcGFu
ID0gY2VsbC0+cm93U3BhbigpOworICAgIHVuc2lnbmVkIGNTcGFuID0gY2VsbC0+Y29sU3Bhbigp
OwogICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1uU3RydWN0PiYgY29sdW1ucyA9IHRhYmxl
KCktPmNvbHVtbnMoKTsKICAgICB1bnNpZ25lZCBuQ29scyA9IGNvbHVtbnMuc2l6ZSgpOwogICAg
IC8vIGFkZENlbGwgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIG1fY1JvdyBoYXMgYmVlbiBp
bmNyZW1lbnRlZC4KQEAgLTI0MSwxNiArMjQxLDE2IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyVGFibGVSb3cqIHJvdykKICAg
ICAvLyB0ZWxsIHRoZSBjZWxsIHdoZXJlIGl0IGlzCiAgICAgYm9vbCBpbkNvbFNwYW4gPSBmYWxz
ZTsKICAgICB3aGlsZSAoY1NwYW4pIHsKLSAgICAgICAgaW50IGN1cnJlbnRTcGFuOworICAgICAg
ICB1bnNpZ25lZCBjdXJyZW50U3BhbjsKICAgICAgICAgaWYgKG1fY0NvbCA+PSBuQ29scykgewog
ICAgICAgICAgICAgdGFibGUoKS0+YXBwZW5kQ29sdW1uKGNTcGFuKTsKICAgICAgICAgICAgIGN1
cnJlbnRTcGFuID0gY1NwYW47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY1Nw
YW4gPCAoaW50KWNvbHVtbnNbbV9jQ29sXS5zcGFuKQorICAgICAgICAgICAgaWYgKGNTcGFuIDwg
Y29sdW1uc1ttX2NDb2xdLnNwYW4pCiAgICAgICAgICAgICAgICAgdGFibGUoKS0+c3BsaXRDb2x1
bW4obV9jQ29sLCBjU3Bhbik7CiAgICAgICAgICAgICBjdXJyZW50U3BhbiA9IGNvbHVtbnNbbV9j
Q29sXS5zcGFuOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgclNwYW47
IHIrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwOyByIDwgclNwYW47IHIrKykgewog
ICAgICAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IGNlbGxBdChpbnNlcnRpb25Sb3cgKyByLCBtX2ND
b2wpOwogICAgICAgICAgICAgQVNTRVJUKGNlbGwpOwogICAgICAgICAgICAgYy5jZWxscy5hcHBl
bmQoY2VsbCk7CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNl
dENlbGxMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50Lmlu
Q29sU3BhbikKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB1bnNpZ25lZCBl
bmRDb2wgPSBqOwotICAgICAgICAgICAgaW50IGNzcGFuID0gY2VsbC0+Y29sU3BhbigpOworICAg
ICAgICAgICAgdW5zaWduZWQgY3NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAgICAgICB3
aGlsZSAoY3NwYW4gJiYgZW5kQ29sIDwgY29scykgewogICAgICAgICAgICAgICAgIEFTU0VSVChl
bmRDb2wgPCB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBjc3Bh
biAtPSB0YWJsZSgpLT5jb2x1bW5zKClbZW5kQ29sXS5zcGFuOwpAQCAtNDM4LDcgKzQzOCw3IEBA
IExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKExheW91dFVuaXQgdG9B
ZGQpCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIAogICAgIExheW91dFVuaXQgckhlaWdo
dDsKLSAgICBpbnQgcmluZHg7CisgICAgdW5zaWduZWQgcmluZHg7CiAgICAgdW5zaWduZWQgdG90
YWxSb3dzID0gbV9ncmlkLnNpemUoKTsKIAogICAgIC8vIFNldCB0aGUgd2lkdGggb2Ygb3VyIHNl
Y3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCkBAIC01MDksNyAr
NTA5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0
VW5pdCB0b0FkZCkKIAogICAgIExheW91dFVuaXQgaHNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVy
U3BhY2luZygpOwogICAgIExheW91dFVuaXQgdnNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3Bh
Y2luZygpOwotICAgIExheW91dFVuaXQgbkVmZkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7
CisgICAgdW5zaWduZWQgbkVmZkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAKICAgICBM
YXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBMYXlvdXRTaXpl
KHgoKSwgeSgpKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKQEAg
LTUyMiw3ICs1MjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93
cyhMYXlvdXRVbml0IHRvQWRkKQogICAgICAgICAgICAgcm93UmVuZGVyZXItPnVwZGF0ZUxheWVy
VHJhbnNmb3JtKCk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IG5F
ZmZDb2xzOyBjKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IG5FZmZDb2xz
OyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gY2VsbEF0KHIsIGMpOwogICAg
ICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFyeUNlbGwoKTsKIApAQCAt
Njc5LDcgKzY3OSw3IEBAIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dz
KExheW91dFVuaXQgdG9BZGQpCiAjZW5kaWYKICAgICAvLyBOb3cgdGhhdCBvdXIgaGVpZ2h0IGhh
cyBiZWVuIGRldGVybWluZWQsIGFkZCBpbiBvdmVyZmxvdyBmcm9tIGNlbGxzLgogICAgIGZvciAo
dW5zaWduZWQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAgICAgICBmb3IgKGludCBj
ID0gMDsgYyA8IG5FZmZDb2xzOyBjKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gMDsg
YyA8IG5FZmZDb2xzOyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gY2VsbEF0
KHIsIGMpOwogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3MucHJpbWFyeUNl
bGwoKTsKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjcy5pbkNvbFNwYW4pCkBAIC03MTAsNyAr
NzEwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoTGF5b3V0
VW5pdCB0b0FkZCkKIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckJlZm9yZSgpIGNvbnN0CiB7Ci0gICAgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVm
ZkNvbHMoKTsKKyAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7
CiAgICAgaWYgKCFtX2dyaWQuc2l6ZSgpIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC03MjksNyArNzI5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNh
bGNPdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CiAgICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lk
dGgoKTsKIAogICAgIGJvb2wgYWxsSGlkZGVuID0gdHJ1ZTsKLSAgICBmb3IgKGludCBjID0gMDsg
YyA8IHRvdGFsQ29sczsgYysrKSB7CisgICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IHRvdGFs
Q29sczsgYysrKSB7CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQo
MCwgYyk7CiAgICAgICAgIGlmIChjdXJyZW50LmluQ29sU3BhbiB8fCAhY3VycmVudC5oYXNDZWxs
cygpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03NjEsNyArNzYxLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJlZm9yZSgpIGNvbnN0CiAKIExh
eW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0
CiB7Ci0gICAgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKKyAgICB1bnNp
Z25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAgICAgaWYgKCFtX2dyaWQu
c2l6ZSgpIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC03ODAsNyArNzgw
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckFmdGVy
KCkgY29uc3QKICAgICAgICAgYm9yZGVyV2lkdGggPSByYi53aWR0aCgpOwogCiAgICAgYm9vbCBh
bGxIaWRkZW4gPSB0cnVlOwotICAgIGZvciAoaW50IGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKysp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsKICAgICAg
ICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChtX2dyaWQuc2l6ZSgpIC0gMSwg
Yyk7CiAgICAgICAgIGlmIChjdXJyZW50LmluQ29sU3BhbiB8fCAhY3VycmVudC5oYXNDZWxscygp
KQogICAgICAgICAgICAgY29udGludWU7CkBAIC04MTIsNyArODEyLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckFmdGVyKCkgY29uc3QKIAogTGF5b3V0
VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclN0YXJ0KCkgY29uc3QKIHsK
LSAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworICAgIHVuc2lnbmVk
IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICBpZiAoIW1fZ3JpZC5zaXpl
KCkgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTg1Niw3ICs4NTYsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyU3RhcnQoKSBj
b25zdAogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyRW5k
KCkgY29uc3QKIHsKLSAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwor
ICAgIHVuc2lnbmVkIHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICBpZiAo
IW1fZ3JpZC5zaXplKCkgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEx
MDYsOSArMTEwNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgc3RkOjpzb3J0KGNlbGxzLmJlZ2luKCksIGNlbGxzLmVuZCgpLCBj
b21wYXJlQ2VsbFBvc2l0aW9uc1dpdGhPdmVyZmxvd2luZ0NlbGxzKTsKIAotICAgICAgICAgICAg
aW50IHNpemUgPSBjZWxscy5zaXplKCk7Ci0gICAgICAgICAgICAvLyBQYWludCB0aGUgY2VsbHMu
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjZWxscy5zaXplKCk7ICsraSkKICAgICAgICAgICAg
ICAgICBwYWludENlbGwoY2VsbHNbaV0sIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTE4NCw3ICsxMTgyLDcgQEAgdW5zaWduZWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpudW1Db2x1bW5zKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0ICsgMTsKIH0KIAotdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQordm9pZCBSZW5kZXJU
YWJsZVNlY3Rpb246OmFwcGVuZENvbHVtbih1bnNpZ25lZCBwb3MpCiB7CiAgICAgQVNTRVJUKCFt
X25lZWRzQ2VsbFJlY2FsYyk7CiAKQEAgLTExOTIsNyArMTE5MCw3IEBAIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjphcHBlbmRDb2x1bW4oaW50IHBvcykKICAgICAgICAgbV9ncmlkW3Jvd10ucm93
LnJlc2l6ZShwb3MgKyAxKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29s
dW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNw
bGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgZmlyc3QpCiB7CiAgICAgQVNTRVJUKCFt
X25lZWRzQ2VsbFJlY2FsYyk7CiAKQEAgLTEyMDUsNyArMTIwMyw4IEBAIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpzcGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIGludCBmaXJzdCkKICAgICAgICAg
ICAgIHJbcG9zICsgMV0uY2VsbHMuYXBwZW5kKHJbcG9zXS5jZWxscyk7CiAgICAgICAgICAgICBS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSByW3Bvc10ucHJpbWFyeUNlbGwoKTsKICAgICAgICAgICAg
IEFTU0VSVChjZWxsKTsKLSAgICAgICAgICAgIGludCBjb2xsZWZ0ID0gY2VsbC0+Y29sU3Bhbigp
IC0gcltwb3NdLmluQ29sU3BhbjsKKyAgICAgICAgICAgIEFTU0VSVChjZWxsLT5jb2xTcGFuKCkg
Pj0gKHJbcG9zXS5pbkNvbFNwYW4gPyAxIDogMCkpOworICAgICAgICAgICAgdW5zaWduZWQgY29s
bGVmdCA9IGNlbGwtPmNvbFNwYW4oKSAtIHJbcG9zXS5pbkNvbFNwYW47CiAgICAgICAgICAgICBp
ZiAoZmlyc3QgPiBjb2xsZWZ0KQogICAgICAgICAgICAgICByW3BvcyArIDFdLmluQ29sU3BhbiA9
IDA7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMjc5LDcgKzEyNzgsOCBAQCBib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bAogICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBmb3IgKGludCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnQuY2VsbHMuc2l6ZSgpIDsg
aTsgKSB7CisgICAgICAgIC0taTsKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3Vy
cmVudC5jZWxsc1tpXTsKICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlRm9yQ2hpbGQoY2VsbCwgYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCBjNTQ0OWQ3YWI0NDVk
ZmZjNTc0YjNjZTk2YTkyNmU1MzUyNmRkNzFhLi44NmYzNDM0Mzc3MDZkYmYyNTBkYzA1MWIwNjBh
NWJlMmZkOWZjMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5oCkBAIC05MCwxNiArOTAsMTYgQEAgcHVibGljOgogICAgICAgICBMZW5ndGggbG9n
aWNhbEhlaWdodDsKICAgICB9OwogCi0gICAgQ2VsbFN0cnVjdCYgY2VsbEF0KGludCByb3csICBp
bnQgY29sKSB7IHJldHVybiBtX2dyaWRbcm93XS5yb3dbY29sXTsgfQotICAgIGNvbnN0IENlbGxT
dHJ1Y3QmIGNlbGxBdChpbnQgcm93LCBpbnQgY29sKSBjb25zdCB7IHJldHVybiBtX2dyaWRbcm93
XS5yb3dbY29sXTsgfQotICAgIFJlbmRlclRhYmxlQ2VsbCogcHJpbWFyeUNlbGxBdChpbnQgcm93
LCBpbnQgY29sKQorICAgIENlbGxTdHJ1Y3QmIGNlbGxBdCh1bnNpZ25lZCByb3csICB1bnNpZ25l
ZCBjb2wpIHsgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xdOyB9CisgICAgY29uc3QgQ2VsbFN0
cnVjdCYgY2VsbEF0KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sKSBjb25zdCB7IHJldHVybiBt
X2dyaWRbcm93XS5yb3dbY29sXTsgfQorICAgIFJlbmRlclRhYmxlQ2VsbCogcHJpbWFyeUNlbGxB
dCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbCkKICAgICB7CiAgICAgICAgIENlbGxTdHJ1Y3Qm
IGMgPSBtX2dyaWRbcm93XS5yb3dbY29sXTsKICAgICAgICAgcmV0dXJuIGMucHJpbWFyeUNlbGwo
KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZENvbHVtbihpbnQgcG9zKTsKLSAgICB2b2lkIHNw
bGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgaW50IGZpcnN0KTsKKyAgICB2b2lkIGFwcGVuZENvbHVt
bih1bnNpZ25lZCBwb3MpOworICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9zLCB1bnNp
Z25lZCBmaXJzdCk7CiAKICAgICBMYXlvdXRVbml0IGNhbGNPdXRlckJvcmRlckJlZm9yZSgpIGNv
bnN0OwogICAgIExheW91dFVuaXQgY2FsY091dGVyQm9yZGVyQWZ0ZXIoKSBjb25zdDsKQEAgLTEy
NCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0NlbGxSZWNhbGMoKSBjb25zdCB7
IHJldHVybiBtX25lZWRzQ2VsbFJlY2FsYzsgfQogICAgIHZvaWQgc2V0TmVlZHNDZWxsUmVjYWxj
KCk7CiAKLSAgICBMYXlvdXRVbml0IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIG1fZ3Jp
ZFtyb3ddLmJhc2VsaW5lOyB9CisgICAgTGF5b3V0VW5pdCBnZXRCYXNlbGluZSh1bnNpZ25lZCBy
b3cpIHsgcmV0dXJuIG1fZ3JpZFtyb3ddLmJhc2VsaW5lOyB9CiAKICAgICB2b2lkIHJvd0xvZ2lj
YWxIZWlnaHRDaGFuZ2VkKHVuc2lnbmVkIHJvd0luZGV4KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>