<?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>87675</bug_id>
          
          <creation_ts>2012-05-28 12:36:36 -0700</creation_ts>
          <short_desc>Give StylePropertySet a proper mutability flag.</short_desc>
          <delta_ts>2012-05-29 08:55:21 -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>CSS</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>
          <dependson>87750</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>635361</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-28 12:36:36 -0700</bug_when>
    <thetext>Hax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635414</commentid>
    <comment_count>1</comment_count>
      <attachid>144398</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-28 14:29:25 -0700</bug_when>
    <thetext>Created attachment 144398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635417</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 14:32:11 -0700</bug_when>
    <thetext>Attachment 144398 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSStyleRule.cpp:64:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635426</commentid>
    <comment_count>3</comment_count>
      <attachid>144398</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-28 14:57:02 -0700</bug_when>
    <thetext>Comment on attachment 144398
Patch

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

&gt; Source/WebCore/css/StylePropertySet.h:56
&gt; +    static PassRefPtr&lt;StylePropertySet&gt; createMutable(StylePropertyVector&amp; properties)

I think we want adopt in this function name for the same reason we have it in the other function name, because the function adopts a property vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635431</commentid>
    <comment_count>4</comment_count>
      <attachid>144398</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-28 15:22:18 -0700</bug_when>
    <thetext>Comment on attachment 144398
Patch

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

&gt; Source/WebCore/css/StyleRule.h:123
&gt;      StylePropertySet* properties() const { return m_properties.get(); }
&gt; +    StylePropertySet* mutableProperties();

Could properties() made return a const? We already do that for the immutable element properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635822</commentid>
    <comment_count>5</comment_count>
      <attachid>144398</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-29 03:27:22 -0700</bug_when>
    <thetext>Comment on attachment 144398
Patch

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

&gt; Source/WebCore/css/StyleRule.cpp:188
&gt; +StylePropertySet* StyleRule::mutableProperties()
&gt; +{
&gt; +    if (m_properties &amp;&amp; !m_properties-&gt;isMutable())
&gt; +        m_properties = m_properties-&gt;copy();
&gt; +    return m_properties.get();
&gt; +}

At least the copy constructor assumes that m_properties can&apos;t be null and looking at the parser I don&apos;t think it ever can be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635895</commentid>
    <comment_count>6</comment_count>
      <attachid>144526</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-29 04:56:53 -0700</bug_when>
    <thetext>Created attachment 144526
Also patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635898</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 05:00:23 -0700</bug_when>
    <thetext>Attachment 144526 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSStyleRule.cpp:64:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635899</commentid>
    <comment_count>8</comment_count>
      <attachid>144526</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-29 05:01:52 -0700</bug_when>
    <thetext>Comment on attachment 144526
Also patch

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

&gt; Source/WebCore/css/StyleRule.cpp:240
&gt; +    if (m_properties &amp;&amp; !m_properties-&gt;isMutable())

Still don&apos;t need null check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635911</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-29 05:25:56 -0700</bug_when>
    <thetext>Committed r118761: &lt;http://trac.webkit.org/changeset/118761&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144398</attachid>
            <date>2012-05-28 14:29:25 -0700</date>
            <delta_ts>2012-05-29 04:56:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87675.diff</filename>
            <type>text/plain</type>
            <size>17944</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZWJkNTBkLi45MmRkYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTItMDUtMjggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIEdpdmUgU3R5bGVQcm9wZXJ0eVNldCBhIHByb3BlcnkgbXV0YWJpbGl0eSBmbGFnLgorICAg
ICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi84NzY3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBmbGFnIHRvIFN0eWxlUHJvcGVydHlTZXQg
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgaXQncyBtdXRhYmxlIG9yIG5vdC4gT25seSBvYmplY3Rz
CisgICAgICAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIENTUyBwYXJzZXIgKGJ5IHdheSBvZiBTdHls
ZVByb3BlcnR5U2V0OjphZG9wdCgpKSBhcmUgbWFkZSBpbW11dGFibGUuCisgICAgICAgIFRoaXMg
aXMgY2xlYW4tdXAgYW5kIHByZXAgd29yayBmb3IgaW1wbGVtZW50aW5nIGEgbW9yZSBlZmZpY2ll
bnQgc3RvcmFnZSBzY2hlbWUgZm9yIGltbXV0YWJsZQorICAgICAgICBTdHlsZVByb3BlcnR5U2V0
cyAoZml4ZWQtc2l6ZSBhcnJheSBpbnN0ZWFkIG9mIHZlY3RvcikgYXMgdGhlIHZhc3QgbWFqb3Jp
dHkgb2YgdGhlbSBhcmUKKyAgICAgICAgdW5saWtlbHkgdG8gZXZlciBtdXRhdGUgZHVyaW5nIHRo
ZWlyIGxpZmV0aW1lLgorCisgICAgICAgIFNwcmlua2xlZCBBU1NFUlQoaXNNdXRhYmxlKCkpIGFs
bCBvdmVyIFN0eWxlUHJvcGVydHlTZXQgdG8gY2F0Y2ggYW55IGF0dGVtcHRzIHRvIG1vZGlmeQor
ICAgICAgICBhbiBpbW11dGFibGUgb2JqZWN0LgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQpOgorICAgICAgICAqIGNzcy9DU1NQYWdl
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVsZTo6c3R5bGUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxl
OjpzdHlsZSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpzZXRDU1NQYXJzZXJNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
cm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0luU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAg
KiBjc3MvU3R5bGVQcm9wZXJ0eVNldC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0
eVNldDo6YWRvcHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRl
TXV0YWJsZSk6CisgICAgICAgIChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydHlTZXQ6OmlzTXV0YWJsZSk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGU6Om11dGFibGVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZVBhZ2U6Om11dGFibGVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUZvbnRGYWNlOjptdXRhYmxlUHJvcGVydGllcyk6CisgICAg
ICAgICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoU3R5bGVSdWxlKToKKyAgICAgICAgKFN0
eWxlUnVsZUZvbnRGYWNlKToKKyAgICAgICAgKFN0eWxlUnVsZVBhZ2UpOgorICAgICAgICAqIGRv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6ZW5zdXJlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dEF0dHJpYnV0ZURhdGE6OnVwZGF0ZUlubGluZVN0eWxlQXZvaWRpbmdNdXRhdGlvbik6CisKIDIw
MTItMDUtMjggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
RXhwb3NlIHZhbHVlIGxvY2FsaXphdGlvbiBmdW5jdGlvbiBvZiBIVE1MSW5wdXRFbGVtZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CmluZGV4IDU5NmZhN2MuLmM3ODNjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0yNjQxLDcgKzI2NDEsNyBAQCBQYXNz
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29w
eVByb3BlcnRpZXNJblNldChjbwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICBsaXN0
LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6OmFkb3B0KGxpc3QpOworICAgIHJldHVy
biBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGVNdXRhYmxlKGxpc3QpOwogfQogCiBDU1NSdWxlKiBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYWdlUnVsZS5jcHAKaW5kZXggNzBiYmFiNy4uYzc4NTlmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCkBAIC00OCw3ICs0OCw3IEBAIENTU1BhZ2VSdWxlOjp+Q1NTUGFnZVJ1
bGUoKQogQ1NTU3R5bGVEZWNsYXJhdGlvbiogQ1NTUGFnZVJ1bGU6OnN0eWxlKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcHJvcGVydGllc0NTU09NV3JhcHBlcikKLSAgICAgICAgbV9wcm9wZXJ0aWVz
Q1NTT01XcmFwcGVyID0gU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG1fcGFn
ZVJ1bGUtPnByb3BlcnRpZXMoKSwgY29uc3RfY2FzdDxDU1NQYWdlUnVsZSo+KHRoaXMpKTsKKyAg
ICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyID0gU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKG1fcGFnZVJ1bGUtPm11dGFibGVQcm9wZXJ0aWVzKCksIGNvbnN0X2Nhc3Q8
Q1NTUGFnZVJ1bGUqPih0aGlzKSk7CiAgICAgcmV0dXJuIG1fcHJvcGVydGllc0NTU09NV3JhcHBl
ci5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAppbmRleCA1YTc4MDI2
Li5mZWI0MTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcApAQCAtNTksOCArNTks
OSBAQCBDU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUoKQogCiBDU1NTdHlsZURlY2xhcmF0aW9u
KiBDU1NTdHlsZVJ1bGU6OnN0eWxlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJvcGVydGllc0NT
U09NV3JhcHBlcikKLSAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyID0gU3R5bGVSdWxl
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG1fc3R5bGVSdWxlLT5wcm9wZXJ0aWVzKCksIGNv
bnN0X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4odGhpcykpOworICAgIGlmICghbV9wcm9wZXJ0aWVzQ1NT
T01XcmFwcGVyKSB7CisgICAgICAgIG1fcHJvcGVydGllc0NTU09NV3JhcHBlciA9IFN0eWxlUnVs
ZUNTU1N0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShtX3N0eWxlUnVsZS0+bXV0YWJsZVByb3BlcnRp
ZXMoKSwgY29uc3RfY2FzdDxDU1NTdHlsZVJ1bGUqPih0aGlzKSk7CisgICAgfQogICAgIHJldHVy
biBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2V0LmNwcAppbmRleCA0ZWMzMTk5Li43MDlmNDVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC01MywxMiArNTMsMTQgQEAgc3RhdGljIFBy
b3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwJiBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpCiBT
dHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKICAgICA6IG1fY3NzUGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKQogICAgICwgbV9vd25z
Q1NTT01XcmFwcGVyKGZhbHNlKQorICAgICwgbV9pc011dGFibGUodHJ1ZSkKIHsKIH0KIAogU3R5
bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChTdHlsZVByb3BlcnR5VmVjdG9yJiBwcm9w
ZXJ0aWVzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiAgICAgOiBtX2Nzc1BhcnNlck1v
ZGUoY3NzUGFyc2VyTW9kZSkKICAgICAsIG1fb3duc0NTU09NV3JhcHBlcihmYWxzZSkKKyAgICAs
IG1faXNNdXRhYmxlKGZhbHNlKQogewogICAgIG1fcHJvcGVydGllcy5zd2FwKHByb3BlcnRpZXMp
OwogCkBAIC03MSw2ICs3Myw3IEBAIFN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgbykKICAgICAsIG1fcHJvcGVydGllcyhvLm1fcHJvcGVy
dGllcykKICAgICAsIG1fY3NzUGFyc2VyTW9kZShvLm1fY3NzUGFyc2VyTW9kZSkKICAgICAsIG1f
b3duc0NTU09NV3JhcHBlcihmYWxzZSkKKyAgICAsIG1faXNNdXRhYmxlKHRydWUpCiB7CiB9CiAK
QEAgLTgxLDggKzg0LDE1IEBAIFN0eWxlUHJvcGVydHlTZXQ6On5TdHlsZVByb3BlcnR5U2V0KCkK
ICAgICAgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAK
K3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0Q1NTUGFyc2VyTW9kZShDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUpCit7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKKyAgICBtX2Nzc1BhcnNl
ck1vZGUgPSBjc3NQYXJzZXJNb2RlOworfQorCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQ
cm9wZXJ0aWVzRnJvbShjb25zdCBTdHlsZVByb3BlcnR5U2V0JiBvdGhlcikKIHsKKyAgICBBU1NF
UlQoaXNNdXRhYmxlKCkpOwogICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1fcHJvcGVydGllczsK
IH0KIApAQCAtNDUzLDYgKzQ2Myw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVy
dHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAKIGJvb2wg
U3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogeworICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAgICAgU3R5bGVQcm9wZXJ0
eVNob3J0aGFuZCBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsK
ICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDYxLDYgKzQ3Miw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogCiBib29sIFN0eWxlUHJvcGVydHlTZXQ6
OnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3RyaW5nKiByZXR1cm5U
ZXh0KQogeworICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAgICAgaWYgKHJlbW92ZVNob3J0aGFu
ZFByb3BlcnR5KHByb3BlcnR5SUQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gYW4gZXF1
aXZhbGVudCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS4KICAgICAgICAgaWYgKHJldHVyblRleHQp
CkBAIC01MTYsNiArNTI4LDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1w
bGljaXQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAogCiBib29sIFN0eWxlUHJvcGVy
dHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxl
U2hlZXQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICAvLyBTZXR0aW5nIHRoZSB2
YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBpbiBib3Ro
IElFIGFuZCBHZWNrby4KICAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8gcHJvZHVj
ZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhlIHNhbWUu
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewpAQCAtNTMwLDYgKzU0Myw3IEBAIGJvb2wgU3R5
bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlCiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwcnBWYWx1ZSwgYm9v
bCBpbXBvcnRhbnQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kIHNob3J0aGFuZCA9IHNob3J0aGFuZEZvclByb3BlcnR5KHByb3BlcnR5SUQp
OwogICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKSB7CiAgICAgICAgIHNldFByb3BlcnR5KENT
U1Byb3BlcnR5KHByb3BlcnR5SUQsIHBycFZhbHVlLCBpbXBvcnRhbnQpKTsKQEAgLTU0NSw2ICs1
NTksNyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZQogCiB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6
OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNs
b3QpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBpZiAoIXJlbW92ZVNob3J0aGFu
ZFByb3BlcnR5KHByb3BlcnR5LmlkKCkpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxh
Y2UgPSBzbG90ID8gc2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eS5pZCgpKTsKICAg
ICAgICAgaWYgKHRvUmVwbGFjZSkgewpAQCAtNTU3LDEyICs1NzIsMTUgQEAgdm9pZCBTdHlsZVBy
b3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1By
b3BlcnR5KiBzbG8KIAogYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkKIHsKKyAg
ICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3Bl
cnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwg
aW1wb3J0YW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIFN0eWxl
U2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKwogICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwogCiAgICAgQ1NTUGFyc2VyQ29udGV4
dCBjb250ZXh0KGNzc1BhcnNlck1vZGUoKSk7CkBAIC01NzYsNiArNTk0LDcgQEAgdm9pZCBTdHls
ZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJh
dGlvbiwgU3R5bGVTaGUKIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0
aWVzKGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mIHByb3BlcnRpZXMpCiB7CisgICAgQVNTRVJU
KGlzTXV0YWJsZSgpKTsKICAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVy
dGllcy5zaXplKCkgKyBwcm9wZXJ0aWVzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFkZFBhcnNlZFByb3BlcnR5
KHByb3BlcnRpZXNbaV0pOwpAQCAtNTgzLDYgKzYwMiw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0
aWVzCiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5KQogeworICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAgICAgLy8g
T25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3VudGVycGFydCBw
cmVzZW50CiAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5LmlkKCkpIHx8IHBy
b3BlcnR5LmlzSW1wb3J0YW50KCkpCiAgICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKQEAg
LTgxMiw2ICs4MzIsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0KCkgY29uc3QK
IAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjptZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBv
dGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQogeworICAgIEFTU0VSVChpc011dGFi
bGUoKSk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IG90aGVyLT5tX3Byb3BlcnRpZXMuc2l6ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKICAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25dOwpAQCAtODc0LDYg
Kzg5NSw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkK
IAogYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgQ1NT
UHJvcGVydHlJRCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC05MTIsNiArOTM0LDcgQEAgY29uc3QgQ1NTUHJvcGVydHkqIFN0eWxlUHJvcGVy
dHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQKIAogQ1NT
UHJvcGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBmb3IgKGlu
dCBuID0gbV9wcm9wZXJ0aWVzLnNpemUoKSAtIDEgOyBuID49IDA7IC0tbikgewogICAgICAgICBp
ZiAocHJvcGVydHlJRCA9PSBtX3Byb3BlcnRpZXNbbl0uaWQoKSkKICAgICAgICAgICAgIHJldHVy
biAmbV9wcm9wZXJ0aWVzW25dOwpAQCAtOTI3LDYgKzk1MCw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0
eVNldDo6cHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QK
ICAgICAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgp
KTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGllc1RvUmVtb3ZlOwogICAgIHNp
emVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewpAQCAtOTQxLDYgKzk2NSw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5
bGUpCiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMo
Y29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGllc1RvUmVtb3ZlOwogICAg
IHNpemVfdCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewpAQCAtOTY3LDcgKzk5Miw3IEBAIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBD
U1NQcm9wCiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1By
b3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwogICAgIH0KLSAgICByZXR1
cm4gU3R5bGVQcm9wZXJ0eVNldDo6YWRvcHQobGlzdCk7CisgICAgcmV0dXJuIFN0eWxlUHJvcGVy
dHlTZXQ6OmNyZWF0ZU11dGFibGUobGlzdCk7CiB9CiAKIENTU1N0eWxlRGVjbGFyYXRpb24qIFN0
eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKaW5kZXggZTE0Zjg5Yy4uMTU3ZWQxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCkBAIC00OSwxMCArNDksMTYgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGNz
c1BhcnNlck1vZGUpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gYWRvcHQoU3R5bGVQcm9wZXJ0eVZlY3RvciYgcHJvcGVydGllcywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlID0gQ1NTU3RyaWN0TW9kZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBhZG9wdChTdHlsZVByb3BlcnR5VmVjdG9yJiBwcm9wZXJ0aWVzLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0eWxlUHJvcGVydHlTZXQocHJvcGVydGllcywgY3NzUGFyc2VyTW9kZSkpOwogICAg
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGVNdXRhYmxl
KFN0eWxlUHJvcGVydHlWZWN0b3ImIHByb3BlcnRpZXMpCisgICAgeworICAgICAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQo
cHJvcGVydGllcywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICByZXN1bHQtPm1faXNNdXRhYmxl
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgfQogCiAgICAg
dW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXpl
KCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNF
bXB0eSgpOyB9CkBAIC04NywxMiArOTMsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBtZXJnZShj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1
ZSk7CiAKLSAgICB2b2lkIHNldENTU1BhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKSB7IG1fY3NzUGFyc2VyTW9kZSA9IGNzc1BhcnNlck1vZGU7IH0KKyAgICB2b2lkIHNldENT
U1BhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSk7CiAgICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyTW9kZT4obV9jc3NQYXJz
ZXJNb2RlKTsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCiAgICAg
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3Q7CisKICAgICAvLyBVc2Vk
IGJ5IFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCiAgICAgdm9p
ZCBjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYpOwogCkBAIC0xMDcs
OSArMTE0LDggQEAgcHVibGljOgogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlQ1NT
U3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0OwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3Vy
ZUlubGluZUNTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgU3R5bGVkRWxlbWVudCogcGFyZW50RWxl
bWVudCkgY29uc3Q7Ci0gICAgCi0gICAgLy8gRklYTUU6IEV4cGFuZCB0aGUgY29uY2VwdCBvZiBt
dXRhYmxlL2ltbXV0YWJsZSBTdHlsZVByb3BlcnR5U2V0LgotICAgIGJvb2wgaXNNdXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25zQ1NTT01XcmFwcGVyOyB9CisKKyAgICBib29sIGlzTXV0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9CiAKICAgICBzdGF0aWMgdW5zaWduZWQg
YXZlcmFnZVNpemVJbkJ5dGVzKCk7CiAKQEAgLTE0NCw2ICsxNTAsNyBAQCBwcml2YXRlOgogCiAg
ICAgdW5zaWduZWQgbV9jc3NQYXJzZXJNb2RlIDogMjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
b3duc0NTU09NV3JhcHBlciA6IDE7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6
IDE7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmluZGV4IDQwMGY0MWIuLjdiZGZkMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCkBAIC0xODAsNiArMTgwLDEzIEBAIFN0eWxlUnVsZTo6
flN0eWxlUnVsZSgpCiB7CiB9CiAKK1N0eWxlUHJvcGVydHlTZXQqIFN0eWxlUnVsZTo6bXV0YWJs
ZVByb3BlcnRpZXMoKQoreworICAgIGlmIChtX3Byb3BlcnRpZXMgJiYgIW1fcHJvcGVydGllcy0+
aXNNdXRhYmxlKCkpCisgICAgICAgIG1fcHJvcGVydGllcyA9IG1fcHJvcGVydGllcy0+Y29weSgp
OworICAgIHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7Cit9CisKIHZvaWQgU3R5bGVSdWxlOjpz
ZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcykKIHsg
CiAgICAgbV9wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKQEAgLTIwMSw2ICsyMDgsMTMgQEAgU3R5
bGVSdWxlUGFnZTo6flN0eWxlUnVsZVBhZ2UoKQogewogfQogCitTdHlsZVByb3BlcnR5U2V0KiBT
dHlsZVJ1bGVQYWdlOjptdXRhYmxlUHJvcGVydGllcygpCit7CisgICAgaWYgKG1fcHJvcGVydGll
cyAmJiAhbV9wcm9wZXJ0aWVzLT5pc011dGFibGUoKSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzID0g
bV9wcm9wZXJ0aWVzLT5jb3B5KCk7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsKK30K
Kwogdm9pZCBTdHlsZVJ1bGVQYWdlOjpzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4gcHJvcGVydGllcykKIHsgCiAgICAgbV9wcm9wZXJ0aWVzID0gcHJvcGVydGllczsK
QEAgLTIyMSw2ICsyMzUsMTMgQEAgU3R5bGVSdWxlRm9udEZhY2U6On5TdHlsZVJ1bGVGb250RmFj
ZSgpCiB7CiB9CiAKK1N0eWxlUHJvcGVydHlTZXQqIFN0eWxlUnVsZUZvbnRGYWNlOjptdXRhYmxl
UHJvcGVydGllcygpCit7CisgICAgaWYgKG1fcHJvcGVydGllcyAmJiAhbV9wcm9wZXJ0aWVzLT5p
c011dGFibGUoKSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9wcm9wZXJ0aWVzLT5jb3B5KCk7
CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsKK30KKwogdm9pZCBTdHlsZVJ1bGVGb250
RmFjZTo6c2V0UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRp
ZXMpCiB7IAogICAgIG1fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmgKaW5kZXggZjM5ODllMC4uZTA1ZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtOTUs
NiArOTUsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9y
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JMaXN0OyB9CiAgICAgU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsgfQor
ICAgIFN0eWxlUHJvcGVydHlTZXQqIG11dGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgCiAgICAgdm9p
ZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNl
bGVjdG9ycyk7IH0KICAgICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rv
ckxpc3QmIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CkBA
IC0xMTksNiArMTIwLDcgQEAgcHVibGljOgogICAgIH5TdHlsZVJ1bGVGb250RmFjZSgpOwogCiAg
ICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dGllcy5nZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIG11dGFibGVQcm9wZXJ0aWVzKCk7
CiAKICAgICB2b2lkIHNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0Pik7
CiAKQEAgLTEzOSw2ICsxNDEsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yTGlzdC5maXJzdCgpOyB9ICAgIAog
ICAgIFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXMuZ2V0KCk7IH0KKyAgICBTdHlsZVByb3BlcnR5U2V0KiBtdXRhYmxlUHJvcGVydGllcygp
OwogCiAgICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVj
dG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAgICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVjdG9yTGlz
dChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxl
Y3RvcnMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcApp
bmRleCBjZDYxZDdiLi4wNzIyY2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5jcHAKQEAgLTEzNiw4ICsxMzYsNyBAQCBTdHlsZVByb3BlcnR5U2V0KiBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6ZW5zdXJlSW5saW5lU3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVu
dAogewogICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKICAgICAgICAgQVNTRVJUKGVsZW1l
bnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKLSAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBTdHls
ZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKLSAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldENT
U1BhcnNlck1vZGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKKyAgICAgICAgbV9p
bmxpbmVTdHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9DU1NQYXJz
ZXJNb2RlKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aW5RdWlya3NNb2RlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdl
dCgpOwogfQpAQCAtMTU3LDEwICsxNTYsOCBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp1
cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24oU3R5bGVkRWxlbWVudCogZWxlbQogICAg
IC8vIFRoaXMgbWFrZXMgd3JhcHBlcmxlc3MgcHJvcGVydHkgc2V0cyBpbW11dGFibGUgYW5kIHNv
IGNhY2hlYWJsZS4KICAgICBpZiAobV9pbmxpbmVTdHlsZURlY2wgJiYgIW1faW5saW5lU3R5bGVE
ZWNsLT5pc011dGFibGUoKSkKICAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wuY2xlYXIoKTsKLSAg
ICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKSB7Ci0gICAgICAgIG1faW5saW5lU3R5bGVEZWNsID0g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgIG1faW5saW5lU3R5bGVEZWNsLT5z
ZXRDU1NQYXJzZXJNb2RlKHN0cmljdFRvQ1NTUGFyc2VyTW9kZShlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7Ci0gICAgfQor
ICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpCisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsID0g
U3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHN0cmljdFRvQ1NTUGFyc2VyTW9kZShlbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7
CiAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgZWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOwogfQogCg==
</data>
<flag name="review"
          id="151232"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144526</attachid>
            <date>2012-05-29 04:56:53 -0700</date>
            <delta_ts>2012-05-29 05:01:52 -0700</delta_ts>
            <desc>Also patch</desc>
            <filename>bug-87675-v2.diff</filename>
            <type>text/plain</type>
            <size>34268</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NDlkZmM3Li4wZGE4YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAy
IEBACisyMDEyLTA1LTI5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBHaXZlIFN0eWxlUHJvcGVydHlTZXQgYSBwcm9wZXIgbXV0YWJpbGl0eSBmbGFnLgorICAg
ICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi84NzY3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBmbGFnIHRvIFN0eWxlUHJvcGVydHlTZXQg
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgaXQncyBtdXRhYmxlIG9yIG5vdC4gT25seSBvYmplY3Rz
CisgICAgICAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIENTUyBwYXJzZXIgKGJ5IHdheSBvZiBTdHls
ZVByb3BlcnR5U2V0OjphZG9wdCgpKSBhcmUgbWFkZSBpbW11dGFibGUuCisgICAgICAgIFRoaXMg
aXMgY2xlYW4tdXAgYW5kIHByZXAgd29yayBmb3IgaW1wbGVtZW50aW5nIGEgbW9yZSBlZmZpY2ll
bnQgc3RvcmFnZSBzY2hlbWUgZm9yIGltbXV0YWJsZQorICAgICAgICBTdHlsZVByb3BlcnR5U2V0
cyAoZml4ZWQtc2l6ZSBhcnJheSBpbnN0ZWFkIG9mIHZlY3RvcikgYXMgdGhlIHZhc3QgbWFqb3Jp
dHkgb2YgdGhlbSBhcmUKKyAgICAgICAgdW5saWtlbHkgdG8gZXZlciBtdXRhdGUgZHVyaW5nIHRo
ZWlyIGxpZmV0aW1lLgorCisgICAgICAgIFNwcmlua2xlZCBBU1NFUlQoaXNNdXRhYmxlKCkpIGFs
bCBvdmVyIFN0eWxlUHJvcGVydHlTZXQgdG8gY2F0Y2ggYW55IGF0dGVtcHRzIHRvIG1vZGlmeQor
ICAgICAgICBhbiBpbW11dGFibGUgb2JqZWN0LgorCisgICAgICAgIEFsc28gbWFkZSBwcm9wZXJ0
aWVzKCkgY29uc3Qgb24gU3R5bGVSdWxlIGFuZCBmcmllbmRzLCB3aGljaCBicm91Z2h0IHNvbWUg
YWRkaXRpb25hbCBjb2RlCisgICAgICAgIGNodXJuIGFsb25nIHdpdGggaXQuCisKKyAgICAgICAg
KiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVJ1bGU6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlUnVsZTo6cmVh
dHRhY2gpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToK
KyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oOgorICAgICAgICAoQ1NTRm9udEZh
Y2VTcmNWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1BhZ2VSdWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhZ2VSdWxlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVs
ZTo6cmVhdHRhY2gpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMp
OgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oOgorICAgICAgICAoQ1NTUHJpbWl0
aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSZWZsZWN0VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAg
ICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAoQ1NTUmVmbGVjdFZhbHVlKToK
KyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlUnVsZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpyZWF0dGFj
aCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmg6
CisgICAgICAgIChDU1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToK
KyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChDU1NWYWx1ZUxpc3QpOgor
ICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQcm9wZXJ0eVNldDo6c2V0Q1NTUGFyc2VyTW9kZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNlZFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydGllc0luU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0lu
U2V0KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0eVNldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQcm9wZXJ0eVNldDo6YWRvcHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9w
ZXJ0eVNldDo6YWRvcHRNdXRhYmxlKToKKyAgICAgICAgKFN0eWxlUHJvcGVydHlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6aXNNdXRhYmxlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
ZGRNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
Lmg6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZTo6bXV0YWJsZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVQYWdlOjptdXRhYmxl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVGb250RmFjZTo6bXV0YWJs
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUnVsZTo6cHJvcGVydGllcyk6CisgICAgICAgIChTdHlsZVJ1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSdWxlRm9udEZhY2U6OnByb3BlcnRpZXMpOgorICAgICAgICAoU3R5
bGVSdWxlRm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlUGFnZTo6cHJvcGVy
dGllcyk6CisgICAgICAgIChTdHlsZVJ1bGVQYWdlKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6
OmVuc3VyZUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjp1cGRhdGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRS
dWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKwogMjAx
Mi0wNS0yOSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogUkVHUkVTU0lPTjogbG9hZCBoZWFwIHNuYXBzaG90IGRvZXNuJ3Qg
d29yay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKaW5kZXggNTk2ZmE3Yy4uYmExYjk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2NDEsNyArMjY0MSw3
IEBAIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvCiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxz
ZSkpOwogICAgIH0KLSAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eVNldDo6YWRvcHQobGlzdCk7Cisg
ICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6OmFkb3B0TXV0YWJsZShsaXN0KTsKIH0KIAogQ1NT
UnVsZSogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKaW5kZXggOGJiOTRkYi4uYmNjODYzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAg
Q1NTRm9udEZhY2VSdWxlOjp+Q1NTRm9udEZhY2VSdWxlKCkKIENTU1N0eWxlRGVjbGFyYXRpb24q
IENTU0ZvbnRGYWNlUnVsZTo6c3R5bGUoKSBjb25zdAogewogICAgIGlmICghbV9wcm9wZXJ0aWVz
Q1NTT01XcmFwcGVyKQotICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIgPSBTdHlsZVJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobV9mb250RmFjZVJ1bGUtPnByb3BlcnRpZXMo
KSwgY29uc3RfY2FzdDxDU1NGb250RmFjZVJ1bGUqPih0aGlzKSk7CisgICAgICAgIG1fcHJvcGVy
dGllc0NTU09NV3JhcHBlciA9IFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSht
X2ZvbnRGYWNlUnVsZS0+bXV0YWJsZVByb3BlcnRpZXMoKSwgY29uc3RfY2FzdDxDU1NGb250RmFj
ZVJ1bGUqPih0aGlzKSk7CiAgICAgcmV0dXJuIG1fcHJvcGVydGllc0NTU09NV3JhcHBlci5nZXQo
KTsKIH0KIApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIENTU0ZvbnRGYWNlUnVsZTo6cmVhdHRhY2go
U3R5bGVSdWxlRm9udEZhY2UqIHJ1bGUpCiAgICAgQVNTRVJUKHJ1bGUpOwogICAgIG1fZm9udEZh
Y2VSdWxlID0gcnVsZTsKICAgICBpZiAobV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKQotICAgICAg
ICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fZm9udEZhY2VSdWxlLT5wcm9w
ZXJ0aWVzKCkpOworICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1f
Zm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4
IDA4NTE4YTcuLjc5YWUwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNyY1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1
c3RvbUNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
IHVybHMsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkKK3ZvaWQgQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4m
IHVybHMsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkgY29uc3QKIHsKICAg
ICBpZiAoIWlzTG9jYWwoKSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgc3R5bGVT
aGVldC0+Y29tcGxldGVVUkwobV9yZXNvdXJjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNyY1ZhbHVlLmgKaW5kZXggYTUyOWMxNi4uOTQ2MDdmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKik7
CisgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNv
bnN0IFN0eWxlU2hlZXRDb250ZW50cyopIGNvbnN0OwogCiAgICAgQ2FjaGVkRm9udCogY2FjaGVk
Rm9udChEb2N1bWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFn
ZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAppbmRleCA3MGJi
YWI3Li40Mjg1OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKQEAgLTQ4LDcgKzQ4
LDcgQEAgQ1NTUGFnZVJ1bGU6On5DU1NQYWdlUnVsZSgpCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBD
U1NQYWdlUnVsZTo6c3R5bGUoKSBjb25zdAogewogICAgIGlmICghbV9wcm9wZXJ0aWVzQ1NTT01X
cmFwcGVyKQotICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIgPSBTdHlsZVJ1bGVDU1NT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobV9wYWdlUnVsZS0+cHJvcGVydGllcygpLCBjb25zdF9j
YXN0PENTU1BhZ2VSdWxlKj4odGhpcykpOworICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBw
ZXIgPSBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobV9wYWdlUnVsZS0+bXV0
YWJsZVByb3BlcnRpZXMoKSwgY29uc3RfY2FzdDxDU1NQYWdlUnVsZSo+KHRoaXMpKTsKICAgICBy
ZXR1cm4gbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLmdldCgpOwogfQogCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgQ1NTUGFnZVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCiAgICAg
QVNTRVJUKHJ1bGUpOwogICAgIG1fcGFnZVJ1bGUgPSBydWxlOwogICAgIGlmIChtX3Byb3BlcnRp
ZXNDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRh
Y2gobV9wYWdlUnVsZS0+cHJvcGVydGllcygpKTsKKyAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01X
cmFwcGVyLT5yZWF0dGFjaChtX3BhZ2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAKaW5kZXggMGJmNjZhZC4uNTkyNDk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwCkBAIC0xMDY0LDcgKzEwNjQsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZl
VmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiB0ZXh0OwogfQogCi12b2lk
IENTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0KQordm9pZCBD
U1NQcmltaXRpdmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkgY29uc3QKIHsK
ICAgICBpZiAobV9wcmltaXRpdmVVbml0VHlwZSA9PSBDU1NfVVJJKQogICAgICAgICBhZGRTdWJy
ZXNvdXJjZVVSTCh1cmxzLCBzdHlsZVNoZWV0LT5jb21wbGV0ZVVSTChtX3ZhbHVlLnN0cmluZykp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCBhOGEwYmJjLi5jY2Qx
ODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMjgzLDcgKzI4
Myw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gbV9pc1F1
aXJrVmFsdWU7IH0KIAotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMqKTsKKyAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzKikgY29uc3Q7CiAKICAgICBMZW5ndGggdmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCmluZGV4IGY1ZDY1OGUuLmIz
NmMzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCkBAIC01OSw3ICs1
OSw3IEBAIFN0cmluZyBDU1NSZWZsZWN0VmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzKiBzdHlsZVNoZWV0KQordm9pZCBDU1NSZWZsZWN0VmFsdWU6OmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMq
IHN0eWxlU2hlZXQpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWFzaykKICAgICAgICAgbV9tYXNrLT5h
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NSZWZsZWN0VmFsdWUuaAppbmRleCA5YTg0NDI1Li41Y2ZiMjBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1JlZmxlY3RWYWx1ZS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKik7CisgICAg
dm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0
eWxlU2hlZXRDb250ZW50cyopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1JlZmxlY3RWYWx1
ZShDU1NSZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBtYXNrKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmNwcAppbmRleCA1YTc4MDI2Li4xZWViMzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmNwcApAQCAtNTksOCArNTksOSBAQCBDU1NTdHlsZVJ1bGU6On5DU1NTdHls
ZVJ1bGUoKQogCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBDU1NTdHlsZVJ1bGU6OnN0eWxlKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fcHJvcGVydGllc0NTU09NV3JhcHBlcikKLSAgICAgICAgbV9wcm9w
ZXJ0aWVzQ1NTT01XcmFwcGVyID0gU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KG1fc3R5bGVSdWxlLT5wcm9wZXJ0aWVzKCksIGNvbnN0X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4odGhp
cykpOworICAgIGlmICghbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKSB7CisgICAgICAgIG1fcHJv
cGVydGllc0NTU09NV3JhcHBlciA9IFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZShtX3N0eWxlUnVsZS0+bXV0YWJsZVByb3BlcnRpZXMoKSwgY29uc3RfY2FzdDxDU1NTdHlsZVJ1
bGUqPih0aGlzKSk7CisgICAgfQogICAgIHJldHVybiBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIu
Z2V0KCk7CiB9CiAKQEAgLTEyMyw3ICsxMjQsNyBAQCB2b2lkIENTU1N0eWxlUnVsZTo6cmVhdHRh
Y2goU3R5bGVSdWxlKiBydWxlKQogewogICAgIG1fc3R5bGVSdWxlID0gcnVsZTsKICAgICBpZiAo
bV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKQotICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBw
ZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxlLT5wcm9wZXJ0aWVzKCkpOworICAgICAgICBtX3Byb3Bl
cnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxlLT5tdXRhYmxlUHJvcGVydGll
cygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAK
aW5kZXggMTE1MTk1OS4uZjU2OGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCkBAIC05OSwx
OSArOTksMTkgQEAgQ1NTVmFsdWU6OlR5cGUgQ1NTVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0
CiAgICAgcmV0dXJuIENTU19DVVNUT007CiB9CiAKLXZvaWQgQ1NTVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0Q29u
dGVudHMqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKiBzdHls
ZVNoZWV0KSBjb25zdAogewogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVy
bmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CiAKICAgICBp
ZiAoaXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqPih0aGlzKS0+YWRk
U3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CiAgICAgZWxzZSBpZiAoaXNW
YWx1ZUxpc3QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odGhpcyktPmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOworICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCBDU1NWYWx1ZUxpc3QqPih0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMo
dXJscywgc3R5bGVTaGVldCk7CiAgICAgZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gRm9udEZhY2VT
cmNDbGFzcykKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHRoaXMp
LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ1NTRm9udEZhY2VTcmNWYWx1ZSo+KHRoaXMpLT5hZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKICAgICBlbHNlIGlmIChjbGFzc1R5cGUoKSA9
PSBSZWZsZWN0Q2xhc3MpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1JlZmxlY3RWYWx1ZSo+KHRo
aXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUmVmbGVjdFZhbHVlKj4odGhpcyktPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwogfQogCiBTdHJpbmcgQ1NTVmFsdWU6OmNzc1Rl
eHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAppbmRleCBkNWMwMjMxLi5mZTU2NDI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWUuaApAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGNsb25lRm9yQ1NTT00oKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0Q29u
dGVudHMqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKikgY29uc3Q7CiAKIHByb3RlY3RlZDoKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAppbmRleCA1MzdmMTM1Li4zYWI3Zjk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIFN0cmluZyBD
U1NWYWx1ZUxpc3Q6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKIH0KIAotdm9pZCBDU1NWYWx1ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxl
U2hlZXQpCit2b2lkIENTU1ZhbHVlTGlzdDo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkg
Y29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAppbmRl
eCBhODAxNTIxLi5hNGM1OWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCkBAIC02MCw3
ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAK
LSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgY29u
c3QgU3R5bGVTaGVldENvbnRlbnRzKik7CisgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyopIGNvbnN0Owog
ICAgIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjbG9uZUZvckNTU09NKCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAppbmRleCA0ZWMzMTk5Li4x
ZmQ0MDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCkBAIC01Mywx
MiArNTMsMTQgQEAgc3RhdGljIFByb3BlcnR5U2V0Q1NTT01XcmFwcGVyTWFwJiBwcm9wZXJ0eVNl
dENTU09NV3JhcHBlck1hcCgpCiBTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKICAgICA6IG1fY3NzUGFyc2VyTW9kZShjc3NQYXJz
ZXJNb2RlKQogICAgICwgbV9vd25zQ1NTT01XcmFwcGVyKGZhbHNlKQorICAgICwgbV9pc011dGFi
bGUodHJ1ZSkKIHsKIH0KIAogU3R5bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChTdHls
ZVByb3BlcnR5VmVjdG9yJiBwcm9wZXJ0aWVzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
CiAgICAgOiBtX2Nzc1BhcnNlck1vZGUoY3NzUGFyc2VyTW9kZSkKICAgICAsIG1fb3duc0NTU09N
V3JhcHBlcihmYWxzZSkKKyAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQogewogICAgIG1fcHJvcGVy
dGllcy5zd2FwKHByb3BlcnRpZXMpOwogCkBAIC03MSw2ICs3Myw3IEBAIFN0eWxlUHJvcGVydHlT
ZXQ6OlN0eWxlUHJvcGVydHlTZXQoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgbykKICAgICAsIG1f
cHJvcGVydGllcyhvLm1fcHJvcGVydGllcykKICAgICAsIG1fY3NzUGFyc2VyTW9kZShvLm1fY3Nz
UGFyc2VyTW9kZSkKICAgICAsIG1fb3duc0NTU09NV3JhcHBlcihmYWxzZSkKKyAgICAsIG1faXNN
dXRhYmxlKHRydWUpCiB7CiB9CiAKQEAgLTgxLDggKzg0LDE1IEBAIFN0eWxlUHJvcGVydHlTZXQ6
On5TdHlsZVByb3BlcnR5U2V0KCkKICAgICAgICAgcHJvcGVydHlTZXRDU1NPTVdyYXBwZXJNYXAo
KS5yZW1vdmUodGhpcyk7CiB9CiAKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6c2V0Q1NTUGFyc2Vy
TW9kZShDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKyAgICBtX2Nzc1BhcnNlck1vZGUgPSBjc3NQYXJzZXJNb2RlOworfQorCiB2b2lkIFN0
eWxlUHJvcGVydHlTZXQ6OmNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBTdHlsZVByb3BlcnR5U2V0
JiBvdGhlcikKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAgIG1fcHJvcGVydGllcyA9
IG90aGVyLm1fcHJvcGVydGllczsKIH0KIApAQCAtNDUzLDYgKzQ2Myw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0CiAKIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlU2hvcnRoYW5kUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogeworICAgIEFTU0VSVChpc011dGFibGUo
KSk7CiAgICAgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQ
cm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNDYxLDYgKzQ3Miw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogCiBi
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3RyaW5nKiByZXR1cm5UZXh0KQogeworICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAg
ICAgaWYgKHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5SUQpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBSZXR1cm4gYW4gZXF1aXZhbGVudCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS4KICAg
ICAgICAgaWYgKHJldHVyblRleHQpCkBAIC01MTYsNiArNTI4LDcgQEAgYm9vbCBTdHlsZVByb3Bl
cnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaXQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSBjb25z
dAogCiBib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRD
b250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsK
ICAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVz
IHRoZSBwcm9wZXJ0eSBpbiBib3RoIElFIGFuZCBHZWNrby4KICAgICAvLyBTZXR0aW5nIGl0IHRv
IG51bGwgc2VlbXMgdG8gcHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRy
ZWF0IGl0IGp1c3QgdGhlIHNhbWUuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewpAQCAtNTMw
LDYgKzU0Myw3IEBAIGJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlCiAKIHZvaWQgU3R5bGVQcm9wZXJ0
eVNldDo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBwcnBWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKICAgICBTdHlsZVByb3BlcnR5U2hvcnRoYW5kIHNob3J0aGFuZCA9IHNob3J0aGFuZEZv
clByb3BlcnR5KHByb3BlcnR5SUQpOwogICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKSB7CiAg
ICAgICAgIHNldFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIHBycFZhbHVlLCBpbXBv
cnRhbnQpKTsKQEAgLTU0NSw2ICs1NTksNyBAQCB2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZQogCiB2
b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9w
ZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAg
ICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCkpKSB7CiAgICAgICAg
IENTU1Byb3BlcnR5KiB0b1JlcGxhY2UgPSBzbG90ID8gc2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJ
ZChwcm9wZXJ0eS5pZCgpKTsKICAgICAgICAgaWYgKHRvUmVwbGFjZSkgewpAQCAtNTU3LDEyICs1
NzIsMTUgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9w
ZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG8KIAogYm9vbCBTdHlsZVByb3BlcnR5U2V0
OjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBi
b29sIGltcG9ydGFudCkKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAgIHNldFByb3Bl
cnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0
eWxlRGVjbGFyYXRpb24sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7
CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKKwogICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwog
CiAgICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KGNzc1BhcnNlck1vZGUoKSk7CkBAIC01NzYs
NiArNTk0LDcgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0
IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbiwgU3R5bGVTaGUKIAogdm9pZCBTdHlsZVByb3BlcnR5
U2V0OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mIHByb3Bl
cnRpZXMpCiB7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBtX3Byb3BlcnRpZXMucmVz
ZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkgKyBwcm9wZXJ0aWVzLnNpemUoKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIGFkZFBhcnNlZFByb3BlcnR5KHByb3BlcnRpZXNbaV0pOwpAQCAtNTgzLDYgKzYwMiw3IEBA
IHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBWZWN0b3I8
Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzCiAKIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkUGFy
c2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQogeworICAgIEFTU0VSVChp
c011dGFibGUoKSk7CiAgICAgLy8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWlt
cG9ydGFudCBjb3VudGVycGFydCBwcmVzZW50CiAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50
KHByb3BlcnR5LmlkKCkpIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpCiAgICAgICAgIHNldFBy
b3BlcnR5KHByb3BlcnR5KTsKQEAgLTgxMiw2ICs4MzIsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0
eVNldDo6YXNUZXh0KCkgY29uc3QKIAogdm9pZCBTdHlsZVByb3BlcnR5U2V0OjptZXJnZShjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQog
eworICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IG90aGVyLT5t
X3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyAr
K24pIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9w
ZXJ0aWVzW25dOwpAQCAtODI1LDcgKzg0Niw3IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6bWVy
Z2UoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25DCiAg
ICAgfQogfQogCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KQordm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhM
aXN0SGFzaFNldDxLVVJMPiYgdXJscywgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVT
aGVldCkgY29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC04NzQsNiArODk1LDcgQEAg
dm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQogCiBib29sIFN0
eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBDU1NQcm9wZXJ0eUlE
KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAg
IGlmIChtX3Byb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTkxMiw2ICs5MzQsNyBAQCBjb25zdCBDU1NQcm9wZXJ0eSogU3R5bGVQcm9wZXJ0eVNldDo6Zmlu
ZFByb3BlcnR5V2l0aElkKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRAogCiBDU1NQcm9wZXJ0eSog
U3R5bGVQcm9wZXJ0eVNldDo6ZmluZFByb3BlcnR5V2l0aElkKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAgIGZvciAoaW50IG4gPSBtX3By
b3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7CiAgICAgICAgIGlmIChwcm9wZXJ0
eUlEID09IG1fcHJvcGVydGllc1tuXS5pZCgpKQogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3Bl
cnRpZXNbbl07CkBAIC05MjcsNiArOTUwLDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojpwcm9w
ZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAogICAgIAogdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSkKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAgIFZl
Y3RvcjxDU1NQcm9wZXJ0eUlEPiBwcm9wZXJ0aWVzVG9SZW1vdmU7CiAgICAgc2l6ZV90IHNpemUg
PSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CkBAIC05NDEsNiArOTY1LDcgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVF
cXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSkKIAogdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAg
IFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiBwcm9wZXJ0aWVzVG9SZW1vdmU7CiAgICAgc2l6ZV90IHNp
emUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CkBAIC05NjcsNyArOTkyLDcgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3AKICAg
ICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0
W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7CiAgICAgfQotICAgIHJldHVybiBTdHlsZVBy
b3BlcnR5U2V0OjphZG9wdChsaXN0KTsKKyAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eVNldDo6YWRv
cHRNdXRhYmxlKGxpc3QpOwogfQogCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZVByb3BlcnR5
U2V0OjplbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVQcm9wZXJ0eVNldC5oCmluZGV4IGUxNGY4OWMuLjZhMTI4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydHlTZXQuaApAQCAtNDksMTAgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChjc3NQYXJzZXJNb2Rl
KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGFkb3B0
KFN0eWxlUHJvcGVydHlWZWN0b3ImIHByb3BlcnRpZXMsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSA9IENTU1N0cmljdE1vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gYWRvcHQoU3R5bGVQcm9wZXJ0eVZlY3RvciYgcHJvcGVydGllcywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHls
ZVByb3BlcnR5U2V0KHByb3BlcnRpZXMsIGNzc1BhcnNlck1vZGUpKTsKICAgICB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gYWRvcHRNdXRhYmxlKFN0eWxlUHJvcGVy
dHlWZWN0b3ImIHByb3BlcnRpZXMpCisgICAgeworICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQocHJvcGVydGllcywg
Q1NTU3RyaWN0TW9kZSkpOworICAgICAgICByZXN1bHQtPm1faXNNdXRhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcHJv
cGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNFbXB0eSgpOyB9CkBA
IC04NywxMiArOTMsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBtZXJnZShjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7CiAKLSAgICB2
b2lkIHNldENTU1BhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKSB7IG1fY3Nz
UGFyc2VyTW9kZSA9IGNzc1BhcnNlck1vZGU7IH0KKyAgICB2b2lkIHNldENTU1BhcnNlck1vZGUo
Q1NTUGFyc2VyTW9kZSk7CiAgICAgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyTW9kZT4obV9jc3NQYXJzZXJNb2RlKTsgfQog
Ci0gICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOworICAgIHZvaWQgYWRkU3VicmVz
b3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBTdHlsZVNoZWV0Q29udGVudHMqIGNv
bnRleHRTdHlsZVNoZWV0KSBjb25zdDsKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gY29weSgpIGNvbnN0OworCiAgICAgLy8gVXNlZCBieSBTdHlsZWRFbGVtZW50Ojpjb3B5Tm9u
QXR0cmlidXRlUHJvcGVydGllcygpLgogICAgIHZvaWQgY29weVByb3BlcnRpZXNGcm9tKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQmKTsKIApAQCAtMTA3LDkgKzExNCw4IEBAIHB1YmxpYzoKIAogICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSBjb25zdDsK
ICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
KGNvbnN0IFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIGNvbnN0OwotICAgIAotICAgIC8v
IEZJWE1FOiBFeHBhbmQgdGhlIGNvbmNlcHQgb2YgbXV0YWJsZS9pbW11dGFibGUgU3R5bGVQcm9w
ZXJ0eVNldC4KLSAgICBib29sIGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duc0NTU09N
V3JhcHBlcjsgfQorCisgICAgYm9vbCBpc011dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTXV0
YWJsZTsgfQogCiAgICAgc3RhdGljIHVuc2lnbmVkIGF2ZXJhZ2VTaXplSW5CeXRlcygpOwogCkBA
IC0xNDQsNiArMTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fY3NzUGFyc2VyTW9k
ZSA6IDI7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX293bnNDU1NPTVdyYXBwZXIgOiAxOworICAg
IG11dGFibGUgdW5zaWduZWQgbV9pc011dGFibGUgOiAxOwogICAgIAogICAgIGZyaWVuZCBjbGFz
cyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDA2YjQxYTguLjhhNTE2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTgxNiwxMSArODE2LDExIEBAIHN0YXRpYyB2b2lkIGVuc3VyZURl
ZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICBBU1NFUlQo
bWF0aE1MU3R5bGVTaGVldCB8fCBkZWZhdWx0U3R5bGUtPmZlYXR1cmVzKCkuc2libGluZ1J1bGVz
LmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFByb3BlcnRp
ZXMoTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVz
LCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIGJvb2wgaW5SZWdpb25S
dWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxl
UnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgYm9vbCBpblJlZ2lvblJ1bGUpCiB7
CiAgICAgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgKyAxKTsKICAgICBNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJv
cGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBuZXdQ
cm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgIG5ld1Byb3BlcnRpZXMucHJv
cGVydGllcyA9IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNldCo+KHByb3BlcnRpZXMpOwogICAg
IG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7CiAgICAgbmV3UHJv
cGVydGllcy5pc0luUmVnaW9uUnVsZSA9IGluUmVnaW9uUnVsZTsKICAgICBtYXRjaFJlc3VsdC5t
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogcnVsZXMsIGkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0
aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCi0gICAgICAgICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOworICAgICAgICAgICAg
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsK
ICAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYm
ICFvcHRpb25zLmluY2x1ZGVFbXB0eVJ1bGVzKSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMjkxMSw3ICsyOTExLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1
bGVzLAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFz
IG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgotICAgICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOworICAgICAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAg
ICAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IGYzODJkNWYu
LjUzOWRkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMzM0LDcgKzMzNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXM7CiAgICAgfTsKIAot
ICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgU3R5bGVQ
cm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBib29sIGluUmVnaW9uUnVsZSA9IGZh
bHNlKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYs
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgYm9vbCBpblJl
Z2lvblJ1bGUgPSBmYWxzZSk7CiAgICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1h
dGNoUmVzdWx0JiwgU3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsK
IAogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggNDAwZjQxYi4uN2JkZmQw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTE4MCw2ICsxODAsMTMgQEAgU3R5bGVS
dWxlOjp+U3R5bGVSdWxlKCkKIHsKIH0KIAorU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVSdWxlOjpt
dXRhYmxlUHJvcGVydGllcygpCit7CisgICAgaWYgKG1fcHJvcGVydGllcyAmJiAhbV9wcm9wZXJ0
aWVzLT5pc011dGFibGUoKSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzID0gbV9wcm9wZXJ0aWVzLT5j
b3B5KCk7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsKK30KKwogdm9pZCBTdHlsZVJ1
bGU6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVz
KQogeyAKICAgICBtX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwpAQCAtMjAxLDYgKzIwOCwxMyBA
QCBTdHlsZVJ1bGVQYWdlOjp+U3R5bGVSdWxlUGFnZSgpCiB7CiB9CiAKK1N0eWxlUHJvcGVydHlT
ZXQqIFN0eWxlUnVsZVBhZ2U6Om11dGFibGVQcm9wZXJ0aWVzKCkKK3sKKyAgICBpZiAobV9wcm9w
ZXJ0aWVzICYmICFtX3Byb3BlcnRpZXMtPmlzTXV0YWJsZSgpKQorICAgICAgICBtX3Byb3BlcnRp
ZXMgPSBtX3Byb3BlcnRpZXMtPmNvcHkoKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgp
OworfQorCiB2b2lkIFN0eWxlUnVsZVBhZ2U6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQogeyAKICAgICBtX3Byb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzOwpAQCAtMjIxLDYgKzIzNSwxMyBAQCBTdHlsZVJ1bGVGb250RmFjZTo6flN0eWxlUnVsZUZv
bnRGYWNlKCkKIHsKIH0KIAorU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVSdWxlRm9udEZhY2U6Om11
dGFibGVQcm9wZXJ0aWVzKCkKK3sKKyAgICBpZiAobV9wcm9wZXJ0aWVzICYmICFtX3Byb3BlcnRp
ZXMtPmlzTXV0YWJsZSgpKQorICAgICAgICBtX3Byb3BlcnRpZXMgPSBtX3Byb3BlcnRpZXMtPmNv
cHkoKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOworfQorCiB2b2lkIFN0eWxlUnVs
ZUZvbnRGYWNlOjpzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcHJv
cGVydGllcykKIHsgCiAgICAgbV9wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuaAppbmRleCBmMzk4OWUwLi5jN2JlNTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBA
IC05NCw3ICs5NCw4IEBAIHB1YmxpYzoKICAgICB+U3R5bGVSdWxlKCk7CiAKICAgICBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JM
aXN0OyB9Ci0gICAgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllcy5nZXQoKTsgfQorICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3Bl
cnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7IH0KKyAgICBTdHlsZVBy
b3BlcnR5U2V0KiBtdXRhYmxlUHJvcGVydGllcygpOwogICAgIAogICAgIHZvaWQgcGFyc2VyQWRv
cHRTZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxl
Y3RvcnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9
CiAgICAgdm9pZCB3cmFwcGVyQWRvcHRTZWxlY3Rvckxpc3QoQ1NTU2VsZWN0b3JMaXN0JiBzZWxl
Y3RvcnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHQoc2VsZWN0b3JzKTsgfQpAQCAtMTE4LDcgKzEx
OSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB+U3R5bGVSdWxlRm9udEZhY2UoKTsKIAotICAgIFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMu
Z2V0KCk7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9CisgICAgU3R5bGVQcm9wZXJ0eVNldCogbXV0
YWJsZVByb3BlcnRpZXMoKTsKIAogICAgIHZvaWQgc2V0UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+KTsKIApAQCAtMTM4LDcgKzE0MCw4IEBAIHB1YmxpYzoKICAgICB+U3R5
bGVSdWxlUGFnZSgpOwogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rvckxpc3QuZmlyc3QoKTsgfSAgICAKLSAgICBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9Cisg
ICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvcGVydGllcy5nZXQoKTsgfQorICAgIFN0eWxlUHJvcGVydHlTZXQqIG11dGFibGVQcm9wZXJ0
aWVzKCk7CiAKICAgICB2b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2VsZWN0b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0
U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JzKTsgfQogICAgIHZvaWQgd3JhcHBlckFkb3B0U2VsZWN0
b3JMaXN0KENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JzKSB7IG1fc2VsZWN0b3JMaXN0LmFkb3B0
KHNlbGVjdG9ycyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
Y3BwCmluZGV4IGNkNjFkN2IuLjA3MjJjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBdHRyaWJ1dGVEYXRhLmNwcApAQCAtMTM2LDggKzEzNiw3IEBAIFN0eWxlUHJvcGVydHlTZXQq
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50KiBl
bGVtZW50CiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkgewogICAgICAgICBBU1NFUlQo
ZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpOwotICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9
IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwotICAgICAgICBtX2lubGluZVN0eWxlRGVjbC0+
c2V0Q1NTUGFyc2VyTW9kZShzdHJpY3RUb0NTU1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOworICAgICAg
ICBtX2lubGluZVN0eWxlRGVjbCA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShzdHJpY3RUb0NT
U1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9pbmxpbmVTdHlsZURl
Y2wuZ2V0KCk7CiB9CkBAIC0xNTcsMTAgKzE1Niw4IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OnVwZGF0ZUlubGluZVN0eWxlQXZvaWRpbmdNdXRhdGlvbihTdHlsZWRFbGVtZW50KiBlbGVt
CiAgICAgLy8gVGhpcyBtYWtlcyB3cmFwcGVybGVzcyBwcm9wZXJ0eSBzZXRzIGltbXV0YWJsZSBh
bmQgc28gY2FjaGVhYmxlLgogICAgIGlmIChtX2lubGluZVN0eWxlRGVjbCAmJiAhbV9pbmxpbmVT
dHlsZURlY2wtPmlzTXV0YWJsZSgpKQogICAgICAgICBtX2lubGluZVN0eWxlRGVjbC5jbGVhcigp
OwotICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKLSAgICAgICAgbV9pbmxpbmVTdHlsZURl
Y2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKLSAgICAgICAgbV9pbmxpbmVTdHlsZURl
Y2wtPnNldENTU1BhcnNlck1vZGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKLSAg
ICB9CisgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkKKyAgICAgICAgbV9pbmxpbmVTdHlsZURl
Y2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCkpKTsKICAgICBtX2lubGluZVN0eWxlRGVjbC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBlbGVt
ZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+Y29udGVudHMoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAzYmJkYmYxLi5kMTRhOTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMDMzLDEwICsxMDMz
LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGVGcm9tTWF0Y2hl
ZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlbGUKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1h
dGNoZWRSdWxlcyA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+c3R5bGVS
dWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcnVsZXNUb0luY2x1ZGUpOwogICAgIGlmIChtYXRjaGVk
UnVsZXMpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxlcy0+
bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRSdWxlcy0+aXRlbShpKS0+
dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gcyA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KG1hdGNoZWRS
dWxlcy0+aXRlbShpKSktPnN0eWxlUnVsZSgpLT5wcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAg
ICAgc3R5bGUtPm1lcmdlKHMuZ2V0KCksIHRydWUpOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG1hdGNoZWRSdWxlcy0+aXRlbShpKS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JV
TEUpCisgICAgICAgICAgICAgICAgc3R5bGUtPm1lcmdlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KG1hdGNoZWRSdWxlcy0+aXRlbShpKSktPnN0eWxlUnVsZSgpLT5wcm9wZXJ0aWVzKCksIHRy
dWUpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmNwcAppbmRleCAwMmY3ZDlhLi43YzY3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgU1ZHRm9u
dEZhY2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkK
IHsgICAgCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wSWQgPSBjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0
cmlidXRlTmFtZShhdHRyaWJ1dGUubmFtZSgpKTsKICAgICBpZiAocHJvcElkID4gMCkgewotICAg
ICAgICBtX2ZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpLT5zZXRQcm9wZXJ0eShwcm9wSWQsIGF0
dHJpYnV0ZS52YWx1ZSgpLCBmYWxzZSk7CisgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxl
UHJvcGVydGllcygpLT5zZXRQcm9wZXJ0eShwcm9wSWQsIGF0dHJpYnV0ZS52YWx1ZSgpLCBmYWxz
ZSk7CiAgICAgICAgIHJlYnVpbGRGb250RmFjZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZh
Y2UoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQYXJzZSBpbi1tZW1vcnkgQ1NTIHJ1bGVz
Ci0gICAgbV9mb250RmFjZVJ1bGUtPnByb3BlcnRpZXMoKS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NT
UHJvcGVydHkoQ1NTUHJvcGVydHlTcmMsIGxpc3QpKTsKKyAgICBtX2ZvbnRGYWNlUnVsZS0+bXV0
YWJsZVByb3BlcnRpZXMoKS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVy
dHlTcmMsIGxpc3QpKTsKIAogICAgIGlmIChkZXNjcmliZXNQYXJlbnRGb250KSB7ICAgIAogICAg
ICAgICAvLyBUcmF2ZXJzZSBwYXJzZWQgQ1NTIHZhbHVlcyBhbmQgYXNzb2NpYXRlIENTU0ZvbnRG
YWNlU3JjVmFsdWUgZWxlbWVudHMgd2l0aCBvdXJzZWx2ZXMuCkBAIC0zMzEsNyArMzMxLDcgQEAg
dm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIHJvb3RQ
YXJlbnQpCiAKICAgICBpZiAocm9vdFBhcmVudC0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxl
bWVudCh0aGlzKTsKLSAgICAgICAgbV9mb250RmFjZVJ1bGUtPnByb3BlcnRpZXMoKS0+cGFyc2VE
ZWNsYXJhdGlvbihlbXB0eVN0cmluZygpLCAwKTsKKyAgICAgICAgbV9mb250RmFjZVJ1bGUtPm11
dGFibGVQcm9wZXJ0aWVzKCktPnBhcnNlRGVjbGFyYXRpb24oZW1wdHlTdHJpbmcoKSwgMCk7CiAK
ICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHls
ZSk7CiAgICAgfQo=
</data>
<flag name="review"
          id="151386"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>