<?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>24108</bug_id>
          
          <creation_ts>2009-02-23 15:20:08 -0800</creation_ts>
          <short_desc>Adopt new text checking API for spelling and grammar checking in SnowLeopard</short_desc>
          <delta_ts>2009-03-06 12:11:13 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Garcia">justin.garcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddavidso</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110650</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-23 15:20:08 -0800</bug_when>
    <thetext>In place of current, separate calls for spelling and grammar checking, it is now possible to make a single call that will do both, more efficiently and more correctly.  This will be necessary for us to maintain consistent spelling and grammar checking between Mail and TextEdit in Snow Leopard.

&lt;rdar://problem/6088051&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111749</commentid>
    <comment_count>1</comment_count>
      <attachid>28153</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-01 15:08:03 -0800</bug_when>
    <thetext>Created attachment 28153
doug&apos;s patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112271</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-04 13:24:27 -0800</bug_when>
    <thetext>in Frame::respondToChangedSelection why did you remove the call to:

editor()-&gt;markMisspellings(oldAdjacentWords);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112274</commentid>
    <comment_count>3</comment_count>
    <who name="Douglas Davidson">ddavidso</who>
    <bug_when>2009-03-04 13:40:40 -0800</bug_when>
    <thetext>The idea here is to replace the two calls to markMisspellings and markBadGrammar with a single call to markMisspellingsAndBadGrammar, with a bool markGrammar argument to indicate whether it should mark spelling only or spelling and grammar.  The reason for this is that the new text checking will check both at once, and should check both at once wherever possible to save a round trip to the checker.  

There are two cases in Frame::respondToChangedSelection.  If grammar checking is disabled (the else clause) then the markGrammar argument is always false.   If grammar checking is enabled, then we always want to check spelling, but we also want to check grammar if and only if the new selection is in a different sentence from the old one.  Before this change, that was done by calling markBadGrammar only if oldSelectedSentence != newSelectedSentence.  After the change, that is done by making the markGrammar argument true only if oldSelectedSentence != newSelectedSentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112275</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-04 13:43:20 -0800</bug_when>
    <thetext>Oops I didn&apos;t see the else clause my mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112278</commentid>
    <comment_count>5</comment_count>
      <attachid>28153</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-04 13:52:12 -0800</bug_when>
    <thetext>Comment on attachment 28153
doug&apos;s patch

looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112642</commentid>
    <comment_count>6</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-06 12:11:13 -0800</bug_when>
    <thetext>r41496</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28153</attachid>
            <date>2009-03-01 15:08:03 -0800</date>
            <delta_ts>2009-03-04 13:52:12 -0800</delta_ts>
            <desc>doug&apos;s patch</desc>
            <filename>6088051.0226.patch</filename>
            <type>text/plain</type>
            <size>32379</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTI2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDItMjYgIERvdWdsYXMgUi4gRGF2aWRzb24gIDxkZGF2aWRz
