<?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>130850</bug_id>
          
          <creation_ts>2014-03-27 11:49:15 -0700</creation_ts>
          <short_desc>Convert yet more of HTMLConverter to C++</short_desc>
          <delta_ts>2014-03-30 12:51:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>994991</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-27 11:49:15 -0700</bug_when>
    <thetext>Convert yet more of HTMLConverter to C++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995094</commentid>
    <comment_count>1</comment_count>
      <attachid>227994</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-27 15:21:54 -0700</bug_when>
    <thetext>Created attachment 227994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995136</commentid>
    <comment_count>2</comment_count>
      <attachid>227994</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-03-27 16:31:12 -0700</bug_when>
    <thetext>Comment on attachment 227994
Patch

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

&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:560
&gt; +NSAttributedString *HTMLConverter::convert()

This should really return a RetainPtr&lt;NSAttributedString&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995597</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-29 13:03:41 -0700</bug_when>
    <thetext>Committed r166454: &lt;http://trac.webkit.org/changeset/166454&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995675</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-03-30 12:51:58 -0700</bug_when>
    <thetext>iOS build fix:  &lt;http://trac.webkit.org/changeset/166464&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227994</attachid>
            <date>2014-03-27 15:21:54 -0700</date>
            <delta_ts>2014-03-27 16:31:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130850-20140327152133.patch</filename>
            <type>text/plain</type>
            <size>48646</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTAzLTI3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCB5ZXQgbW9yZSBvZiBIVE1M
Q29udmVydGVyIHRvIEMrKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwODUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1M
Q29udmVydGVyQ2FjaGVzOjppc0FuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVydGVkKToKKyAgICAg
ICAgKEhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoSFRNTENvbnZlcnRl
cjo6fkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6Y29udmVydCk6Cisg
ICAgICAgIChIVE1MQ29udmVydGVyOjpjb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKEhUTUxDb252ZXJ0ZXI6OmF0dHJpYnV0ZXNGb3JFbGVtZW50KToKKyAgICAgICAgKEhU
TUxDb252ZXJ0ZXI6Ol9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252
ZXJ0ZXI6Ol9uZXdMaW5lRm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfbmV3
VGFiRm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfYWRkQXR0YWNobWVudEZv
ckVsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2FkZFF1b3RlRm9yRWxlbWVudCk6
CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfYWRkVmFsdWUpOgorICAgICAgICAoSFRNTENvbnZl
cnRlcjo6X3Byb2Nlc3NIZWFkRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfZW50
ZXJFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9hZGRUYWJsZUNlbGxGb3JFbGVt
ZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAg
IChIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlzdCk6CisgICAgICAgIChIVE1MQ29udmVy
dGVyOjpfZXhpdEVsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0
KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZU5vZGUpOgorICAgICAgICAoSFRN
TENvbnZlcnRlcjo6X3RyYXZlcnNlRm9vdGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjphdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKF9jaGlsZHJlbkZvck5vZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2F0dHJpYnV0ZXNGb3JFbGVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9sb2FkRnJvbURPTVJhbmdl
KTogRGVsZXRlZC4KKwogMjAxNC0wMy0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgdW5uZWNlc3NhcnkgYnJhbmNoZXMgZnJvbSBMaXZl
Tm9kZUxpc3QgdHJhdmVyc2FsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCShyZXZpc2lvbiAxNjYzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDMxICsy
NywyOCBAQAogI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgogCiAjaW1wb3J0ICJBcmNoaXZlUmVz
b3VyY2UuaCIKLSNpbXBvcnQgIkNhY2hlZEltYWdlLmgiCi0jaW1wb3J0ICJDb2xvck1hYy5oIgog
I2ltcG9ydCAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW1wb3J0ICJDU1NQYXJz
ZXIuaCIKICNpbXBvcnQgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW1wb3J0ICJDYWNoZWRJbWFn
ZS5oIgogI2ltcG9ydCAiQ2hhcmFjdGVyRGF0YS5oIgorI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNp
bXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgotI2ltcG9ydCAi
RE9NQ1NTUHJpbWl0aXZlVmFsdWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NQ2hhcmFjdGVyRGF0
YUludGVybmFsLmgiCi0jaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJE
T01FbGVtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUhUTUxUYWJsZUNlbGxFbGVtZW50Lmgi
Ci0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVByaXZhdGUuaCIKLSNp
bXBvcnQgIkRPTVJHQkNvbG9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwu
aCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKKyNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKICNp
bXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlci5o
IgogI2ltcG9ydCAiSFRNTEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxGcmFtZUVsZW1lbnRCYXNl
LmgiCisjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MTWV0YUVsZW1l
bnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSFRNTE9MaXN0RWxlbWVudC5o
IgogI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbXBvcnQgIkxvYWRl
ck5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJSR0JDb2xvci5oIgogI2ltcG9ydCAiUmVuZGVySW1h
Z2UuaCIKQEAgLTQxOSw3ICs0MTYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQp
OwogCiAgICAgTm9kZSogY2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChjb25zdCBS
YW5nZSYpOwotICAgIGJvb2wgaXNBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChOb2RlKiBu
b2RlKSBjb25zdCB7IHJldHVybiBtX2FuY2VzdG9yc1VuZGVyQ29tbW9uQW5jZXN0b3IuY29udGFp
bnMobm9kZSk7IH0KKyAgICBib29sIGlzQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoTm9k
ZSYgbm9kZSkgY29uc3QgeyByZXR1cm4gbV9hbmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmNv
bnRhaW5zKCZub2RlKTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hNYXA8RWxlbWVudCosIHN0ZDo6
dW5pcXVlX3B0cjxDb21wdXRlZFN0eWxlRXh0cmFjdG9yPj4gbV9jb21wdXRlZFN0eWxlczsKQEAg
LTQ0MSwzMSArNDM4LDI1IEBAICsgKHZvaWQpZG9jdW1lbnQ6KE5TT2JqZWN0ICoqKW91dERvY3Vt
ZW4KIAogY2xhc3MgSFRNTENvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgSFRNTENvbnZlcnRlcihE
T01SYW5nZSopOworICAgIEhUTUxDb252ZXJ0ZXIoUmFuZ2UmKTsKICAgICB+SFRNTENvbnZlcnRl
cigpOwogICAgIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyogY29udmVydCgpCi0gICAgewotICAg
ICAgICBfbG9hZEZyb21ET01SYW5nZSgpOwotICAgICAgICBpZiAoX2Vycm9yQ29kZSkKLSAgICAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIHJldHVybiBbW19hdHRyU3RyIHJldGFpbl0gYXV0
b3JlbGVhc2VdOwotICAgIH0KKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoKTsKICAg
ICAKIHByaXZhdGU6CisgICAgUmVmPFJhbmdlPiBtX3JhbmdlOworICAgIERvY3VtZW50TG9hZGVy
KiBtX2RhdGFTb3VyY2U7CisgICAgCiAgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKKyAgICBIYXNoTWFw
PFJldGFpblB0cjxOU1RleHRUYWJsZT4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0VGFibGVGb290
ZXJzOwogICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4+IG1fYWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50czsKIAogICAgIE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyU3RyOwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkg
Kl9kb2N1bWVudEF0dHJzOwogICAgIE5TVVJMICpfYmFzZVVSTDsKLSAgICBET01Eb2N1bWVudCAq
X2RvY3VtZW50OwotICAgIERPTVJhbmdlICpfZG9tUmFuZ2U7Ci0gICAgV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIgKl9kYXRhU291cmNlOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dExpc3RzOwog
ICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dEJsb2NrczsKICAgICBOU011dGFibGVBcnJheSAqX3Rl
eHRUYWJsZXM7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX3RleHRUYWJsZUZvb3RlcnM7CiAg
ICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0VGFibGVTcGFjaW5nczsKICAgICBOU011dGFibGVBcnJh
eSAqX3RleHRUYWJsZVBhZGRpbmdzOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93
czsKQEAgLTQ3Niw3ICs0NjcsNiBAQCBwcml2YXRlOgogICAgIAogICAgIENHRmxvYXQgX2RlZmF1
bHRUYWJJbnRlcnZhbDsKICAgICBOU1VJbnRlZ2VyIF9kb21SYW5nZVN0YXJ0SW5kZXg7Ci0gICAg
TlNJbnRlZ2VyIF9lcnJvckNvZGU7CiAgICAgTlNJbnRlZ2VyIF9xdW90ZUxldmVsOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEhUTUxDb252ZXJ0ZXJDYWNoZXM+IF9jYWNoZXM7CkBAIC00ODksNTEg
KzQ3OSw0OSBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBpbnQgcGFkOjI2OwogICAgIH0g
X2ZsYWdzOwogICAgIAotICAgIHZvaWQgX2xvYWRGcm9tRE9NUmFuZ2UoKTsKLQogICAgIFBsYXRm
b3JtQ29sb3IgKl9jb2xvckZvckVsZW1lbnQoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpOwogICAg
IAotICAgIHZvaWQgX3RyYXZlcnNlTm9kZShOb2RlKiBub2RlLCB1bnNpZ25lZCBkZXB0aCwgYm9v
bCBlbWJlZGRlZCk7Ci0gICAgdm9pZCBfdHJhdmVyc2VGb290ZXJOb2RlKERPTU5vZGUgKm5vZGUs
IE5TSW50ZWdlciBkZXB0aCk7CisgICAgdm9pZCBfdHJhdmVyc2VOb2RlKE5vZGUmLCB1bnNpZ25l
ZCBkZXB0aCwgYm9vbCBlbWJlZGRlZCk7CisgICAgdm9pZCBfdHJhdmVyc2VGb290ZXJOb2RlKEVs
ZW1lbnQmLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgCi0gICAgTlNEaWN0aW9uYXJ5ICpfY29tcHV0
ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChFbGVtZW50Jik7Ci0gICAgTlNEaWN0aW9uYXJ5ICpfYXR0
cmlidXRlc0ZvckVsZW1lbnQoRE9NRWxlbWVudCAqKTsKLSAgICBOU0RpY3Rpb25hcnkqIGF0dHJp
YnV0ZXNGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpOwotICAgIE5TRGljdGlvbmFyeSogYWdn
cmVnYXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYpOworICAgIE5TRGlj
dGlvbmFyeSAqY29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChFbGVtZW50Jik7CisgICAgTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9yRWxlbWVudChFbGVtZW50Jik7CisgICAgTlNEaWN0aW9u
YXJ5ICphZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckFuY2VzdG9ycyhDaGFyYWN0ZXJEYXRhJik7CiAg
ICAgCiAgICAgRWxlbWVudCogX2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShOb2RlKik7CiAgICAg
Ci0gICAgdm9pZCBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBO
U1N0cmluZyAqdGFnLCBCT09MIGZsYWcsIEJPT0wgc3VwcHJlc3NUcmFpbGluZ1NwYWNlKTsKLSAg
ICB2b2lkIF9uZXdMaW5lRm9yRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KTsKLSAgICB2b2lk
IF9uZXdUYWJGb3JFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpOwotICAgIEJPT0wgX2FkZEF0
dGFjaG1lbnRGb3JFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQsIE5TVVJMICp1cmwsIEJPT0wg
bmVlZHNQYXJhZ3JhcGgsIEJPT0wgdXNlUGxhY2Vob2xkZXIpOwotICAgIHZvaWQgX2FkZFF1b3Rl
Rm9yRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBCT09MIG9wZW5pbmcsIE5TSW50ZWdlciBs
ZXZlbCk7Ci0gICAgdm9pZCBfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBET01FbGVtZW50ICpl
bGVtZW50KTsKKyAgICB2b2lkIF9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50KEVsZW1lbnQmLCBOU1N0
cmluZyAqdGFnLCBCT09MIGZsYWcsIEJPT0wgc3VwcHJlc3NUcmFpbGluZ1NwYWNlKTsKKyAgICB2
b2lkIF9uZXdMaW5lRm9yRWxlbWVudChFbGVtZW50Jik7CisgICAgdm9pZCBfbmV3VGFiRm9yRWxl
bWVudChFbGVtZW50Jik7CisgICAgQk9PTCBfYWRkQXR0YWNobWVudEZvckVsZW1lbnQoRWxlbWVu
dCYsIE5TVVJMICp1cmwsIEJPT0wgbmVlZHNQYXJhZ3JhcGgsIEJPT0wgdXNlUGxhY2Vob2xkZXIp
OworICAgIHZvaWQgX2FkZFF1b3RlRm9yRWxlbWVudChFbGVtZW50JiwgQk9PTCBvcGVuaW5nLCBO
U0ludGVnZXIgbGV2ZWwpOworICAgIHZvaWQgX2FkZFZhbHVlKE5TU3RyaW5nICp2YWx1ZSwgRWxl
bWVudCYpOwogICAgIHZvaWQgX2ZpbGxJbkJsb2NrKE5TVGV4dEJsb2NrICpibG9jaywgRWxlbWVu
dCYsIFBsYXRmb3JtQ29sb3IgKmJhY2tncm91bmRDb2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwg
Q0dGbG9hdCBleHRyYVBhZGRpbmcsIEJPT0wgaXNUYWJsZSk7CisgICAgCisgICAgQk9PTCBfZW50
ZXJFbGVtZW50KEVsZW1lbnQmLCBCT09MIGVtYmVkZGVkKTsKKyAgICBCT09MIF9wcm9jZXNzRWxl
bWVudChFbGVtZW50JiwgTlNJbnRlZ2VyIGRlcHRoKTsKKyAgICB2b2lkIF9leGl0RWxlbWVudChF
bGVtZW50JiwgTlNJbnRlZ2VyIGRlcHRoLCBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgpOworICAgIAor
ICAgIHZvaWQgX3Byb2Nlc3NIZWFkRWxlbWVudChFbGVtZW50Jik7CiAgICAgdm9pZCBfcHJvY2Vz
c01ldGFFbGVtZW50V2l0aE5hbWUoTlNTdHJpbmcgKm5hbWUsIE5TU3RyaW5nICpjb250ZW50KTsK
LSAgICB2b2lkIF9wcm9jZXNzSGVhZEVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCk7Ci0gICAg
Qk9PTCBfZW50ZXJFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQsIEJPT0wgZW1iZWRkZWQpOwot
ICAgIHZvaWQgX2FkZFRhYmxlRm9yRWxlbWVudChFbGVtZW50ICp0YWJsZUVsZW1lbnQpOwotICAg
IHZvaWQgX2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQoRE9NRWxlbWVudCAqdGFibGVDZWxsRWxlbWVu
dCk7Ci0gICAgQk9PTCBfcHJvY2Vzc0VsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCwgTlNJbnRl
Z2VyIGRlcHRoKTsKKyAgICAKKyAgICB2b2lkIF9hZGRUYWJsZUZvckVsZW1lbnQoRWxlbWVudCog
dGFibGVFbGVtZW50KTsKKyAgICB2b2lkIF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50KEVsZW1lbnQq
IHRhYmxlQ2VsbEVsZW1lbnQpOwogICAgIHZvaWQgX2FkZE1hcmtlcnNUb0xpc3QoTlNUZXh0TGlz
dCAqbGlzdCwgTlNSYW5nZSByYW5nZSk7Ci0gICAgdm9pZCBfZXhpdEVsZW1lbnQoRE9NRWxlbWVu
dCAqZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoLCBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgpOwogICAg
IHZvaWQgX3Byb2Nlc3NUZXh0KENoYXJhY3RlckRhdGEmKTsKICAgICB2b2lkIF9hZGp1c3RUcmFp
bGluZ05ld2xpbmUoKTsKIH07CiAKLUhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIoRE9NUmFu
Z2UqIGRvbVJhbmdlKQorSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihSYW5nZSYgcmFuZ2Up
CisgICAgOiBtX3JhbmdlKHJhbmdlKQorICAgICwgbV9kYXRhU291cmNlKG51bGxwdHIpCiB7Ci0g
ICAgX2RvbVJhbmdlID0gW2RvbVJhbmdlIHJldGFpbl07CiAgICAgX2F0dHJTdHIgPSBbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwogICAgIF9kb2N1bWVudEF0dHJzID0g
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKICAgICBfYmFzZVVSTCA9IG5pbDsK
LSAgICBfZG9jdW1lbnQgPSBuaWw7Ci0gICAgX2RhdGFTb3VyY2UgPSBudWxscHRyOwogICAgIF90
ZXh0TGlzdHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKICAgICBfdGV4dEJsb2Nr
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVzID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgX3RleHRUYWJsZUZvb3RlcnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVTcGFjaW5ncyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVQYWRkaW5ncyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVSb3dzID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CkBAIC01NDQsNyArNTMyLDYgQEAgSFRNTENvbnZl
cnRlcjo6SFRNTENvbnZlcnRlcihET01SYW5nZSogZAogCiAgICAgX2RlZmF1bHRUYWJJbnRlcnZh
bCA9IDM2OwogICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSAwOwotICAgIF9lcnJvckNvZGUgPSAt
MTsKICAgICBfcXVvdGVMZXZlbCA9IDA7CiAgICAgCiAgICAgX2ZsYWdzLmlzU29mdCA9IGZhbHNl
OwpAQCAtNTU4LDExICs1NDUsOSBAQCBIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCiB7
CiAgICAgW19hdHRyU3RyIHJlbGVhc2VdOwogICAgIFtfZG9jdW1lbnRBdHRycyByZWxlYXNlXTsK
LSAgICBbX2RvbVJhbmdlIHJlbGVhc2VdOwogICAgIFtfdGV4dExpc3RzIHJlbGVhc2VdOwogICAg
IFtfdGV4dEJsb2NrcyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJsZXMgcmVsZWFzZV07Ci0gICAg
W190ZXh0VGFibGVGb290ZXJzIHJlbGVhc2VdOwogICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVs
ZWFzZV07CiAgICAgW190ZXh0VGFibGVQYWRkaW5ncyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJs
ZVJvd3MgcmVsZWFzZV07CkBAIC01NzIsNiArNTU3LDIzIEBAIEhUTUxDb252ZXJ0ZXI6On5IVE1M
Q29udmVydGVyKCkKICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZWxlYXNlXTsKIH0KIAor
TlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KCkKK3sKKyAgICBOb2Rl
KiBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IF9jYWNoZXMtPmNhY2hlQW5jZXN0b3JzT2ZTdGFy
dFRvQmVDb252ZXJ0ZWQobV9yYW5nZS5nZXQoKSk7CisgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKTsKKworICAgIG1fZGF0YVNvdXJjZSA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
LT5kb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYg
KCFtX2RhdGFTb3VyY2UpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2RvbVJhbmdl
U3RhcnRJbmRleCA9IDA7CisgICAgX3RyYXZlcnNlTm9kZSgqY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIsIDAsIGZhbHNlIC8qIGVtYmVkZGVkICovKTsKKyAgICBpZiAoX2RvbVJhbmdlU3RhcnRJbmRl
eCA+IDAgJiYgX2RvbVJhbmdlU3RhcnRJbmRleCA8PSBbX2F0dHJTdHIgbGVuZ3RoXSkKKyAgICAg
ICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21S
YW5nZVN0YXJ0SW5kZXgpXTsKKyAgICAKKyAgICByZXR1cm4gW1tfYXR0clN0ciByZXRhaW5dIGF1
dG9yZWxlYXNlXTsKK30KKwogI2lmICFQTEFURk9STShJT1MpCiAvLyBSZXR1cm5zIHRoZSBmb250
IHRvIGJlIHVzZWQgaWYgdGhlIE5TRm9udEF0dHJpYnV0ZU5hbWUgZG9lc24ndCBleGlzdAogc3Rh
dGljIE5TRm9udCAqV2ViRGVmYXVsdEZvbnQoKQpAQCAtNjkwLDE4ICs2OTIsNiBAQCBzdGF0aWMg
TlNQYXJhZ3JhcGhTdHlsZSAqZGVmYXVsdFBhcmFncmFwCiAgICAgcmV0dXJuIGRlZmF1bHRQYXJh
Z3JhcGhTdHlsZTsKIH0KIAotCi1zdGF0aWMgTlNBcnJheSAqX2NoaWxkcmVuRm9yTm9kZShET01O
b2RlICpub2RlKQotewotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07Ci0gICAgRE9NTm9kZSAqY2hpbGQgPSBbbm9kZSBmaXJzdENoaWxkXTsKLSAgICB3
aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpjaGlsZF07Ci0gICAgICAg
IGNoaWxkID0gW2NoaWxkIG5leHRTaWJsaW5nXTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5Owot
fQotCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0
eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCkKIHsKICAgICBpZiAocHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCkBA
IC0xMTM0LDcgKzExMjQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBl
bGVtCiAKICNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1iZXIpIChmYWJzKG51bWJlciAtIDApIDwg
RkxUX0VQU0lMT04pCiAKLU5TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXR0
cmlidXRlc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK05TRGljdGlvbmFyeSAqSFRNTENv
bnZlcnRlcjo6Y29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQog
ewogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzID0gW05TTXV0YWJsZURpY3Rpb25hcnkg
ZGljdGlvbmFyeV07CiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTEzNTEsMTggKzEzNDEsMTIgQEAg
TlNEaWN0aW9uYXJ5ICpIVE1MQ29udmVydGVyOjpfY29tcHV0ZWRBdAogICAgIHJldHVybiBhdHRy
czsKIH0KIAotTlNEaWN0aW9uYXJ5ICpIVE1MQ29udmVydGVyOjpfYXR0cmlidXRlc0ZvckVsZW1l
bnQoRE9NRWxlbWVudCAqZWxlbWVudCkKLXsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgIHJldHVybiBhdHRyaWJ1dGVzRm9y
RWxlbWVudCgqY29yZShlbGVtZW50KSk7Ci19CiAKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRl
cjo6YXR0cmlidXRlc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBhdXRvJiBh
dHRyaWJ1dGVzID0gbV9hdHRyaWJ1dGVzRm9yRWxlbWVudHMuYWRkKCZlbGVtZW50LCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQotICAgICAgICBhdHRyaWJ1
dGVzID0gX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIGF0
dHJpYnV0ZXMgPSBjb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgIHJl
dHVybiBhdHRyaWJ1dGVzLmdldCgpOwogfQogCkBAIC0xMzk0LDcgKzEzNzgsNyBAQCBOU0RpY3Rp
b25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXMu
Z2V0KCk7CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X25ld1BhcmFncmFwaEZvckVsZW1lbnQo
RE9NRWxlbWVudCAqZWxlbWVudCwgTlNTdHJpbmcgKnRhZywgQk9PTCBmbGFnLCBCT09MIHN1cHBy
ZXNzVHJhaWxpbmdTcGFjZSkKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X25ld1BhcmFncmFwaEZvckVs
ZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNTdHJpbmcgKnRhZywgQk9PTCBmbGFnLCBCT09MIHN1
cHByZXNzVHJhaWxpbmdTcGFjZSkKIHsKICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0
dHJTdHIgbGVuZ3RoXTsKICAgICB1bmljaGFyIGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAwKSA/
IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6ICdc
bic7CkBAIC0xNDA3LDE0ICsxMzkxLDE0IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X25ld1BhcmFn
cmFwaEZvckVsZW0KICAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwgX2RvbVJh
bmdlU3RhcnRJbmRleCkKICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gW3N0cmlu
ZyBsZW5ndGhdIC0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOwogICAgICAgICByYW5nZVRvUmVwbGFj
ZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMg
PSBfYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIE5TRGljdGlvbmFyeSAq
YXR0cnMgPSBhdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgaWYgKHJhbmdl
VG9SZXBsYWNlLmxlbmd0aCA+IDApCiAgICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRl
czphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07CiAgICAgICAgIF9mbGFncy5pc1NvZnQgPSBZ
RVM7CiAgICAgfQogfQogCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9uZXdMaW5lRm9yRWxlbWVudChE
T01FbGVtZW50ICplbGVtZW50KQordm9pZCBIVE1MQ29udmVydGVyOjpfbmV3TGluZUZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICB1bmljaGFyIGMgPSBOU0xpbmVTZXBhcmF0b3JD
aGFyYWN0ZXI7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNT
dHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczomYyBsZW5ndGg6MV0pOwpAQCAtMTQyNCwx
MyArMTQwOCwxMyBAQCB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9uZXdMaW5lRm9yRWxlbWVudChECiAg
ICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwogICAgIGlmIChyYW5n
ZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5kZXgpCiAgICAgICAgIF9kb21S
YW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2UubGVuZ3RoOwotICAgIE5TRGljdGlvbmFy
eSAqYXR0cnMgPSBfYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgTlNEaWN0aW9u
YXJ5ICphdHRycyA9IGF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgIGlmIChyYW5n
ZVRvUmVwbGFjZS5sZW5ndGggPiAwKQogICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczph
dHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07CiAgICAgX2ZsYWdzLmlzU29mdCA9IFlFUzsKIH0K
IAotdm9pZCBIVE1MQ29udmVydGVyOjpfbmV3VGFiRm9yRWxlbWVudChET01FbGVtZW50ICplbGVt
ZW50KQordm9pZCBIVE1MQ29udmVydGVyOjpfbmV3VGFiRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogewogICAgIE5TU3RyaW5nICpzdHJpbmcgPSBAIlx0IjsKICAgICBOU1VJbnRlZ2VyIHRl
eHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKQEAgLTE0NDAsNyArMTQyNCw3IEBAIHZvaWQg
SFRNTENvbnZlcnRlcjo6X25ld1RhYkZvckVsZW1lbnQoRE8KICAgICByYW5nZVRvUmVwbGFjZS5s
ZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CiAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9u
IDwgX2RvbVJhbmdlU3RhcnRJbmRleCkKICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSBy
YW5nZVRvUmVwbGFjZS5sZW5ndGg7Ci0gICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IF9hdHRyaWJ1
dGVzRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gYXR0cmli
dXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CiAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+
IDApCiAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9S
ZXBsYWNlXTsKICAgICBfZmxhZ3MuaXNTb2Z0ID0gWUVTOwpAQCAtMTQ2MCwxMSArMTQ0NCwxMiBA
QCBzdGF0aWMgQ2xhc3MgX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzKCkKICAgICByZXR1cm4gX1dl
Yk1lc3NhZ2VEb2N1bWVudENsYXNzOwogfQogCi1CT09MIEhUTUxDb252ZXJ0ZXI6Ol9hZGRBdHRh
Y2htZW50Rm9yRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBOU1VSTCAqdXJsLCBCT09MIG5l
ZWRzUGFyYWdyYXBoLCBCT09MIHVzZVBsYWNlaG9sZGVyKQorQk9PTCBIVE1MQ29udmVydGVyOjpf
YWRkQXR0YWNobWVudEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNVUkwgKnVybCwgQk9P
TCBuZWVkc1BhcmFncmFwaCwgQk9PTCB1c2VQbGFjZWhvbGRlcikKIHsKLSAgICBCT09MIHJldHZh
bCA9IE5PLCBub3RGb3VuZCA9IE5POworICAgIEJPT0wgcmV0dmFsID0gTk87CisgICAgQk9PTCBu
b3RGb3VuZCA9IE5POwogICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyID0gbmlsOwotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5mcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIERvY3Vt
ZW50TG9hZGVyICpkYXRhU291cmNlID0gZnJhbWUtPmxvYWRlcigpLmZyYW1lSGFzTG9hZGVkKCkg
PyBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSA6IDA7CiAgICAgQk9PTCBpZ25vcmVP
cmllbnRhdGlvbiA9IFlFUzsKIApAQCAtMTQ5NSw3ICsxNDgwLDcgQEAgQk9PTCBIVE1MQ29udmVy
dGVyOjpfYWRkQXR0YWNobWVudEZvckVsZQogICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBuaWw7
CiAgICAgfQogICAgIGlmICghZmlsZVdyYXBwZXIgJiYgIW5vdEZvdW5kKSB7Ci0gICAgICAgIGZp
bGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JVUkwoX2RhdGFTb3VyY2UsIHVybCk7CisgICAgICAg
IGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JVUkwobV9kYXRhU291cmNlLCB1cmwpOwogICAg
ICAgICBpZiAodXNlUGxhY2Vob2xkZXIgJiYgZmlsZVdyYXBwZXIgJiYgW1tbW2ZpbGVXcmFwcGVy
IHByZWZlcnJlZEZpbGVuYW1lXSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJpbmddIGhhc1By
ZWZpeDpAImh0bSJdKQogICAgICAgICAgICAgbm90Rm91bmQgPSBZRVM7CiAgICAgICAgIGlmIChu
b3RGb3VuZCkKQEAgLTE1NTAsNyArMTUzNSw3IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X2FkZEF0
dGFjaG1lbnRGb3JFbGUKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gW3N0cmluZyBs
ZW5ndGhdOwogICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VT
dGFydEluZGV4KQogICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVw
bGFjZS5sZW5ndGg7Ci0gICAgICAgIGF0dHJzID0gX2F0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1l
bnQpOworICAgICAgICBhdHRycyA9IGF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOwogICAg
ICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgW19hdHRy
U3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwogICAgICAgICAg
ICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gMTsKQEAgLTE1NjIsNyArMTU0Nyw3IEBAIEJPT0wg
SFRNTENvbnZlcnRlcjo6X2FkZEF0dGFjaG1lbnRGb3JFbGUKICAgICByZXR1cm4gcmV0dmFsOwog
fQogCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRRdW90ZUZvckVsZW1lbnQoRE9NRWxlbWVudCAq
ZWxlbWVudCwgQk9PTCBvcGVuaW5nLCBOU0ludGVnZXIgbGV2ZWwpCit2b2lkIEhUTUxDb252ZXJ0
ZXI6Ol9hZGRRdW90ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQk9PTCBvcGVuaW5nLCBO
U0ludGVnZXIgbGV2ZWwpCiB7CiAgICAgdW5pY2hhciBjID0gKChsZXZlbCAlIDIpID09IDApID8g
KG9wZW5pbmcgPyAweDIwMWMgOiAweDIwMWQpIDogKG9wZW5pbmcgPyAweDIwMTggOiAweDIwMTkp
OwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aENoYXJhY3RlcnM6JmMgbGVuZ3RoOjFdKTsKQEAgLTE1NzIsMTMgKzE1NTcs
MTMgQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkUXVvdGVGb3JFbGVtZW50KAogICAgIHJhbmdl
VG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKICAgICBpZiAocmFuZ2VUb1JlcGxh
Y2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQogICAgICAgICBfZG9tUmFuZ2VTdGFy
dEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9u
YXJ5PiBhdHRycyA9IF9hdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PiBhdHRycyA9IGF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOwog
ICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQogICAgICAgICBbX2F0dHJTdHIgc2V0
QXR0cmlidXRlczphdHRycy5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07CiAgICAgX2ZsYWdz
LmlzU29mdCA9IE5POwogfQogCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRWYWx1ZShOU1N0cmlu
ZyAqdmFsdWUsIERPTUVsZW1lbnQgKmVsZW1lbnQpCit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRW
YWx1ZShOU1N0cmluZyAqdmFsdWUsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgTlNVSW50ZWdl
ciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07CiAgICAgTlNVSW50ZWdlciB2YWx1ZUxl
bmd0aCA9IFt2YWx1ZSBsZW5ndGhdOwpAQCAtMTU4OCw3ICsxNTczLDcgQEAgdm9pZCBIVE1MQ29u
dmVydGVyOjpfYWRkVmFsdWUoTlNTdHJpbmcgKgogICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5n
dGggPSB2YWx1ZUxlbmd0aDsKICAgICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxvY2F0aW9uIDwg
X2RvbVJhbmdlU3RhcnRJbmRleCkKICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0g
cmFuZ2VUb1JlcGxhY2UubGVuZ3RoOwotICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBh
dHRycyA9IF9hdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4gYXR0cnMgPSBhdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50KTsKICAg
ICAgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCiAgICAgICAgICAgICBbX2F0dHJT
dHIgc2V0QXR0cmlidXRlczphdHRycy5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07CiAgICAg
ICAgIF9mbGFncy5pc1NvZnQgPSBOTzsKQEAgLTE4MDYsMzkgKzE3OTEsMjggQEAgdm9pZCBIVE1M
Q29udmVydGVyOjpfcHJvY2Vzc01ldGFFbGVtZW50VwogICAgICAgICBbX2RvY3VtZW50QXR0cnMg
c2V0T2JqZWN0OmNvbnRlbnQgZm9yS2V5OmtleV07CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6
X3Byb2Nlc3NIZWFkRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQordm9pZCBIVE1MQ29udmVy
dGVyOjpfcHJvY2Vzc0hlYWRFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgLy8gPz8/
IHNob3VsZCBnYXRoZXIgZGF0YSBmcm9tIG90aGVyIHNvdXJjZXMgZS5nLiBXb3JkLCBidXQgZm9y
IHRoYXQgd2Ugd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGdldCBjb21tZW50cyBmcm9tIERPTQot
ICAgIE5TQXJyYXkgKmNoaWxkTm9kZXMgPSBfY2hpbGRyZW5Gb3JOb2RlKGVsZW1lbnQpOwotICAg
IE5TVUludGVnZXIgY291bnQgPSBbY2hpbGROb2RlcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBET01Ob2RlICpub2RlID0gW2No
aWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbm9kZVR5
cGUgPSBbbm9kZSBub2RlVHlwZV07Ci0gICAgICAgIGlmIChET01fRUxFTUVOVF9OT0RFID09IG5v
ZGVUeXBlKSB7Ci0gICAgICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQg
Kilub2RlOwotICAgICAgICAgICAgTlNTdHJpbmcgKnRhZyA9IFtlbGVtZW50IHRhZ05hbWVdOwot
ICAgICAgICAgICAgaWYgKFtAIk1FVEEiIGlzRXF1YWxUb1N0cmluZzp0YWddICYmIFtlbGVtZW50
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobmFtZSldICYmIFtlbGVtZW50IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudCldKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJp
bmcgKm5hbWUgPSBbKERPTUhUTUxNZXRhRWxlbWVudCAqKWVsZW1lbnQgbmFtZV07Ci0gICAgICAg
ICAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnQgPSBbKERPTUhUTUxNZXRhRWxlbWVudCAqKWVsZW1l
bnQgY29udGVudF07Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgY29udGVudCkKLSAgICAg
ICAgICAgICAgICAgICAgX3Byb2Nlc3NNZXRhRWxlbWVudFdpdGhOYW1lKG5hbWUsIGNvbnRlbnQp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgLy8gRklYTUU6IFNob3VsZCBnYXRoZXIg
ZGF0YSBmcm9tIG90aGVyIHNvdXJjZXMgZS5nLiBXb3JkLCBidXQgZm9yIHRoYXQgd2Ugd291bGQg
bmVlZCB0byBiZSBhYmxlIHRvIGdldCBjb21tZW50cyBmcm9tIERPTQorICAgIAorICAgIGZvciAo
SFRNTE1ldGFFbGVtZW50KiBjaGlsZCA9IFRyYXZlcnNhbDxIVE1MTWV0YUVsZW1lbnQ+OjpmaXJz
dENoaWxkKCZlbGVtZW50KTsgY2hpbGQ7IGNoaWxkID0gVHJhdmVyc2FsPEhUTUxNZXRhRWxlbWVu
dD46Om5leHRTaWJsaW5nKGNoaWxkKSkgeworICAgICAgICBOU1N0cmluZyAqbmFtZSA9IGNoaWxk
LT5uYW1lKCk7CisgICAgICAgIE5TU3RyaW5nICpjb250ZW50ID0gY2hpbGQtPmNvbnRlbnQoKTsK
KyAgICAgICAgaWYgKG5hbWUgJiYgY29udGVudCkKKyAgICAgICAgICAgIF9wcm9jZXNzTWV0YUVs
ZW1lbnRXaXRoTmFtZShuYW1lLCBjb250ZW50KTsKICAgICB9CiB9CiAKLUJPT0wgSFRNTENvbnZl
cnRlcjo6X2VudGVyRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBCT09MIGVtYmVkZGVkKQor
Qk9PTCBIVE1MQ29udmVydGVyOjpfZW50ZXJFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIEJPT0wg
ZW1iZWRkZWQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIEVsZW1lbnQmIGNvcmVFbGVt
ZW50ID0gKmNvcmUoZWxlbWVudCk7Ci0gICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9IF9jYWNoZXMt
PnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpOwor
ICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShl
bGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpOwogCi0gICAgaWYgKGNvcmVFbGVtZW50Lmhhc1Rh
Z05hbWUoaGVhZFRhZykgJiYgIWVtYmVkZGVkKQorICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUo
aGVhZFRhZykgJiYgIWVtYmVkZGVkKQogICAgICAgICBfcHJvY2Vzc0hlYWRFbGVtZW50KGVsZW1l
bnQpOwogICAgIGVsc2UgaWYgKCFkaXNwbGF5VmFsdWUubGVuZ3RoKCkgfHwgIShkaXNwbGF5VmFs
dWUgPT0gIm5vbmUiIHx8IGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtY29sdW1uIiB8fCBkaXNwbGF5
VmFsdWUgPT0gInRhYmxlLWNvbHVtbi1ncm91cCIpKSB7Ci0gICAgICAgIGlmIChfY2FjaGVzLT5p
c0Jsb2NrRWxlbWVudChjb3JlRWxlbWVudCkgJiYgIWNvcmVFbGVtZW50Lmhhc1RhZ05hbWUoYnJU
YWcpICYmICEoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1jZWxsIiAmJiBbX3RleHRUYWJsZXMgY291
bnRdID09IDApCi0gICAgICAgICAgICAmJiAhKFtfdGV4dExpc3RzIGNvdW50XSA+IDAgJiYgZGlz
cGxheVZhbHVlID09ICJibG9jayIgJiYgIWNvcmVFbGVtZW50Lmhhc1RhZ05hbWUobGlUYWcpICYm
ICFjb3JlRWxlbWVudC5oYXNUYWdOYW1lKHVsVGFnKSAmJiAhY29yZUVsZW1lbnQuaGFzVGFnTmFt
ZShvbFRhZykpKQotICAgICAgICAgICAgX25ld1BhcmFncmFwaEZvckVsZW1lbnQoZWxlbWVudCwg
W2VsZW1lbnQgdGFnTmFtZV0sIE5PLCBZRVMpOworICAgICAgICBpZiAoX2NhY2hlcy0+aXNCbG9j
a0VsZW1lbnQoZWxlbWVudCkgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZShiclRhZykgJiYgIShkaXNw
bGF5VmFsdWUgPT0gInRhYmxlLWNlbGwiICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPT0gMCkKKyAg
ICAgICAgICAgICYmICEoW190ZXh0TGlzdHMgY291bnRdID4gMCAmJiBkaXNwbGF5VmFsdWUgPT0g
ImJsb2NrIiAmJiAhZWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSAmJiAhZWxlbWVudC5oYXNUYWdO
YW1lKHVsVGFnKSAmJiAhZWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkpCisgICAgICAgICAgICBf
bmV3UGFyYWdyYXBoRm9yRWxlbWVudChlbGVtZW50LCBlbGVtZW50LnRhZ05hbWUoKSwgTk8sIFlF
Uyk7CiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQogICAgIHJldHVybiBOTzsKQEAgLTE4ODQs
NyArMTg1OCw3IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFRhYmxlRm9yRWxlbWVudCgKICAg
ICBbX3RleHRUYWJsZVJvd0FycmF5cyBhZGRPYmplY3Q6W05TTXV0YWJsZUFycmF5IGFycmF5XV07
CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQoRE9NRWxl
bWVudCAqdGFibGVDZWxsRWxlbWVudCkKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFRhYmxlQ2Vs
bEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBOU1RleHRUYWJsZSAqdGFibGUg
PSBbX3RleHRUYWJsZXMgbGFzdE9iamVjdF07CiAgICAgTlNJbnRlZ2VyIHJvd051bWJlciA9IFtb
X3RleHRUYWJsZVJvd3MgbGFzdE9iamVjdF0gaW50ZWdlclZhbHVlXTsKQEAgLTE5MDIsMjUgKzE4
NzYsMjYgQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkVGFibGVDZWxsRm9yRWxlbQogICAgICAg
ICBpZiAoY29sdW1uTnVtYmVyID49IFtwcmV2aW91c0Jsb2NrIHN0YXJ0aW5nQ29sdW1uXSAmJiBj
b2x1bW5OdW1iZXIgPCBbcHJldmlvdXNCbG9jayBzdGFydGluZ0NvbHVtbl0gKyBbcHJldmlvdXNC
bG9jayBjb2x1bW5TcGFuXSkKICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IFtwcmV2aW91c0Js
b2NrIHN0YXJ0aW5nQ29sdW1uXSArIFtwcmV2aW91c0Jsb2NrIGNvbHVtblNwYW5dOwogICAgIH0K
LSAgICBpZiAodGFibGVDZWxsRWxlbWVudCkgewotICAgICAgICBpZiAoW3RhYmxlQ2VsbEVsZW1l
bnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihyb3dTcGFuKV0pIHsKLSAgICAgICAgICAg
IHJvd1NwYW4gPSBbKERPTUhUTUxUYWJsZUNlbGxFbGVtZW50ICopdGFibGVDZWxsRWxlbWVudCBy
b3dTcGFuXTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNUZXh0VGFibGVCbG9jaz4gYmxvY2s7Cisg
ICAgCisgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGlzSFRNTFRhYmxlQ2VsbEVsZW1l
bnQoKmVsZW1lbnQpKSB7CisgICAgICAgICAgICBIVE1MVGFibGVDZWxsRWxlbWVudCYgdGFibGVD
ZWxsRWxlbWVudCA9IHRvSFRNTFRhYmxlQ2VsbEVsZW1lbnQoKmVsZW1lbnQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICByb3dTcGFuID0gdGFibGVDZWxsRWxlbWVudC5yb3dTcGFuKCk7CiAg
ICAgICAgICAgICBpZiAocm93U3BhbiA8IDEpCiAgICAgICAgICAgICAgICAgcm93U3BhbiA9IDE7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFt0YWJsZUNlbGxFbGVtZW50IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoY29sU3BhbildKSB7Ci0gICAgICAgICAgICBjb2xTcGFuID0gWyhET01I
VE1MVGFibGVDZWxsRWxlbWVudCAqKXRhYmxlQ2VsbEVsZW1lbnQgY29sU3Bhbl07CisgICAgICAg
ICAgICBjb2xTcGFuID0gdGFibGVDZWxsRWxlbWVudC5jb2xTcGFuKCk7CiAgICAgICAgICAgICBp
ZiAoY29sU3BhbiA8IDEpCiAgICAgICAgICAgICAgICAgY29sU3BhbiA9IDE7CiAgICAgICAgIH0K
LSAgICB9Ci0gICAgUmV0YWluUHRyPE5TVGV4dFRhYmxlQmxvY2s+IGJsb2NrID0gYWRvcHROUyhb
W1BsYXRmb3JtTlNUZXh0VGFibGVCbG9jayBhbGxvY10gaW5pdFdpdGhUYWJsZTp0YWJsZSBzdGFy
dGluZ1Jvdzpyb3dOdW1iZXIgcm93U3Bhbjpyb3dTcGFuIHN0YXJ0aW5nQ29sdW1uOmNvbHVtbk51
bWJlciBjb2x1bW5TcGFuOmNvbFNwYW5dKTsKLSAgICBpZiAodGFibGVDZWxsRWxlbWVudCkgewot
ICAgICAgICBFbGVtZW50JiBjb3JlVGFibGVDZWxsRWxlbWVudCA9ICpjb3JlKHRhYmxlQ2VsbEVs
ZW1lbnQpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIHZlcnRpY2FsQWxpZ24gPSBfY2FjaGVz
LT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlVGFibGVDZWxsRWxlbWVudCwgQ1NTUHJvcGVydHlW
ZXJ0aWNhbEFsaWduKTsKKyAgICAgICAgYmxvY2sgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRU
YWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJvd051bWJl
ciByb3dTcGFuOnJvd1NwYW4gc3RhcnRpbmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVtblNwYW46
Y29sU3Bhbl0pOwogICAgICAgICAKLSAgICAgICAgX2ZpbGxJbkJsb2NrKGJsb2NrLmdldCgpLCBj
b3JlVGFibGVDZWxsRWxlbWVudCwgY29sb3IsIGNlbGxTcGFjaW5nVmFsIC8gMiwgMCwgTk8pOwor
ICAgICAgICBTdHJpbmcgdmVydGljYWxBbGlnbiA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JO
b2RlKCplbGVtZW50LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgICAgICAKKyAgICAg
ICAgX2ZpbGxJbkJsb2NrKGJsb2NrLmdldCgpLCAqZWxlbWVudCwgY29sb3IsIGNlbGxTcGFjaW5n
VmFsIC8gMiwgMCwgTk8pOwogICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PSAibWlkZGxlIikK
ICAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja01pZGRs
ZUFsaWdubWVudF07CiAgICAgICAgIGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gImJvdHRvbSIp
CkBAIC0xOTI5LDYzICsxOTA0LDY1IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFRhYmxlQ2Vs
bEZvckVsZW0KICAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRC
bG9ja0Jhc2VsaW5lQWxpZ25tZW50XTsKICAgICAgICAgZWxzZSBpZiAodmVydGljYWxBbGlnbiA9
PSAidG9wIikKICAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRC
bG9ja1RvcEFsaWdubWVudF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmxvY2sgPSBhZG9wdE5T
KFtbUGxhdGZvcm1OU1RleHRUYWJsZUJsb2NrIGFsbG9jXSBpbml0V2l0aFRhYmxlOnRhYmxlIHN0
YXJ0aW5nUm93OnJvd051bWJlciByb3dTcGFuOnJvd1NwYW4gc3RhcnRpbmdDb2x1bW46Y29sdW1u
TnVtYmVyIGNvbHVtblNwYW46Y29sU3Bhbl0pOwogICAgIH0KKyAgICAKICAgICBbX3RleHRCbG9j
a3MgYWRkT2JqZWN0OmJsb2NrLmdldCgpXTsKICAgICBbcm93QXJyYXkgYWRkT2JqZWN0OmJsb2Nr
LmdldCgpXTsKICAgICBbcm93QXJyYXkgc29ydFVzaW5nRnVuY3Rpb246X2NvbENvbXBhcmUgY29u
dGV4dDpOVUxMXTsKIH0KIAotQk9PTCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc0VsZW1lbnQoRE9N
RWxlbWVudCAqZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoKQorQk9PTCBIVE1MQ29udmVydGVyOjpf
cHJvY2Vzc0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoKQogewotICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIE5POwogICAgIEJPT0wgcmV0dmFsID0gWUVT
OwotICAgIEVsZW1lbnQmIGNvcmVFbGVtZW50ID0gKmNvcmUoZWxlbWVudCk7Ci0gICAgQk9PTCBp
c0Jsb2NrTGV2ZWwgPSBfY2FjaGVzLT5pc0Jsb2NrRWxlbWVudChjb3JlRWxlbWVudCk7Ci0gICAg
U3RyaW5nIGRpc3BsYXlWYWx1ZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVF
bGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpOworICAgIEJPT0wgaXNCbG9ja0xldmVsID0gX2Nh
Y2hlcy0+aXNCbG9ja0VsZW1lbnQoZWxlbWVudCk7CisgICAgU3RyaW5nIGRpc3BsYXlWYWx1ZSA9
IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxh
eSk7CiAgICAgaWYgKGlzQmxvY2tMZXZlbCkKICAgICAgICAgW193cml0aW5nRGlyZWN0aW9uQXJy
YXkgcmVtb3ZlQWxsT2JqZWN0c107CiAgICAgZWxzZSB7Ci0gICAgICAgIFN0cmluZyBiaWRpID0g
X2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUVsZW1lbnQsIENTU1Byb3BlcnR5VW5p
Y29kZUJpZGkpOworICAgICAgICBTdHJpbmcgYmlkaSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVG
b3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwogICAgICAgICBpZiAoYmlk
aSA9PSAiZW1iZWQiKSB7CiAgICAgICAgICAgICBOU1VJbnRlZ2VyIHZhbCA9IE5TVGV4dFdyaXRp
bmdEaXJlY3Rpb25FbWJlZGRpbmc7Ci0gICAgICAgICAgICBpZiAoX2NhY2hlcy0+cHJvcGVydHlW
YWx1ZUZvck5vZGUoY29yZUVsZW1lbnQsIENTU1Byb3BlcnR5RGlyZWN0aW9uKSA9PSAicnRsIikK
KyAgICAgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBD
U1NQcm9wZXJ0eURpcmVjdGlvbikgPT0gInJ0bCIpCiAgICAgICAgICAgICAgICAgdmFsIHw9IE5T
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwogICAgICAgICAgICAgW193cml0aW5nRGlyZWN0
aW9uQXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOnZh
bF1dOwogICAgICAgICB9IGVsc2UgaWYgKGJpZGkgPT0gImJpZGktb3ZlcnJpZGUiKSB7CiAgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHZhbCA9IE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25PdmVycmlkZTsK
LSAgICAgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlRWxlbWVu
dCwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pID09ICJydGwiKQorICAgICAgICAgICAgaWYgKF9jYWNo
ZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlyZWN0aW9uKSA9
PSAicnRsIikKICAgICAgICAgICAgICAgICB2YWwgfD0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRU
b0xlZnQ7CiAgICAgICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSBhZGRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6dmFsXV07CiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKGRpc3BsYXlWYWx1ZSA9PSAidGFibGUiIHx8IChbX3RleHRUYWJsZXMgY291bnRd
ID09IDAgJiYgZGlzcGxheVZhbHVlID09ICJ0YWJsZS1yb3ctZ3JvdXAiKSkgewotICAgICAgICBF
bGVtZW50KiB0YWJsZUVsZW1lbnQgPSAmY29yZUVsZW1lbnQ7CisgICAgICAgIEVsZW1lbnQqIHRh
YmxlRWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJs
ZS1yb3ctZ3JvdXAiKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcgaW4gbWVk
aWFzIHJlcywgdGhlIGZpcnN0IHRoaW5nIHdlIHNlZSBtYXkgYmUgdGhlIHRib2R5LCBzbyBnbyB1
cCB0byB0aGUgdGFibGUKLSAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9IF9ibG9ja0xldmVsRWxl
bWVudEZvck5vZGUoY29yZUVsZW1lbnQucGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgIHRhYmxl
RWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoZWxlbWVudC5wYXJlbnROb2RlKCkp
OwogICAgICAgICAgICAgaWYgKCF0YWJsZUVsZW1lbnQgfHwgX2NhY2hlcy0+cHJvcGVydHlWYWx1
ZUZvck5vZGUoKnRhYmxlRWxlbWVudCwgQ1NTUHJvcGVydHlEaXNwbGF5KSAhPSAidGFibGUiKQot
ICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9ICZjb3JlRWxlbWVudDsKKyAgICAgICAgICAg
ICAgICB0YWJsZUVsZW1lbnQgPSAmZWxlbWVudDsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAo
W190ZXh0VGFibGVzIGNvdW50XSA+IFtfdGV4dEJsb2NrcyBjb3VudF0pCiAgICAgICAgICAgICBf
YWRkVGFibGVDZWxsRm9yRWxlbWVudChuaWwpOwogICAgICAgICBfYWRkVGFibGVGb3JFbGVtZW50
KHRhYmxlRWxlbWVudCk7CiAgICAgfSBlbHNlIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlLWZv
b3Rlci1ncm91cCIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsKLSAgICAgICAgW190ZXh0
VGFibGVGb290ZXJzIHNldE9iamVjdDplbGVtZW50IGZvcktleTpbTlNWYWx1ZSB2YWx1ZVdpdGhO
b25yZXRhaW5lZE9iamVjdDpbX3RleHRUYWJsZXMgbGFzdE9iamVjdF1dXTsKKyAgICAgICAgbV90
ZXh0VGFibGVGb290ZXJzLmFkZChbX3RleHRUYWJsZXMgbGFzdE9iamVjdF0sICZlbGVtZW50KTsK
ICAgICAgICAgcmV0dmFsID0gTk87CiAgICAgfSBlbHNlIGlmIChkaXNwbGF5VmFsdWUgPT0gInRh
YmxlLXJvdyIgJiYgW190ZXh0VGFibGVzIGNvdW50XSA+IDApIHsKLSAgICAgICAgUGxhdGZvcm1D
b2xvciAqY29sb3IgPSBfY29sb3JGb3JFbGVtZW50KGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcik7Ci0gICAgICAgIGlmICghY29sb3IpIGNvbG9yID0gW1BsYXRmb3JtQ29s
b3JDbGFzcyBjbGVhckNvbG9yXTsKKyAgICAgICAgUGxhdGZvcm1Db2xvciAqY29sb3IgPSBfY29s
b3JGb3JFbGVtZW50KGVsZW1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICAg
ICAgaWYgKCFjb2xvcikKKyAgICAgICAgICAgIGNvbG9yID0gW1BsYXRmb3JtQ29sb3JDbGFzcyBj
bGVhckNvbG9yXTsKICAgICAgICAgW190ZXh0VGFibGVSb3dCYWNrZ3JvdW5kQ29sb3JzIGFkZE9i
amVjdDpjb2xvcl07CiAgICAgfSBlbHNlIGlmIChkaXNwbGF5VmFsdWUgPT0gInRhYmxlLWNlbGwi
KSB7CiAgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwgW190ZXh0QmxvY2tzIGNv
dW50XSArIDEpCiAgICAgICAgICAgICBfYWRkVGFibGVGb3JFbGVtZW50KG5pbCk7Ci0gICAgICAg
IF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgIH0gZWxzZSBpZiAoY29yZUVs
ZW1lbnQuaGFzVGFnTmFtZShpbWdUYWcpKSB7Ci0gICAgICAgIE5TU3RyaW5nICp1cmxTdHJpbmcg
PSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJzcmMiXTsKKyAgICAgICAgX2FkZFRhYmxlQ2VsbEZv
ckVsZW1lbnQoJmVsZW1lbnQpOworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKGlt
Z1RhZykpIHsKKyAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKHNyY0F0dHIpOwogICAgICAgICBpZiAodXJsU3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3Ro
XSA+IDApIHsKLSAgICAgICAgICAgIE5TVVJMICp1cmwgPSBjb3JlKFtlbGVtZW50IG93bmVyRG9j
dW1lbnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVy
bFN0cmluZykpOwotICAgICAgICAgICAgaWYgKCF1cmwpIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdp
dGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0No
YXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9V
Ukw6X2Jhc2VVUkxdOworICAgICAgICAgICAgTlNVUkwgKnVybCA9IGVsZW1lbnQuZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5n
KSk7CisgICAgICAgICAgICBpZiAoIXVybCkKKyAgICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwg
X3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJ
blNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSBy
ZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgICAgICBC
T09MIHVzZVBsYWNlaG9sZGVySW1hZ2UgPSBOTzsKICNlbHNlCkBAIC0xOTk1LDM1ICsxOTcyLDM1
IEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KERPTUUKICAgICAgICAgICAg
ICAgICBfYWRkQXR0YWNobWVudEZvckVsZW1lbnQoZWxlbWVudCwgdXJsLCBpc0Jsb2NrTGV2ZWws
IHVzZVBsYWNlaG9sZGVySW1hZ2UpOwogICAgICAgICB9CiAgICAgICAgIHJldHZhbCA9IE5POwot
ICAgIH0gZWxzZSBpZiAoY29yZUVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAg
ICAgIE5TU3RyaW5nICpiYXNlU3RyaW5nID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY29kZWJh
c2UiXTsKLSAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtlbGVtZW50IGdldEF0dHJpYnV0
ZTpAImRhdGEiXTsKLSAgICAgICAgTlNTdHJpbmcgKmRlY2xhcmVTdHJpbmcgPSBbZWxlbWVudCBn
ZXRBdHRyaWJ1dGU6QCJkZWNsYXJlIl07CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUob2JqZWN0VGFnKSkgeworICAgICAgICBOU1N0cmluZyAqYmFzZVN0cmluZyA9IGVsZW1lbnQu
Z2V0QXR0cmlidXRlKGNvZGViYXNlQXR0cik7CisgICAgICAgIE5TU3RyaW5nICp1cmxTdHJpbmcg
PSBlbGVtZW50LmdldEF0dHJpYnV0ZShkYXRhQXR0cik7CisgICAgICAgIE5TU3RyaW5nICpkZWNs
YXJlU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoZGVjbGFyZUF0dHIpOwogICAgICAgICBp
ZiAodXJsU3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3RoXSA+IDAgJiYgIVtAInRydWUiIGlzRXF1
YWxUb1N0cmluZzpkZWNsYXJlU3RyaW5nXSkgewogICAgICAgICAgICAgTlNVUkwgKmJhc2VVUkwg
PSBuaWw7CiAgICAgICAgICAgICBOU1VSTCAqdXJsID0gbmlsOwogICAgICAgICAgICAgaWYgKGJh
c2VTdHJpbmcgJiYgW2Jhc2VTdHJpbmcgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgICAgICAgICBi
YXNlVVJMID0gY29yZShbZWxlbWVudCBvd25lckRvY3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlw
TGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhiYXNlU3RyaW5nKSk7CisgICAgICAgICAgICAg
ICAgYmFzZVVSTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoYmFzZVN0cmluZykpOwogICAgICAgICAgICAgICAgIGlmICgh
YmFzZVVSTCkKICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTCA9IFtOU1VSTCBfd2ViX1VSTFdp
dGhTdHJpbmc6W2Jhc2VTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlND
aGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSByZWxhdGl2ZVRv
VVJMOl9iYXNlVVJMXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChiYXNlVVJMKQog
ICAgICAgICAgICAgICAgIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmlu
ZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNw
YWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6YmFzZVVSTF07CiAgICAg
ICAgICAgICBpZiAoIXVybCkKLSAgICAgICAgICAgICAgICB1cmwgPSBjb3JlKFtlbGVtZW50IG93
bmVyRG9jdW1lbnRdKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKHVybFN0cmluZykpOworICAgICAgICAgICAgICAgIHVybCA9IGVsZW1lbnQuZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5n
KSk7CiAgICAgICAgICAgICBpZiAoIXVybCkKICAgICAgICAgICAgICAgICB1cmwgPSBbTlNVUkwg
X3dlYl9VUkxXaXRoU3RyaW5nOlt1cmxTdHJpbmcgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJ
blNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXSBy
ZWxhdGl2ZVRvVVJMOl9iYXNlVVJMXTsKICAgICAgICAgICAgIGlmICh1cmwpCiAgICAgICAgICAg
ICAgICAgcmV0dmFsID0gIV9hZGRBdHRhY2htZW50Rm9yRWxlbWVudChlbGVtZW50LCB1cmwsIGlz
QmxvY2tMZXZlbCwgTk8pOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5o
YXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBjb3JlRWxlbWVudC5oYXNUYWdOYW1lKGlmcmFtZVRhZykp
IHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSB0b0hUTUxGcmFtZUVs
ZW1lbnRCYXNlKGNvcmVFbGVtZW50KS5jb250ZW50RG9jdW1lbnQoKSkgewotICAgICAgICAgICAg
X3RyYXZlcnNlTm9kZShjb250ZW50RG9jdW1lbnQsIGRlcHRoICsgMSwgdHJ1ZSAvKiBlbWJlZGRl
ZCAqLyk7CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQuaGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogY29u
dGVudERvY3VtZW50ID0gdG9IVE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KS5jb250ZW50RG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgX3RyYXZlcnNlTm9kZSgqY29udGVudERvY3VtZW50LCBk
ZXB0aCArIDEsIHRydWUgLyogZW1iZWRkZWQgKi8pOwogICAgICAgICAgICAgcmV0dmFsID0gTk87
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNvcmVFbGVtZW50Lmhhc1RhZ05hbWUoYnJUYWcp
KSB7Ci0gICAgICAgIEVsZW1lbnQqIGJsb2NrRWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZv
ck5vZGUoY29yZUVsZW1lbnQucGFyZW50Tm9kZSgpKTsKLSAgICAgICAgTlNTdHJpbmcgKmJyZWFr
Q2xhc3MgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJjbGFzcyJdOworICAgIH0gZWxzZSBpZiAo
ZWxlbWVudC5oYXNUYWdOYW1lKGJyVGFnKSkgeworICAgICAgICBFbGVtZW50KiBibG9ja0VsZW1l
bnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKGVsZW1lbnQucGFyZW50Tm9kZSgpKTsKKyAg
ICAgICAgTlNTdHJpbmcgKmJyZWFrQ2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpOwogICAgICAgICBOU1N0cmluZyAqYmxvY2tUYWcgPSBibG9ja0VsZW1lbnQgPyAoTlNTdHJp
bmcgKilibG9ja0VsZW1lbnQtPnRhZ05hbWUoKSA6IG5pbDsKICAgICAgICAgQk9PTCBpc0V4dHJh
QnJlYWsgPSBbQCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJpbmc6YnJl
YWtDbGFzc107CiAgICAgICAgIEJPT0wgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGggPSAoW0AiUCIg
aXNFcXVhbFRvU3RyaW5nOmJsb2NrVGFnXSB8fCBbQCJMSSIgaXNFcXVhbFRvU3RyaW5nOmJsb2Nr
VGFnXSB8fCAoW2Jsb2NrVGFnIGhhc1ByZWZpeDpAIkgiXSAmJiAyID09IFtibG9ja1RhZyBsZW5n
dGhdKSk7CkBAIC0yMDMzLDM3ICsyMDEwLDQxIEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nl
c3NFbGVtZW50KERPTUUKICAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQgJiYgYmxvY2tFbGVt
ZW50SXNQYXJhZ3JhcGgpCiAgICAgICAgICAgICAgICAgX25ld0xpbmVGb3JFbGVtZW50KGVsZW1l
bnQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIF9uZXdQYXJhZ3JhcGhGb3JF
bGVtZW50KGVsZW1lbnQsIFtlbGVtZW50IHRhZ05hbWVdLCBZRVMsIE5PKTsKKyAgICAgICAgICAg
ICAgICBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudChlbGVtZW50LCBlbGVtZW50LnRhZ05hbWUoKSwg
WUVTLCBOTyk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNvcmVFbGVtZW50Lmhhc1RhZ05h
bWUodWxUYWcpKSB7CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUodWxUYWcpKSB7
CiAgICAgICAgIFJldGFpblB0cjxOU1RleHRMaXN0PiBsaXN0OwotICAgICAgICBTdHJpbmcgbGlz
dFN0eWxlVHlwZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBD
U1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUpOworICAgICAgICBTdHJpbmcgbGlzdFN0eWxlVHlwZSA9
IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TGlzdFN0
eWxlVHlwZSk7CiAgICAgICAgIGlmICghbGlzdFN0eWxlVHlwZS5sZW5ndGgoKSkKICAgICAgICAg
ICAgIGxpc3RTdHlsZVR5cGUgPSBAImRpc2MiOwogICAgICAgICBsaXN0ID0gYWRvcHROUyhbW1Bs
YXRmb3JtTlNUZXh0TGlzdCBhbGxvY10gaW5pdFdpdGhNYXJrZXJGb3JtYXQ6U3RyaW5nKCJ7IiAr
IGxpc3RTdHlsZVR5cGUgKyAifSIpIG9wdGlvbnM6MF0pOwogICAgICAgICBbX3RleHRMaXN0cyBh
ZGRPYmplY3Q6bGlzdC5nZXQoKV07Ci0gICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5oYXNUYWdO
YW1lKG9sVGFnKSkgeworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkg
ewogICAgICAgICBSZXRhaW5QdHI8TlNUZXh0TGlzdD4gbGlzdDsKLSAgICAgICAgU3RyaW5nIGxp
c3RTdHlsZVR5cGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjb3JlRWxlbWVudCwg
Q1NTUHJvcGVydHlMaXN0U3R5bGVUeXBlKTsKKyAgICAgICAgU3RyaW5nIGxpc3RTdHlsZVR5cGUg
PSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUxpc3RT
dHlsZVR5cGUpOwogICAgICAgICBpZiAoIWxpc3RTdHlsZVR5cGUubGVuZ3RoKCkpCiAgICAgICAg
ICAgICBsaXN0U3R5bGVUeXBlID0gImRlY2ltYWwiOwogICAgICAgICBsaXN0ID0gYWRvcHROUyhb
W1BsYXRmb3JtTlNUZXh0TGlzdCBhbGxvY10gaW5pdFdpdGhNYXJrZXJGb3JtYXQ6U3RyaW5nKCJ7
IiArIGxpc3RTdHlsZVR5cGUgKyAifSIpIG9wdGlvbnM6MF0pOwotICAgICAgICBpZiAoW2VsZW1l
bnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzdGFydCldKSB7Ci0gICAgICAgICAgICBO
U0ludGVnZXIgc3RhcnRpbmdJdGVtTnVtYmVyID0gWyhET01IVE1MT0xpc3RFbGVtZW50ICopZWxl
bWVudCBzdGFydF07CisgICAgICAgIGlmIChpc0hUTUxPTGlzdEVsZW1lbnQoZWxlbWVudCkpIHsK
KyAgICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSB0b0hUTUxPTGlzdEVs
ZW1lbnQoZWxlbWVudCkuc3RhcnQoKTs7CiAgICAgICAgICAgICBbbGlzdCBzZXRTdGFydGluZ0l0
ZW1OdW1iZXI6c3RhcnRpbmdJdGVtTnVtYmVyXTsKICAgICAgICAgfQogICAgICAgICBbX3RleHRM
aXN0cyBhZGRPYmplY3Q6bGlzdC5nZXQoKV07Ci0gICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5o
YXNUYWdOYW1lKHFUYWcpKSB7CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocVRh
ZykpIHsKICAgICAgICAgX2FkZFF1b3RlRm9yRWxlbWVudChlbGVtZW50LCBZRVMsIF9xdW90ZUxl
dmVsKyspOwotICAgIH0gZWxzZSBpZiAoY29yZUVsZW1lbnQuaGFzVGFnTmFtZShpbnB1dFRhZykp
IHsKLSAgICAgICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodHlw
ZSldICYmIFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IodmFsdWUpXSAmJiBb
QCJ0ZXh0IiBjb21wYXJlOlsoRE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1lbnQgdHlwZV0gb3B0
aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAg
ICAgICAgTlNTdHJpbmcgKnZhbHVlID0gWyhET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCB2
YWx1ZV07Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgW3ZhbHVlIGxlbmd0aF0gPiAwKQotICAg
ICAgICAgICAgICAgIF9hZGRWYWx1ZSh2YWx1ZSwgZWxlbWVudCk7CisgICAgfSBlbHNlIGlmIChl
bGVtZW50Lmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIGlmIChpc0hUTUxJbnB1dEVs
ZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxl
bWVudCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChpbnB1
dEVsZW1lbnQudHlwZSgpID09ICJ0ZXh0IikgeworICAgICAgICAgICAgICAgIE5TU3RyaW5nICp2
YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAm
JiBbdmFsdWUgbGVuZ3RoXSA+IDApCisgICAgICAgICAgICAgICAgICAgIF9hZGRWYWx1ZSh2YWx1
ZSwgZWxlbWVudCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNv
cmVFbGVtZW50Lmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7Ci0gICAgICAgIGlmIChbZWxlbWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHZhbHVlKV0pIHsKLSAgICAgICAgICAgIE5T
U3RyaW5nICp2YWx1ZSA9IFsoRE9NSFRNTFRleHRBcmVhRWxlbWVudCAqKWVsZW1lbnQgdmFsdWVd
OworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAg
ICAgICBpZiAoaXNIVE1MVGV4dEFyZWFFbGVtZW50KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBI
VE1MVGV4dEFyZWFFbGVtZW50JiB0ZXh0QXJlYUVsZW1lbnQgPSB0b0hUTUxUZXh0QXJlYUVsZW1l
bnQoZWxlbWVudCk7CisgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSB0ZXh0QXJlYUVsZW1l
bnQudmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBbdmFsdWUgbGVuZ3RoXSA+IDAp
CiAgICAgICAgICAgICAgICAgX2FkZFZhbHVlKHZhbHVlLCBlbGVtZW50KTsKICAgICAgICAgfQpA
QCAtMjExOCw3ICsyMDk5LDggQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlz
dChOUwogICAgICAgICAgICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRyc1Rv
SW5zZXJ0IHJhbmdlOk5TTWFrZVJhbmdlKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uLCBpbnNlcnRM
ZW5ndGgpXTsKICAgICAgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoICs9IGluc2VydExlbmd0
aDsKICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoUmFuZ2UubGVuZ3RoICs9IGluc2VydExl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uIDwg
X2RvbVJhbmdlU3RhcnRJbmRleCkgX2RvbVJhbmdlU3RhcnRJbmRleCArPSBpbnNlcnRMZW5ndGg7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiA8IF9kb21S
YW5nZVN0YXJ0SW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydElu
ZGV4ICs9IGluc2VydExlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIG5ld1N0eWxlID0gW3BhcmFncmFwaFN0eWxlIG11dGFibGVDb3B5XTsKICAgICAgICAg
ICAgICAgICAgICAgbGlzdExvY2F0aW9uID0gKGxpc3RJbmRleCArIDEpICogMzY7CkBAIC0yMTU5
LDQ3ICsyMTQxLDQ1IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZE1hcmtlcnNUb0xpc3QoTlMK
ICAgICB9CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X2V4aXRFbGVtZW50KERPTUVsZW1lbnQg
KmVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCwgTlNVSW50ZWdlciBzdGFydEluZGV4KQordm9pZCBI
VE1MQ29udmVydGVyOjpfZXhpdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgTlNJbnRlZ2VyIGRl
cHRoLCBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAg
IEVsZW1lbnQmIGNvcmVFbGVtZW50ID0gKmNvcmUoZWxlbWVudCk7Ci0gICAgU3RyaW5nIGRpc3Bs
YXlWYWx1ZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQ
cm9wZXJ0eURpc3BsYXkpOworICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSBfY2FjaGVzLT5wcm9w
ZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpc3BsYXkpOwogICAgIE5TUmFu
Z2UgcmFuZ2UgPSBOU01ha2VSYW5nZShzdGFydEluZGV4LCBbX2F0dHJTdHIgbGVuZ3RoXSAtIHN0
YXJ0SW5kZXgpOwotICAgIGlmIChyYW5nZS5sZW5ndGggPiAwICYmIGNvcmVFbGVtZW50Lmhhc1Rh
Z05hbWUoYVRhZykpIHsKLSAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtlbGVtZW50IGdl
dEF0dHJpYnV0ZTpAImhyZWYiXTsKKyAgICBpZiAocmFuZ2UubGVuZ3RoID4gMCAmJiBlbGVtZW50
Lmhhc1RhZ05hbWUoYVRhZykpIHsKKyAgICAgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IGVsZW1l
bnQuZ2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKICAgICAgICAgTlNTdHJpbmcgKnN0cmlwcGVkU3Ry
aW5nID0gW3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJh
Y3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dOwogICAgICAgICBpZiAo
dXJsU3RyaW5nICYmIFt1cmxTdHJpbmcgbGVuZ3RoXSA+IDAgJiYgc3RyaXBwZWRTdHJpbmcgJiYg
W3N0cmlwcGVkU3RyaW5nIGxlbmd0aF0gPiAwICYmICFbc3RyaXBwZWRTdHJpbmcgaGFzUHJlZml4
OkAiIyJdKSB7Ci0gICAgICAgICAgICBOU1VSTCAqdXJsID0gY29yZShbZWxlbWVudCBvd25lckRv
Y3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1
cmxTdHJpbmcpKTsKKyAgICAgICAgICAgIE5TVVJMICp1cmwgPSBlbGVtZW50LmRvY3VtZW50KCku
Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykp
OwogICAgICAgICAgICAgaWYgKCF1cmwpCi0gICAgICAgICAgICAgICAgdXJsID0gY29yZShbZWxl
bWVudCBvd25lckRvY3VtZW50XSktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhzdHJpcHBlZFN0cmluZykpOworICAgICAgICAgICAgICAgIHVybCA9IGVsZW1l
bnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXMoc3RyaXBwZWRTdHJpbmcpKTsKICAgICAgICAgICAgIGlmICghdXJsKQogICAgICAgICAgICAg
ICAgIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6c3RyaXBwZWRTdHJpbmcgcmVsYXRp
dmVUb1VSTDpfYmFzZVVSTF07CiAgICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5T
TGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6dXJsID8gKGlkKXVybCA6IChpZCl1cmxTdHJpbmcgcmFu
Z2U6cmFuZ2VdOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghX2ZsYWdzLnJlYWNoZWRFbmQg
JiYgX2NhY2hlcy0+aXNCbG9ja0VsZW1lbnQoY29yZUVsZW1lbnQpKSB7CisgICAgaWYgKCFfZmxh
Z3MucmVhY2hlZEVuZCAmJiBfY2FjaGVzLT5pc0Jsb2NrRWxlbWVudChlbGVtZW50KSkgewogICAg
ICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3RzXTsKICAgICAgICAg
aWYgKGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtY2VsbCIgJiYgW190ZXh0QmxvY2tzIGNvdW50XSA9
PSAwKSB7CiAgICAgICAgICAgICBfbmV3VGFiRm9yRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAg
fSBlbHNlIGlmIChbX3RleHRMaXN0cyBjb3VudF0gPiAwICYmIGRpc3BsYXlWYWx1ZSA9PSAiYmxv
Y2siICYmICFjb3JlRWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSAmJiAhY29yZUVsZW1lbnQuaGFz
VGFnTmFtZSh1bFRhZykgJiYgIWNvcmVFbGVtZW50Lmhhc1RhZ05hbWUob2xUYWcpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoW190ZXh0TGlzdHMgY291bnRdID4gMCAmJiBkaXNwbGF5VmFsdWUgPT0g
ImJsb2NrIiAmJiAhZWxlbWVudC5oYXNUYWdOYW1lKGxpVGFnKSAmJiAhZWxlbWVudC5oYXNUYWdO
YW1lKHVsVGFnKSAmJiAhZWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkgewogICAgICAgICAgICAg
X25ld0xpbmVGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgX25ld1BhcmFncmFwaEZvckVsZW1lbnQoZWxlbWVudCwgW2VsZW1lbnQgdGFnTmFtZV0sIChy
YW5nZS5sZW5ndGggPT0gMCksIFlFUyk7CisgICAgICAgICAgICBfbmV3UGFyYWdyYXBoRm9yRWxl
bWVudChlbGVtZW50LCBlbGVtZW50LnRhZ05hbWUoKSwgKHJhbmdlLmxlbmd0aCA9PSAwKSwgWUVT
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoW193cml0aW5nRGlyZWN0aW9uQXJyYXkgY291
bnRdID4gMCkgewotICAgICAgICBTdHJpbmcgYmlkaSA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVG
b3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKKyAgICAgICAgU3Ry
aW5nIGJpZGkgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9w
ZXJ0eVVuaWNvZGVCaWRpKTsKICAgICAgICAgaWYgKGJpZGkgPT0gImVtYmVkIiB8fCBiaWRpID09
ICJiaWRpLW92ZXJyaWRlIikKICAgICAgICAgICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJl
bW92ZUxhc3RPYmplY3RdOwogICAgIH0KICAgICByYW5nZSA9IE5TTWFrZVJhbmdlKHN0YXJ0SW5k
ZXgsIFtfYXR0clN0ciBsZW5ndGhdIC0gc3RhcnRJbmRleCk7CiAgICAgaWYgKGRpc3BsYXlWYWx1
ZSA9PSAidGFibGUiICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIE5TVmFs
dWUgKmtleSA9IFtOU1ZhbHVlIHZhbHVlV2l0aE5vbnJldGFpbmVkT2JqZWN0OltfdGV4dFRhYmxl
cyBsYXN0T2JqZWN0XV07Ci0gICAgICAgIERPTU5vZGUgKmZvb3RlciA9IFtfdGV4dFRhYmxlRm9v
dGVycyBvYmplY3RGb3JLZXk6a2V5XTsKKyAgICAgICAgTlNUZXh0VGFibGUgKmtleSA9IFtfdGV4
dFRhYmxlcyBsYXN0T2JqZWN0XTsKKyAgICAgICAgRWxlbWVudCogZm9vdGVyID0gbV90ZXh0VGFi
bGVGb290ZXJzLmdldChrZXkpOwogICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA8
IFtfdGV4dEJsb2NrcyBjb3VudF0gKyAxKQogICAgICAgICAgICAgW190ZXh0QmxvY2tzIHJlbW92
ZUxhc3RPYmplY3RdOwogICAgICAgICBpZiAoZm9vdGVyKSB7Ci0gICAgICAgICAgICBfdHJhdmVy
c2VGb290ZXJOb2RlKGZvb3RlciwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgIFtfdGV4dFRhYmxl
Rm9vdGVycyByZW1vdmVPYmplY3RGb3JLZXk6a2V5XTsKKyAgICAgICAgICAgIF90cmF2ZXJzZUZv
b3Rlck5vZGUoKmZvb3RlciwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIG1fdGV4dFRhYmxlRm9v
dGVycy5yZW1vdmUoa2V5KTsKICAgICAgICAgfQogICAgICAgICBbX3RleHRUYWJsZXMgcmVtb3Zl
TGFzdE9iamVjdF07CiAgICAgICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgcmVtb3ZlTGFzdE9iamVj
dF07CkBAIC0yMjQ4LDE0ICsyMjI4LDE0IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2V4aXRFbGVt
ZW50KERPTUVsZW0KICAgICAgICAgICAgIFtfdGV4dFRhYmxlUm93QXJyYXlzIHJlbW92ZUxhc3RP
YmplY3RdOwogICAgICAgICB9CiAgICAgICAgIFtfdGV4dEJsb2NrcyByZW1vdmVMYXN0T2JqZWN0
XTsKLSAgICB9IGVsc2UgaWYgKChjb3JlRWxlbWVudC5oYXNUYWdOYW1lKHVsVGFnKSB8fCBjb3Jl
RWxlbWVudC5oYXNUYWdOYW1lKG9sVGFnKSkgJiYgW190ZXh0TGlzdHMgY291bnRdID4gMCkgewor
ICAgIH0gZWxzZSBpZiAoKGVsZW1lbnQuaGFzVGFnTmFtZSh1bFRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKG9sVGFnKSkgJiYgW190ZXh0TGlzdHMgY291bnRdID4gMCkgewogICAgICAgICBOU1Rl
eHRMaXN0ICpsaXN0ID0gW190ZXh0TGlzdHMgbGFzdE9iamVjdF07CiAgICAgICAgIF9hZGRNYXJr
ZXJzVG9MaXN0KGxpc3QsIHJhbmdlKTsKICAgICAgICAgW190ZXh0TGlzdHMgcmVtb3ZlTGFzdE9i
amVjdF07Ci0gICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5oYXNUYWdOYW1lKHFUYWcpKSB7Cisg
ICAgfSBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUocVRhZykpIHsKICAgICAgICAgX2FkZFF1
b3RlRm9yRWxlbWVudChlbGVtZW50LCBOTywgLS1fcXVvdGVMZXZlbCk7Ci0gICAgfSBlbHNlIGlm
IChjb3JlRWxlbWVudC5oYXNUYWdOYW1lKHNwYW5UYWcpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpj
bGFzc05hbWUgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJjbGFzcyJdOworICAgIH0gZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKHNwYW5UYWcpKSB7CisgICAgICAgIE5TU3RyaW5nICpjbGFz
c05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwogICAgICAgICBOU011dGFi
bGVTdHJpbmcgKm11dGFibGVTdHJpbmc7CiAgICAgICAgIE5TVUludGVnZXIgaSwgY291bnQgPSAw
OwogICAgICAgICB1bmljaGFyIGM7CkBAIC0yMzA2LDE5ICsyMjg2LDE3IEBAIHZvaWQgSFRNTENv
bnZlcnRlcjo6X3Byb2Nlc3NUZXh0KENoYXJhY3QKICAgICBTdHJpbmcgb3JpZ2luYWxTdHJpbmcg
PSBjaGFyYWN0ZXJEYXRhLmRhdGEoKTsKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDA7CiAg
ICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gb3JpZ2luYWxTdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYg
KF9kb21SYW5nZSkgewotICAgICAgICBpZiAoJmNoYXJhY3RlckRhdGEgPT0gY29yZShbX2RvbVJh
bmdlIHN0YXJ0Q29udGFpbmVyXSkpIHsKLSAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gKE5TVUlu
dGVnZXIpW19kb21SYW5nZSBzdGFydE9mZnNldF07Ci0gICAgICAgICAgICBfZG9tUmFuZ2VTdGFy
dEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgICAgICAgICBfZmxhZ3MucmVhY2hlZFN0
YXJ0ID0gWUVTOwotICAgICAgICB9Ci0gICAgICAgIGlmICgmY2hhcmFjdGVyRGF0YSA9PSBjb3Jl
KFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkpIHsKLSAgICAgICAgICAgIGVuZE9mZnNldCA9IChO
U1VJbnRlZ2VyKVtfZG9tUmFuZ2UgZW5kT2Zmc2V0XTsKLSAgICAgICAgICAgIF9mbGFncy5yZWFj
aGVkRW5kID0gWUVTOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoc3RhcnRPZmZzZXQgPiAwIHx8
IGVuZE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCgpKSAmJiBlbmRPZmZzZXQgPj0gc3Rh
cnRPZmZzZXQpCi0gICAgICAgICAgICBvcmlnaW5hbFN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1
YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOworICAgIGlmICgm
Y2hhcmFjdGVyRGF0YSA9PSBtX3JhbmdlLT5zdGFydENvbnRhaW5lcigpKSB7CisgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gbV9yYW5nZS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgX2RvbVJhbmdlU3Rh
cnRJbmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOworICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0
ID0gWUVTOworICAgIH0KKyAgICBpZiAoJmNoYXJhY3RlckRhdGEgPT0gbV9yYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpIHsKKyAgICAgICAgZW5kT2Zmc2V0ID0gbV9yYW5nZS0+ZW5kT2Zmc2V0KCk7Cisg
ICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogICAgIH0KKyAgICBpZiAoKHN0YXJ0T2Zm
c2V0ID4gMCB8fCBlbmRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGgoKSkgJiYgZW5kT2Zm
c2V0ID49IHN0YXJ0T2Zmc2V0KQorICAgICAgICBvcmlnaW5hbFN0cmluZyA9IG9yaWdpbmFsU3Ry
aW5nLnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwogICAg
IFN0cmluZyBvdXRwdXRTdHJpbmcgPSBvcmlnaW5hbFN0cmluZzsKIAogICAgIC8vIEZJWE1FOiBV
c2UgUmVuZGVyVGV4dCdzIGNvbnRlbnQgaW5zdGVhZC4KQEAgLTIzNzMsNTMgKzIzNTEsNTEgQEAg
dm9pZCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc1RleHQoQ2hhcmFjdAogICAgICAgICBDRlJlbGVh
c2UobXV0c3RyKTsKIH0KIAotdm9pZCBIVE1MQ29udmVydGVyOjpfdHJhdmVyc2VOb2RlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVkKQordm9pZCBIVE1MQ29udmVydGVy
OjpfdHJhdmVyc2VOb2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVk
KQogewotICAgIGlmICghbm9kZSB8fCBfZmxhZ3MucmVhY2hlZEVuZCkKKyAgICBpZiAoX2ZsYWdz
LnJlYWNoZWRFbmQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoX2RvbVJhbmdlICYmICFfZmxh
Z3MucmVhY2hlZFN0YXJ0ICYmICFfY2FjaGVzLT5pc0FuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVy
dGVkKG5vZGUpKQorICAgIGlmICghX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNB
bmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChub2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwogICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJ
TlRfTUFYOwogICAgIGJvb2wgaXNTdGFydCA9IGZhbHNlOwogICAgIGJvb2wgaXNFbmQgPSBmYWxz
ZTsKLSAgICBpZiAoX2RvbVJhbmdlKSB7Ci0gICAgICAgIGlmIChub2RlID09IGNvcmUoW19kb21S
YW5nZSBzdGFydENvbnRhaW5lcl0pKSB7Ci0gICAgICAgICAgICBzdGFydE9mZnNldCA9IChOU1VJ
bnRlZ2VyKVtfZG9tUmFuZ2Ugc3RhcnRPZmZzZXRdOwotICAgICAgICAgICAgaXNTdGFydCA9IHRy
dWU7Ci0gICAgICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChub2RlID09IGNvcmUoW19kb21SYW5nZSBlbmRDb250YWluZXJdKSkgewotICAg
ICAgICAgICAgZW5kT2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBlbmRPZmZzZXRdOwot
ICAgICAgICAgICAgaXNFbmQgPSB0cnVlOwotICAgICAgICB9CisgICAgaWYgKCZub2RlID09IG1f
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBtX3Jhbmdl
LT5zdGFydE9mZnNldCgpOworICAgICAgICBpc1N0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgX2ZsYWdz
LnJlYWNoZWRTdGFydCA9IFlFUzsKKyAgICB9CisgICAgaWYgKCZub2RlID09IG1fcmFuZ2UtPmVu
ZENvbnRhaW5lcigpKSB7CisgICAgICAgIGVuZE9mZnNldCA9IG1fcmFuZ2UtPmVuZE9mZnNldCgp
OworICAgICAgICBpc0VuZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIGlmIChub2RlLT5pc0Rv
Y3VtZW50Tm9kZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnRGcmFnbWVudCgpKSB7Ci0gICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgIGlmIChub2RlLmlzRG9jdW1lbnRO
b2RlKCkgfHwgbm9kZS5pc0RvY3VtZW50RnJhZ21lbnQoKSkgeworICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGNo
aWxkOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQp
CiAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCA9IFtfYXR0clN0ciBsZW5ndGhd
OwogICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlz
RW5kIHx8IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoY2hp
bGQsIGRlcHRoICsgMSwgZW1iZWRkZWQpOworICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUo
KmNoaWxkLCBkZXB0aCArIDEsIGVtYmVkZGVkKTsKICAgICAgICAgICAgIGlmIChpc0VuZCAmJiBp
ICsgMSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZ
RVM7CiAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRE9N
RWxlbWVudCogZWxlbWVudCA9IGtpdCh0b0VsZW1lbnQobm9kZSkpOworICAgIH0gZWxzZSBpZiAo
bm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxl
bWVudChub2RlKTsKICAgICAgICAgaWYgKF9lbnRlckVsZW1lbnQoZWxlbWVudCwgZW1iZWRkZWQp
KSB7CiAgICAgICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3Ro
XTsKICAgICAgICAgICAgIGlmIChfcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZGVwdGgpKSB7Ci0g
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGNoaWxkOyBpKyspIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlzRW5kIHx8
IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAgICAgICAgICAgICAgICAgX3RyYXZlcnNlTm9kZShj
aGlsZCwgZGVwdGggKyAxLCBlbWJlZGRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfdHJh
dmVyc2VOb2RlKCpjaGlsZCwgZGVwdGggKyAxLCBlbWJlZGRlZCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgICAgICAgICAgICAgaWYgKF9m
bGFncy5yZWFjaGVkRW5kKQpAQCAtMjQyOSw0NiArMjQwNSw0MyBAQCB2b2lkIEhUTUxDb252ZXJ0
ZXI6Ol90cmF2ZXJzZU5vZGUoTm9kZSogCiAgICAgICAgICAgICAgICAgX2V4aXRFbGVtZW50KGVs
ZW1lbnQsIGRlcHRoLCBzdGFydEluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICBfcHJvY2Vz
c1RleHQoKnRvQ2hhcmFjdGVyRGF0YShub2RlKSk7CisgICAgfSBlbHNlIGlmIChub2RlLmlzQ2hh
cmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgX3Byb2Nlc3NUZXh0KHRvQ2hhcmFjdGVyRGF0YShu
b2RlKSk7CiAKICAgICBpZiAoaXNFbmQpCiAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVT
OwogfQogCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZUZvb3Rlck5vZGUoRE9NTm9kZSAq
bm9kZSwgTlNJbnRlZ2VyIGRlcHRoKQordm9pZCBIVE1MQ29udmVydGVyOjpfdHJhdmVyc2VGb290
ZXJOb2RlKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIERPTUVsZW1l
bnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7Ci0KICAgICBpZiAoX2ZsYWdzLnJlYWNo
ZWRFbmQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoX2RvbVJhbmdlICYmICFfZmxhZ3MucmVh
Y2hlZFN0YXJ0ICYmICFfY2FjaGVzLT5pc0FuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVydGVkKGNv
cmUobm9kZSkpKQorICAgIGlmICghX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+aXNB
bmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwogICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9
IFVJTlRfTUFYOwogICAgIGJvb2wgaXNTdGFydCA9IGZhbHNlOwogICAgIGJvb2wgaXNFbmQgPSBm
YWxzZTsKLSAgICBpZiAoX2RvbVJhbmdlKSB7Ci0gICAgICAgIGlmIChub2RlID09IFtfZG9tUmFu
Z2Ugc3RhcnRDb250YWluZXJdKSB7Ci0gICAgICAgICAgICBzdGFydE9mZnNldCA9IChOU1VJbnRl
Z2VyKVtfZG9tUmFuZ2Ugc3RhcnRPZmZzZXRdOwotICAgICAgICAgICAgaXNTdGFydCA9IHRydWU7
Ci0gICAgICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChub2RlID09IFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkgewotICAgICAgICAgICAg
ZW5kT2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBlbmRPZmZzZXRdOwotICAgICAgICAg
ICAgaXNFbmQgPSB0cnVlOwotICAgICAgICB9CisgICAgaWYgKCZlbGVtZW50ID09IG1fcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBtX3JhbmdlLT5zdGFy
dE9mZnNldCgpOworICAgICAgICBpc1N0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgX2ZsYWdzLnJlYWNo
ZWRTdGFydCA9IFlFUzsKKyAgICB9CisgICAgaWYgKCZlbGVtZW50ID09IG1fcmFuZ2UtPmVuZENv
bnRhaW5lcigpKSB7CisgICAgICAgIGVuZE9mZnNldCA9IG1fcmFuZ2UtPmVuZE9mZnNldCgpOwor
ICAgICAgICBpc0VuZCA9IHRydWU7CiAgICAgfQorICAgIAogICAgIGlmIChfZW50ZXJFbGVtZW50
KGVsZW1lbnQsIFlFUykpIHsKICAgICAgICAgTlNVSW50ZWdlciBzdGFydEluZGV4ID0gW19hdHRy
U3RyIGxlbmd0aF07CiAgICAgICAgIGlmIChfcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZGVwdGgp
KSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNvcmUoZWxlbWVudCktPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gZWxlbWVudC5maXJzdENoaWxkKCk7CiAgICAg
ICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGNoaWxkOyBpKyspIHsKICAgICAgICAgICAg
ICAgICBpZiAoaXNTdGFydCAmJiBpID09IHN0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CiAgICAgICAgICAgICAg
ICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlzRW5kIHx8IGVuZE9m
ZnNldCA+IGkpKQotICAgICAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0
aCArIDEsIHRydWUgLyogZW1iZWRkZWQgKi8pOworICAgICAgICAgICAgICAgICAgICBfdHJhdmVy
c2VOb2RlKCpjaGlsZCwgZGVwdGggKyAxLCB0cnVlIC8qIGVtYmVkZGVkICovKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAg
ICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgICAgICAgICBpZiAoX2ZsYWdz
LnJlYWNoZWRFbmQpCkBAIC0yNTA2LDI2ICsyNDc5LDYgQEAgTm9kZSogSFRNTENvbnZlcnRlckNh
Y2hlczo6Y2FjaGVBbmNlc3RvcgogICAgIHJldHVybiBjb21tb25BbmNlc3RvcjsKIH0KIAotdm9p
ZCBIVE1MQ29udmVydGVyOjpfbG9hZEZyb21ET01SYW5nZSgpCi17Ci0gICAgQVNTRVJUKF9kb21S
YW5nZSk7Ci0gICAgaWYgKC0xID09IF9lcnJvckNvZGUpIHsKLSAgICAgICAgTm9kZSogY29tbW9u
QW5jZXN0b3JDb250YWluZXIgPSBfY2FjaGVzLT5jYWNoZUFuY2VzdG9yc09mU3RhcnRUb0JlQ29u
dmVydGVkKCpjb3JlKF9kb21SYW5nZSkpOwotICAgICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3JD
b250YWluZXIpOwotCi0gICAgICAgIF9kb2N1bWVudCA9IGtpdChjb21tb25BbmNlc3RvckNvbnRh
aW5lci0+b3duZXJEb2N1bWVudCgpKTsKLSAgICAgICAgX2RhdGFTb3VyY2UgPSAoRG9jdW1lbnRM
b2FkZXIgKiljb3JlKF9kb2N1bWVudCktPmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVy
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoX2RvY3VtZW50ICYmIF9kYXRhU291cmNlKSB7Ci0g
ICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gMDsKLSAgICAgICAgICAgIF9lcnJvckNv
ZGUgPSAwOwotICAgICAgICAgICAgX3RyYXZlcnNlTm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5l
ciwgMCwgZmFsc2UgLyogZW1iZWRkZWQgKi8pOwotICAgICAgICAgICAgaWYgKF9kb21SYW5nZVN0
YXJ0SW5kZXggPiAwICYmIF9kb21SYW5nZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0p
Ci0gICAgICAgICAgICAgICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFr
ZVJhbmdlKDAsIF9kb21SYW5nZVN0YXJ0SW5kZXgpXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQog
I2lmICFQTEFURk9STShJT1MpCiAKIHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZv
clVSTChEb2N1bWVudExvYWRlciAqZGF0YVNvdXJjZSwgTlNVUkwgKlVSTCkKQEAgLTI1ODYsNyAr
MjUzOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMg
bW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVkaXRpbmcgdmFyaWFudCBiZWxvdywgc3VjaCBh
cyB0YWJsZXMuCiBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
UmFuZ2UmIHJhbmdlKQogewotICAgIEhUTUxDb252ZXJ0ZXIgY29udmVydGVyKGtpdCgmcmFuZ2Up
KTsKKyAgICBIVE1MQ29udmVydGVyIGNvbnZlcnRlcihyYW5nZSk7CiAgICAgcmV0dXJuIGNvbnZl
cnRlci5jb252ZXJ0KCk7CiB9CiAgICAgCg==
</data>
<flag name="review"
          id="252249"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>