b0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXBkYXRlIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nIHRvIHVzZSB0aGUgbmV3
IGNvbWJpbmVkIHRleHQgCisgICAgICAgIGNoZWNraW5nICh3aXRoIGF1dG9tYXRpYyBsYW5ndWFn
ZSBpZGVudGlmaWNhdGlvbikgb24gU25vdyBMZW9wYXJkLiAKKyAgICAgICAgVGVzdGVkIG1hbnVh
bGx5IGluIE1haWwgYW5kIFNhZmFyaTsgYXV0b21hdGVkIHRlc3RzIHRvIGNvbWUgbGF0ZXIuIAor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDEwOAor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFySW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpndWVzc2Vz
Rm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6
Y2hlY2tTcGVsbGluZ0FuZEdyYW1tYXJPZlBhcmFncmFwaCk6CisgICAgICAgICogcGFnZS9FZGl0
b3JDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9D
b250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6cG9wdWxhdGUp
OgorCiAyMDA5LTAyLTI1ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+IGFuZCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlh
dHQuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNDEyNjYpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1MSw2ICsxNTUxLDEzMCBAQCBzdGF0
aWMgU3RyaW5nIGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlCiAgICAgCiAjZW5kaWYgLyogbm90
IEJVSUxESU5HX09OX1RJR0VSICovCiAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCitzdGF0
aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFySW5SYW5nZShFZGl0b3JD
bGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBib29sIGNoZWNrR3JhbW1hciwgYm9v
bCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWls
JiBvdXRHcmFtbWFyRGV0YWlsKQoreworICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwor
ICAgIEFTU0VSVF9BUkcoc2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlKTsKKyAgICAKKyAgICBTdHJp
bmcgZmlyc3RGb3VuZEl0ZW07CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOworICAgIFN0cmlu
ZyBiYWRHcmFtbWFyUGhyYXNlOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIAorICAg
IC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3
ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCisgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7Cisg
ICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IDA7CisgICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlv
biA9IC0xOworICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKKyAgICBvdXRHcmFtbWFy
RGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlw
dGlvbiA9ICIiOworICAgIAorICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29t
cGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11
Y2ggY29udGV4dC4KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0
aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNl
YXJjaCByYW5nZSwKKyAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMg
aW4gdGhpcyBhcmVhLgorICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBzZWFyY2hS
YW5nZS0+Y2xvbmVSYW5nZShlYyk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCks
IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIGlu
dCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhS
YW5nZS5nZXQoKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFn
cmFwaChzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgCisgICAgUmVmUHRyPFJh
bmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRD
b250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpbnQgc2VhcmNoUmFuZ2VTdGFy
dE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5nZXQoKSk7
CisgICAgaW50IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKKyAgICAKKyAgICBib29sIGZpcnN0
SXRlcmF0aW9uID0gdHJ1ZTsKKyAgICBib29sIGxhc3RJdGVyYXRpb24gPSBmYWxzZTsKKyAgICB3
aGlsZSAodG90YWxMZW5ndGhQcm9jZXNzZWQgPCB0b3RhbFJhbmdlTGVuZ3RoKSB7CisgICAgICAg
IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VhcmNoIHJhbmdlIGJ5IHBhcmFncmFwaHMsIGNoZWNr
aW5nIGVhY2ggb25lIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hci4KKyAgICAgICAgaW50IGN1cnJl
bnRMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgp
KTsKKyAgICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8gc2Vh
cmNoUmFuZ2VTdGFydE9mZnNldCA6IDA7CisgICAgICAgIGludCBjdXJyZW50RW5kT2Zmc2V0ID0g
Y3VycmVudExlbmd0aDsKKyAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBzZWFyY2hSYW5nZS0+ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAg
ICAgICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2Yg
dGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCisg
ICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhp
cyBhcmVhLgorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRPZmZzZXRBc1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgp
LCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzZWFyY2hSYW5nZS0+ZW5kUG9zaXRp
b24oKSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChlbmRPZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGxhc3RJdGVyYXRp
b24gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBj
dXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nID0g
cGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChwYXJhZ3Jh
cGhTdHJpbmcubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZEdyYW1t
YXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnQgc3BlbGxpbmdMb2NhdGlvbiA9IDA7Cisg
ICAgICAgICAgICAgICAgaW50IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IDA7CisgICAgICAgICAg
ICAgICAgaW50IGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgZ3JhbW1hckRldGFpbEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgICAgICAgICAg
ICAgIGNsaWVudC0+Y2hlY2tTcGVsbGluZ0FuZEdyYW1tYXJPZlBhcmFncmFwaChwYXJhZ3JhcGhT
dHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNrR3JhbW1h
ciwgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+cmVzdWx0VHlwZSA9PSAxICYmIHJlc3VsdC0+bG9j
YXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQt
Pmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5n
LnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgIT0gMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaGVja0dyYW1tYXIgJiYgcmVzdWx0LT5yZXN1bHRUeXBlID09IDIgJiYgcmVzdWx0LT5sb2Nh
dGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVu
Z3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBncmFtbWFy
IHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUgYSBzcGVsbGluZyByZXN1bHQgYWZ0
ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJlZ2lucyBidXQgYmVmb3JlIHRoZSBm
aXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBpZiB3ZSBmaW5kIGEgc2Vjb25kIGdy
YW1tYXIgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
cmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRl
dGFpbC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAm
JiByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiArIGRldGFpbC0+bGVuZ3RoIDw9
IGN1cnJlbnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1tYXIgfHwgcmVzdWx0LT5sb2NhdGlvbiAr
IGRldGFpbC0+bG9jYXRpb24gPCBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxJbmRleCA9IGo7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9IHJlc3VsdC0+bG9j
YXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZEdyYW1tYXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3Vu
ZEdyYW1tYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlTG9j
YXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dEdyYW1tYXJEZXRhaWwgPSByZXN1bHQtPmRldGFpbHNbZ3JhbW1hckRldGFpbEluZGV4XTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3Ry
aW5nLnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkgIT0g
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlz
RW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8
fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJl
bnRTdGFydE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRB
c1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
LT5kb2N1bWVudCgpLCBzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zm
c2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0SXNT
cGVsbGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQg
PSBzcGVsbGluZ09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBt
aXNzcGVsbGVkV29yZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjaGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1h
clBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7CisgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vz
c2VkICsgY3VycmVudExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBzdGFydE9mTmV4dFBh
cmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+ZW5kUG9zaXRpb24oKSkpOworICAgICAgICBzZXRFbmQo
cGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpKTsKKyAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKyAgICAgICAg
dG90YWxMZW5ndGhQcm9jZXNzZWQgKz0gY3VycmVudExlbmd0aDsKKyAgICB9CisgICAgcmV0dXJu
IGZpcnN0Rm91bmRJdGVtOworfQorCisjZW5kaWYKKwogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtMTYxOCw2ICsxNzQyLDIzIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm8KICAgICBpbnQgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwID0g
c3BlbGxpbmdTZWFyY2hSYW5nZS0+ZW5kT2Zmc2V0KGVjKTsKICAgICAKICAgICBpbnQgbWlzc3Bl
bGxpbmdPZmZzZXQ7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBSZWZQdHI8UmFuZ2U+
IGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMp
OworICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFz
ZTsKKyAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldCA9IDA7CisgICAgYm9vbCBpc1NwZWxsaW5n
ID0gdHJ1ZTsKKyAgICBpbnQgZm91bmRPZmZzZXQgPSAwOworICAgIEdyYW1tYXJEZXRhaWwgZ3Jh
bW1hckRldGFpbDsKKyAgICBTdHJpbmcgZm91bmRJdGVtID0gZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1t
YXJEZXRhaWwpOworICAgIGlmIChpc1NwZWxsaW5nKSB7CisgICAgICAgIG1pc3NwZWxsZWRXb3Jk
ID0gZm91bmRJdGVtOworICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBmb3VuZEl0ZW07CisgICAg
ICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKKyAgICB9CisjZWxzZQogICAg
IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNl
KTsKICAgICAKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKQEAgLTE2MzgsNiArMTc3OSw3
IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm8KICAgICBpZiAoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBmaW5k
Rmlyc3RCYWRHcmFtbWFySW5SYW5nZShjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlLmdldCgp
LCBncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYKKyNl
bmRpZgogICAgIAogICAgIC8vIElmIHdlIGZvdW5kIG5laXRoZXIgYmFkIGdyYW1tYXIgbm9yIGEg
bWlzc3BlbGxlZCB3b3JkLCB3cmFwIGFuZCB0cnkgYWdhaW4gKGJ1dCBkb24ndCBib3RoZXIgaWYg
d2Ugc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgIC8vIGJsb2NrIHJhdGhlciB0
aGFuIGF0IGEgc2VsZWN0aW9uKS4KQEAgLTE2NDYsNiArMTc4OCwxNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAgICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBl
bmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKICAgICAg
ICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNl
YXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgZWMpOwogICAgICAgICAKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQorICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKKyAgICAgICAgZm91bmRJdGVtID0gZmluZEZpcnN0TWlzc3BlbGxp
bmdPckJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgp
LCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdy
YW1tYXJEZXRhaWwpOworICAgICAgICBpZiAoaXNTcGVsbGluZykgeworICAgICAgICAgICAgbWlz
c3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07CisgICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9
IGZvdW5kT2Zmc2V0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFkR3JhbW1hclBo
cmFzZSA9IGZvdW5kSXRlbTsKKyAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3Vu
ZE9mZnNldDsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5k
Rmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0
KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKQEAgLTE2NTksNiArMTgxMiw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm8KICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAg
ICAgICAgYmFkR3JhbW1hclBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVu
dCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJh
c2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgorI2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICgh
YmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKQEAgLTE4MDAsNiArMTk1NCw4NiBAQCBWZWN0
b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiAgICAgcmV0dXJuIGd1ZXNzZXM7
CiB9CiAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCitzdGF0aWMgVmVjdG9yPFN0cmluZz4g
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShFZGl0b3JDbGllbnQqIGNs
aWVudCwgUmFuZ2UgKnJhbmdlLCBib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwg
Ym9vbCYgdW5ncmFtbWF0aWNhbCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOworICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgbWlzc3BlbGxlZCA9IGZhbHNlOworICAgIHVuZ3JhbW1h
dGljYWwgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIWNsaWVudCB8fCAhcmFuZ2UgfHwgcmFuZ2Ut
PmNvbGxhcHNlZChlYykpCisgICAgICAgIHJldHVybiBndWVzc2VzOworCisgICAgLy8gRXhwYW5k
IHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hl
Y2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCisgICAgaW50IHJhbmdlU3RhcnRPZmZzZXQ7
CisgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UocmFuZ2UsIHJhbmdlU3RhcnRP
ZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgaW50IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChyYW5nZSk7CisgICAgaWYgKHJhbmdlTGVuZ3RoID09IDAgfHwgcGFy
YWdyYXBoU3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgIHJldHVybiBndWVzc2VzOworCisg
ICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICBjbGllbnQtPmNoZWNr
U3BlbGxpbmdBbmRHcmFtbWFyT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMo
KSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja0dyYW1tYXIsIHJlc3VsdHMpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Cisg
ICAgICAgIGlmIChyZXN1bHQtPnJlc3VsdFR5cGUgPT0gMSAmJiByZXN1bHQtPmxvY2F0aW9uID09
IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJp
bmcocmFuZ2VTdGFydE9mZnNldCwgcmFuZ2VMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG1p
c3NwZWxsZWRXb3JkLmxlbmd0aCgpICE9IDApOworICAgICAgICAgICAgY2xpZW50LT5nZXRHdWVz
c2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBjbGllbnQt
PnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworICAg
ICAgICAgICAgbWlzc3BlbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWNoZWNrR3JhbW1hcikKKyAgICAgICAg
cmV0dXJuIGd1ZXNzZXM7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXN1bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCog
cmVzdWx0ID0gJnJlc3VsdHNbaV07CisgICAgICAgIGlmIChyZXN1bHQtPnJlc3VsdFR5cGUgPT0g
MiAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2Nh
dGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQgKyByYW5nZUxlbmd0aCkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5z
aXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFp
bCA9ICZyZXN1bHQtPmRldGFpbHNbal07CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+
bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSByYW5nZVN0YXJ0T2Zmc2V0
ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1
bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpICE9IDApOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWlsLT5ndWVzc2VzLnNpemUoKTsgaysrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZGV0YWlsLT5ndWVzc2VzW2tdKTsK
KyAgICAgICAgICAgICAgICAgICAgY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoYmFkR3JhbW1hclBocmFzZSwgKmRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIHVu
Z3JhbW1hdGljYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGd1ZXNzZXM7Cit9CisKKyNlbmRpZgorCitWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxs
ZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAg
ICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShjbGllbnQo
KSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKKyNlbHNl
CisgICAgbWlzc3BlbGxlZCA9IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOworICAgIGlmIChtaXNz
cGVsbGVkKSB7CisgICAgICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IGd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAgfQorICAgIGlmIChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKSAmJiBpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKSkgeworICAg
ICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXNGb3JVbmdy
YW1tYXRpY2FsU2VsZWN0aW9uKCk7CisgICAgfQorICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsK
KyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyNlbmRpZgorfQorCiB2b2lkIEVkaXRvcjo6
c2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgpCiB7CiAgICAgaWYgKCFjbGllbnQoKSkgewpAQCAtMTgz
Miw2ICsyMDY2LDE1IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIFZpc2libGVTZWxlY3Rp
b24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Cisg
ICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKSB7CisgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNl
KHApLCBlbmRPZlNlbnRlbmNlKHApKTsKKyAgICAgICAgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoYWRqYWNlbnRXb3JkcywgdHJ1ZSwgc2VsZWN0ZWRTZW50ZW5jZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoYWRqYWNlbnRXb3Jkcywg
ZmFsc2UsIGFkamFjZW50V29yZHMpOworICAgIH0KKyNlbHNlCiAgICAgLy8gQ2hlY2sgc3BlbGxp
bmcgb2Ygb25lIHdvcmQKICAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSkpOwogICAgIApAQCAtMTg0MCw2ICsyMDgzLDcgQEAgdm9pZCBFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZwogICAgIAogICAgIC8vIENoZWNrIGdyYW1tYXIg
b2YgZW50aXJlIHNlbnRlbmNlCiAgICAgbWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mU2VudGVuY2UocCksIGVuZE9mU2VudGVuY2UocCkpKTsKKyNlbmRpZgogfQogCiBzdGF0
aWMgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwg
UmFuZ2UqIHNlYXJjaFJhbmdlKQpAQCAtMTkxMCw2ICsyMTU0LDc4IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmwKICNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKworc3RhdGljIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UgKnNwZWxsaW5nUmFuZ2UsIGJvb2wg
bWFya0dyYW1tYXIsIFJhbmdlICpncmFtbWFyUmFuZ2UpCit7CisgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rpb25zIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3Vu
ZGFyaWVzLgorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYgKCFjbGllbnQgfHwgIXNwZWxs
aW5nUmFuZ2UgfHwgKG1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gSWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwu
CisgICAgTm9kZSogZWRpdGFibGVOb2RlID0gc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIo
KTsKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0
byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMg
dGhhdCBtdWNoIGNvbnRleHQuCisgICAgaW50IHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldDsKKyAg
ICBpbnQgc3BlbGxpbmdSYW5nZUVuZE9mZnNldDsKKyAgICBpbnQgZ3JhbW1hclJhbmdlU3RhcnRP
ZmZzZXQ7CisgICAgaW50IGdyYW1tYXJSYW5nZUVuZE9mZnNldDsKKyAgICBTdHJpbmcgcGFyYWdy
YXBoU3RyaW5nOworICAgIAorICAgIGlmIChtYXJrR3JhbW1hcikgeworICAgICAgICAvLyBUaGUg
c3BlbGxpbmcgcmFuZ2Ugc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiB0aGUgcGFyYWdyYXBoLWFsaWdu
ZWQgZXh0ZW5zaW9uIG9mIHRoZSBncmFtbWFyIHJhbmdlLgorICAgICAgICBSZWZQdHI8UmFuZ2U+
IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UoZ3JhbW1hclJh
bmdlLCBncmFtbWFyUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBzcGVsbGluZ1JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICBzcGVs
bGluZ1JhbmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFz
UmFuZ2UuZ2V0KCkpOworICAgICAgICBncmFtbWFyUmFuZ2VFbmRPZmZzZXQgPSBncmFtbWFyUmFu
Z2VTdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZ3JhbW1hclJhbmdlKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFy
YWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2Uoc3BlbGxpbmdSYW5nZSwgc3BlbGxpbmdSYW5nZVN0
YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgIH0KKyAgICBzcGVsbGluZ1JhbmdlRW5k
T2Zmc2V0ID0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChzcGVsbGluZ1JhbmdlKTsKKyAgICBpZiAocGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpID09
IDAgfHwgKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA+PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
ICYmICghbWFya0dyYW1tYXIgfHwgZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQgPj0gZ3JhbW1hclJh
bmdlRW5kT2Zmc2V0KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIGNsaWVudC0+Y2hlY2tTcGVsbGluZ0FuZEdyYW1t
YXJPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJp
bmcubGVuZ3RoKCksIG1hcmtHcmFtbWFyLCByZXN1bHRzKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0
LT5yZXN1bHRUeXBlID09IDEgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSBzcGVsbGluZ1JhbmdlU3Rh
cnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoIDw9IHNwZWxsaW5n
UmFuZ2VFbmRPZmZzZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAg
JiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdSYW5nZSwgcmVz
dWx0LT5sb2NhdGlvbiAtIHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCwgcmVzdWx0LT5sZW5ndGgp
OworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1
bWVudCgpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXJrR3JhbW1hciAmJiByZXN1bHQtPnJl
c3VsdFR5cGUgPT0gMiAmJiByZXN1bHQtPmxvY2F0aW9uIDwgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0
ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+IGdyYW1tYXJSYW5nZVN0YXJ0
T2Zmc2V0KSB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3Vs
dC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
cmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgR3Jh
bW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID49
IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxv
Y2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gZ3JhbW1hclJhbmdlRW5kT2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShncmFtbWFyUmFuZ2UsIHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxv
Y2F0aW9uIC0gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQsIGRldGFpbC0+bGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50
KCktPmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisjZW5kaWYKKwordm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxs
aW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBn
cmFtbWFyU2VsZWN0aW9uKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgaWYgKCFp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhjbGllbnQoKSwgc3BlbGxp
bmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSk7CisjZWxzZQorICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rp
b24pOworICAgIGlmIChtYXJrR3JhbW1hcikKKyAgICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1h
clNlbGVjdGlvbik7CisjZW5kaWYKK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5n
ZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAkocmV2aXNpb24gNDEyNjYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5NSw5ICsxOTUsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZWxl
Y3Rpb25NaXNzcGVsbGVkKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbigpOworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JV
bmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGlj
YWwpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rpb24pOwogICAgIHZvaWQgYWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24gPSBmYWxzZSk7CiAg
ICAgdm9pZCBzaG93U3BlbGxpbmdHdWVzc1BhbmVsKCk7CiAgICAgYm9vbCBzcGVsbGluZ1BhbmVs
SXNTaG93aW5nKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDEyNjYpCisr
KyBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDYg
KzM0MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNo
YXIqLCBpbnQsIGludCosIGludCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJP
ZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50Kiwg
aW50KikgeyB9CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tTcGVsbGluZ0FuZEdyYW1tYXJPZlBhcmFncmFwaChjb25zdCBVQ2hhciosIGludCwgYm9vbCwg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKSAgeyB9CisjZW5kaWYKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0
IEdyYW1tYXJEZXRhaWwmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hv
d1NwZWxsaW5nVUkoYm9vbCkgeyB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0MTI2
NikKKysrIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEs
NiArNjEsMTMgQEAgc3RydWN0IEdyYW1tYXJEZXRhaWwgewogICAgIFN0cmluZyB1c2VyRGVzY3Jp
cHRpb247CiB9OwogCitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0IHsKKyAgICBpbnQgcmVzdWx0
VHlwZTsgLy8gMSBmb3Igc3BlbGxpbmcsIDIgZm9yIGdyYW1tYXIKKyAgICBpbnQgbG9jYXRpb247
CisgICAgaW50IGxlbmd0aDsKKyAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZGV0YWlsczsKK307
CisgCiBjbGFzcyBFZGl0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkVkaXRvckNs
aWVudCgpIHsgIH0KQEAgLTEzMCw2ICsxMzcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGxlYXJuV29yZChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpID0gMDsKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIHZpcnR1YWwgdm9pZCBjaGVj
a1NwZWxsaW5nQW5kR3JhbW1hck9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBib29sIGNoZWNrR3JhbW1hciwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3Vs
dHMpID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
Y29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29s
IHNob3cpID0gMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNDEyNjYpCisrKyBXZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc4LDExICsxNjc4LDExIEBAIHZvaWQgRnJh
bWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY28KICAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBvbGRTdGFydChvbGRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRBZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFy
dE9mV29yZChvbGRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3Rh
cnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOyAgIAogICAgICAgICAgICAgaWYgKG9sZEFkamFj
ZW50V29yZHMgIT0gbmV3QWRqYWNlbnRXb3JkcykgewotICAgICAgICAgICAgICAgIGVkaXRvcigp
LT5tYXJrTWlzc3BlbGxpbmdzKG9sZEFkamFjZW50V29yZHMpOwogICAgICAgICAgICAgICAgIGlm
IChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rp
b24oc3RhcnRPZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZShvbGRTdGFydCkpOyAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAob2xkU2VsZWN0ZWRTZW50ZW5jZSAhPSBuZXdTZWxl
Y3RlZFNlbnRlbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yKCktPm1hcmtCYWRH
cmFtbWFyKG9sZFNlbGVjdGVkU2VudGVuY2UpOworICAgICAgICAgICAgICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG9sZFNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZT
ZW50ZW5jZShvbGRTdGFydCksIGVuZE9mU2VudGVuY2Uob2xkU3RhcnQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFj
ZW50V29yZHMsIG9sZFNlbGVjdGVkU2VudGVuY2UgIT0gbmV3U2VsZWN0ZWRTZW50ZW5jZSwgb2xk
U2VsZWN0ZWRTZW50ZW5jZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFj
ZW50V29yZHMsIGZhbHNlLCBvbGRBZGphY2VudFdvcmRzKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCShy
ZXZpc2lvbiA0MTI2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjgsMTIgKzMyOCwxMCBAQCB2b2lkIENvbnRleHRNZW51Ojpwb3B1bGF0
ZSgpCiAgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkKSB7CiAgICAgICAgICAgICAvLyBDb25z
aWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBt
ZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQogICAg
ICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3Jh
bW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZyA9IGZy
YW1lLT5lZGl0b3IoKS0+aXNTZWxlY3Rpb25NaXNzcGVsbGVkKCk7Ci0gICAgICAgICAgICBib29s
IGJhZEdyYW1tYXIgPSAhbWlzc3BlbGxpbmcgJiYgKGZyYW1lLT5lZGl0b3IoKS0+aXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkgJiYgZnJhbWUtPmVkaXRvcigpLT5pc1NlbGVjdGlvblVuZ3JhbW1h
dGljYWwoKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7Cisg
ICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0
aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CiAgICAgICAgICAgICBpZiAo
bWlzc3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgewotICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IGd1ZXNzZXMgPSBtaXNzcGVsbGluZyA/IGZyYW1lLT5lZGl0b3IoKS0+Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRTZWxlY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICA6IGZyYW1lLT5lZGl0b3Io
KS0+Z3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBz
aXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzaXplID09
IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBiYWQgZ3JhbW1hciBidXQg
bm8gc3VnZ2VzdGlvbnMgKGUuZy4sIHJlcGVhdGVkIHdvcmQpLCBqdXN0IGxlYXZlIG9mZiB0aGUg
c3VnZ2VzdGlvbnMKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MTI2OSkKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDItMjYgIERvdWdsYXMg
Ui4gRGF2aWRzb24gIDxkZGF2aWRzb0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNo
ZWNraW5nIHRvIHVzZSB0aGUgbmV3IGNvbWJpbmVkIHRleHQgCisgICAgICAgIGNoZWNraW5nICh3
aXRoIGF1dG9tYXRpYyBsYW5ndWFnZSBpZGVudGlmaWNhdGlvbikgb24gU25vdyBMZW9wYXJkLiAK
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxMDgK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OmNoZWNrU3BlbGxpbmdBbmRHcmFtbWFyT2ZQYXJhZ3JhcGgpOgorCiAyMDA5LTAyLTI1ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2V2aW4gRGVja2VyLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCShyZXZpc2lvbiA0MTI2NikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCog
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOworICAgIHZpcnR1YWwg
dm9pZCBjaGVja1NwZWxsaW5nQW5kR3JhbW1hck9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0
LCBpbnQgbGVuZ3RoLCBib29sIGNoZWNrR3JhbW1hciwgV1RGOjpWZWN0b3I8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2
b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNDEyNjYpCisrKyBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTk1LDYgKzU5NSw1MCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJp
CiAjZW5kaWYKIH0KIAordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdBbmRHcmFt
bWFyT2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGJvb2wgY2hlY2tH
cmFtbWFyLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3sKKyNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KyAgICBOU1N0cmluZyAqdGV4dFN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hh
cmFjdGVyc05vQ29weTpjb25zdF9jYXN0PFVDaGFyKj4odGV4dCkgbGVuZ3RoOmxlbmd0aCBmcmVl
V2hlbkRvbmU6Tk9dOworICAgIE5TVGV4dENoZWNraW5nVHlwZXMgY2hlY2tpbmdUeXBlcyA9IGNo
ZWNrR3JhbW1hciA/IChOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSB8IE5TVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nIHwgTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiAoTlNUZXh0Q2hl
Y2tpbmdUeXBlT3J0aG9ncmFwaHkgfCBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7CisgICAg
TlNBcnJheSAqaW5jb21pbmdSZXN1bHRzID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGNoZWNrU3RyaW5nOnRleHRTdHJpbmcgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHRT
dHJpbmcgbGVuZ3RoXSkgdHlwZXM6Y2hlY2tpbmdUeXBlcyBvcHRpb25zOm5pbCBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6TlVMTCB3
b3JkQ291bnQ6TlVMTF07CisgICAgW3RleHRTdHJpbmcgcmVsZWFzZV07CisgICAgZm9yIChOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqaW5jb21pbmdSZXN1bHQgaW4gaW5jb21pbmdSZXN1bHRzKSB7Cisg
ICAgICAgIE5TUmFuZ2UgcmVzdWx0UmFuZ2UgPSBbaW5jb21pbmdSZXN1bHQgcmFuZ2VdOworICAg
ICAgICBOU1RleHRDaGVja2luZ1R5cGUgcmVzdWx0VHlwZSA9IFtpbmNvbWluZ1Jlc3VsdCByZXN1
bHRUeXBlXTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91
bmQgJiYgcmVzdWx0UmFuZ2UubGVuZ3RoID4gMCk7CisgICAgICAgIGlmIChOU1RleHRDaGVja2lu
Z1R5cGVTcGVsbGluZyA9PSByZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdS
ZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSAxOworICAgICAg
ICAgICAgcmVzdWx0LmxvY2F0aW9uID0gcmVzdWx0UmFuZ2UubG9jYXRpb247CisgICAgICAgICAg
ICByZXN1bHQubGVuZ3RoID0gcmVzdWx0UmFuZ2UubGVuZ3RoOworICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmIChjaGVja0dyYW1tYXIgJiYgTlNU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciA9PSByZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtp
bmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CisgICAgICAgICAgICByZXN1bHQucmVzdWx0
VHlwZSA9IDI7CisgICAgICAgICAgICByZXN1bHQubG9jYXRpb24gPSByZXN1bHRSYW5nZS5sb2Nh
dGlvbjsKKyAgICAgICAgICAgIHJlc3VsdC5sZW5ndGggPSByZXN1bHRSYW5nZS5sZW5ndGg7Cisg
ICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykg
eworICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CisgICAgICAgICAgICAg
ICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CisgICAgICAgICAgICAgICAgTlNWYWx1ZSAqZGV0YWls
UmFuZ2VBc05TVmFsdWUgPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclJh
bmdlXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsUmFuZ2VBc05TVmFsdWUpOworICAg
ICAgICAgICAgICAgIE5TUmFuZ2UgZGV0YWlsTlNSYW5nZSA9IFtkZXRhaWxSYW5nZUFzTlNWYWx1
ZSByYW5nZVZhbHVlXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsTlNSYW5nZS5sb2Nh
dGlvbiAhPSBOU05vdEZvdW5kICYmIGRldGFpbE5TUmFuZ2UubGVuZ3RoID4gMCk7CisgICAgICAg
ICAgICAgICAgZGV0YWlsLmxvY2F0aW9uID0gZGV0YWlsTlNSYW5nZS5sb2NhdGlvbjsKKyAgICAg
ICAgICAgICAgICBkZXRhaWwubGVuZ3RoID0gZGV0YWlsTlNSYW5nZS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RG
b3JLZXk6TlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uXTsKKyAgICAgICAgICAgICAgICBOU0FycmF5
ICpndWVzc2VzID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJDb3JyZWN0
aW9uc107CisgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykK
KyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMuYXBwZW5kKFN0cmluZyhndWVzcykp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorfQorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdV
SVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3Qg
R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIK
</data>
<flag name="review"
          id="13752"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
      

    </bug>

</bugzilla>