<?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>92748</bug_id>
          
          <creation_ts>2012-07-31 06:58:19 -0700</creation_ts>
          <short_desc>Web Inspector: add CSSStyleSheet memory instrumentation</short_desc>
          <delta_ts>2012-08-03 09:21:18 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87262</blocked>
    
    <blocked>92962</blocked>
    
    <blocked>92966</blocked>
    
    <blocked>93130</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>alph</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>682999</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-07-31 06:58:19 -0700</bug_when>
    <thetext>It includes instrumenting a bunch of related classes including StyleRule, StylePropertySet etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683057</commentid>
    <comment_count>1</comment_count>
      <attachid>155537</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-07-31 07:50:47 -0700</bug_when>
    <thetext>Created attachment 155537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683077</commentid>
    <comment_count>2</comment_count>
      <attachid>155537</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-31 08:02:38 -0700</bug_when>
    <thetext>Comment on attachment 155537
Patch

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

&gt; Source/WebCore/css/StyleSheetContents.cpp:445
&gt; +void StyleSheetContents::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const

StyleSheetContents can be shared among several CSSStyleSheet&apos;s (and will be copied on write). I suggest talking to anttik to sort this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683084</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-07-31 08:13:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 155537 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155537&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/StyleSheetContents.cpp:445
&gt; &gt; +void StyleSheetContents::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
&gt; 
&gt; StyleSheetContents can be shared among several CSSStyleSheet&apos;s (and will be copied on write). I suggest talking to anttik to sort this out.

It&apos;s not a problem in case of memory instrumentation as we keep a set of all visited objects which prevents double counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683942</commentid>
    <comment_count>4</comment_count>
      <attachid>155537</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-08-01 00:50:31 -0700</bug_when>
    <thetext>Comment on attachment 155537
Patch

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

lgtm

&gt; Source/WebCore/css/CSSStyleSheet.cpp:177
&gt; +    info.addInstrumentedMember(m_contents);
&gt; +    info.addString(m_title);
&gt; +    info.addInstrumentedMember(m_mediaQueries);

why did you skip other members?
    Node* m_ownerNode;
    CSSImportRule* m_ownerRule;

    mutable RefPtr&lt;MediaList&gt; m_mediaCSSOMWrapper;
    mutable Vector&lt;RefPtr&lt;CSSRule&gt; &gt; m_childRuleCSSOMWrappers;
    mutable OwnPtr&lt;CSSRuleList&gt; m_ruleListCSSOMWrapper;

&gt; Source/WebCore/css/StyleSheetContents.cpp:450
&gt; +

empty line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683985</commentid>
    <comment_count>5</comment_count>
      <attachid>155537</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-08-01 01:50:00 -0700</bug_when>
    <thetext>Comment on attachment 155537
Patch

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

r=me

&gt; Source/WebCore/css/StylePropertySet.cpp:1084
&gt; +    MemoryClassInfo&lt;StylePropertySet&gt; info(memoryObjectInfo, this, MemoryInstrumentation::CSS);
&gt; +    if (m_isMutable)
&gt; +        info.addVectorPtr(m_mutablePropertyVector);
&gt; +    else
&gt; +        info.addRawBuffer(m_properties, m_arraySize * sizeof(CSSProperty));

CSSProperty contains a CSSValue. You are not taking its size (which may be significant) into account. Is this something you plan to do later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684140</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-01 06:25:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 155537 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155537&amp;action=review
&gt; 
&gt; lgtm
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSheet.cpp:177
&gt; &gt; +    info.addInstrumentedMember(m_contents);
&gt; &gt; +    info.addString(m_title);
&gt; &gt; +    info.addInstrumentedMember(m_mediaQueries);
&gt; 
&gt; why did you skip other members?
&gt;     Node* m_ownerNode;
&gt;     CSSImportRule* m_ownerRule;
&gt; 
&gt;     mutable RefPtr&lt;MediaList&gt; m_mediaCSSOMWrapper;
&gt;     mutable Vector&lt;RefPtr&lt;CSSRule&gt; &gt; m_childRuleCSSOMWrappers;
&gt;     mutable OwnPtr&lt;CSSRuleList&gt; m_ruleListCSSOMWrapper;
&gt; 
They will be instrumented in the next patch.

&gt; &gt; Source/WebCore/css/StyleSheetContents.cpp:450
&gt; &gt; +
&gt; 
&gt; empty line
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684141</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-01 06:27:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 155537 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155537&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/css/StylePropertySet.cpp:1084
&gt; &gt; +    MemoryClassInfo&lt;StylePropertySet&gt; info(memoryObjectInfo, this, MemoryInstrumentation::CSS);
&gt; &gt; +    if (m_isMutable)
&gt; &gt; +        info.addVectorPtr(m_mutablePropertyVector);
&gt; &gt; +    else
&gt; &gt; +        info.addRawBuffer(m_properties, m_arraySize * sizeof(CSSProperty));
&gt; 
&gt; CSSProperty contains a CSSValue. You are not taking its size (which may be significant) into account. Is this something you plan to do later?

I&apos;m planning to instrument it and CSSRule in the next patch to keep the changes small enough for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684146</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-01 06:30:26 -0700</bug_when>
    <thetext>Committed r124330: &lt;http://trac.webkit.org/changeset/124330&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155537</attachid>
            <date>2012-07-31 07:50:47 -0700</date>
            <delta_ts>2012-08-01 01:49:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92748-20120731185029.patch</filename>
            <type>text/plain</type>
            <size>32245</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ2ODM4M2Q3NjUzNTYz
MjQzODk2YmFkNjZlZmExODgzMWE0MWQ5OC4uZWFlZTc3NzI5ZjI2NDRiZmQ2NTEwYWMzYzM0Zjdm
MzFhMDUzYWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDEyLTA3LTMxICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFkZCBDU1NTdHlsZVNoZWV0IG1lbW9yeSBpbnN0cnVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uIGZvciBDU1NTdHlsZVNoZWV0LCBTdHlsZVNoZWV0Q29udGVudHMsIFN0eWxlUnVsZSwK
KyAgICAgICAgQ1NTU2VsZWN0b3JMaXN0IGFuZCBTdHlsZVByb3BlcnR5U2V0LiBUaGUgY292ZXJh
Z2UgaXMgbm90IGNvbXBsZXRlIGFzIHRoZQorICAgICAgICBwYXRjaCB3YXMgZ3Jvd2luZyB0b28g
YmlnLgorCisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTZWxlY3Rvckxpc3Q6OkNTU1NlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvckxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1NlbGVjdG9yTGlzdDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAq
IGNzcy9DU1NTZWxlY3Rvckxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NT
U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6
cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpyZXBvcnRN
ZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL01lZGlhTGlzdC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChNZWRpYVF1ZXJ5U2V0KToKKyAgICAgICAgKE1lZGlhTGlzdCk6CisgICAg
ICAgICogY3NzL01lZGlhUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL01l
ZGlhUXVlcnkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFRdWVyeSk6Cisg
ICAgICAgICogY3NzL01lZGlhUXVlcnlFeHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUV4cDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL01lZGlhUXVlcnlFeHAuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVk
aWFRdWVyeUV4cCk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoU3R5bGVQcm9wZXJ0eVNldCk6CisgICAgICAgICogY3NzL1N0
eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1v
cnlVc2FnZSk6IFdlIGNhbm5vdCBtYWtlCisgICAgICAgIHJlcG9ydE1lbW9yeVVzYWdlIHZpcnR1
YWwgYXMgaXQgd291bGQgYWRkIHZ0YWJsZSB0byBTdHlsZVJ1bGVCYXNlCisgICAgICAgIGFuZCBp
dHMgZGVzY2VuZGFudHMgYW5kIHdvdWxkIGJsb3cgaXRzIG1lbW9yeSBmb290cHJpbnQuIFRoaXMK
KyAgICAgICAgaXMgd2h5IHdlIGhhdmUgYSBzd2l0Y2ggb3ZlciBTdHlsZVJ1bGUgdHlwZSBoZXJl
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGU6OnJlcG9y
dE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZVBhZ2U6OnJlcG9ydE1l
bW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUZvbnRGYWNlOjpyZXBvcnRN
ZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCbG9jazo6cmVwb3J0TWVt
b3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlTWVkaWE6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZVJlZ2lvbjo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoU3R5bGVSdWxlQmFzZSk6CisgICAgICAgIChTdHlsZVJ1bGUpOgorICAgICAgICAo
U3R5bGVSdWxlRm9udEZhY2UpOgorICAgICAgICAoU3R5bGVSdWxlUGFnZSk6CisgICAgICAgIChT
dHlsZVJ1bGVCbG9jayk6CisgICAgICAgIChTdHlsZVJ1bGVNZWRpYSk6CisgICAgICAgIChTdHls
ZVJ1bGVSZWdpb24pOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpyZXBvcnRNZW1vcnlVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2hlZXRDb250ZW50cyk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZXBvcnRN
ZW1vcnlVc2FnZSk6CisgICAgICAgICogZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6TWVtb3J5Q2xhc3NJbmZvOjphZGRJbnN0cnVtZW50ZWRWZWN0b3JQdHIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2xhc3NJbmZvOjphZGRWZWN0b3JQdHIpOgorCiAy
MDEyLTA3LTMwICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEltcGxlbWVudCBkYXRhbGlzdCBVSSBmb3IgaW5wdXQgdHlwZSBjb2xvciBmb3IgQ2hyb21pdW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKaW5kZXggZmIzZDFmMTJmZjY5ZTFj
ZTlkZjY2Y2UxMDczY2Q2Mjk0NGM3YmIxNS4uN2Y2YzMyMzU5NGNjYTFmYTJhMDFlYThlNTZlYTA1
NjNmMTVjMDdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKIAogI2luY2x1ZGUgIkNT
U1BhcnNlclZhbHVlcy5oIgorI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzksMTAgKzQwLDcgQEAgQ1NTU2VsZWN0b3JMaXN0Ojp+Q1NTU2VsZWN0b3JMaXN0KCkKIAog
Q1NTU2VsZWN0b3JMaXN0OjpDU1NTZWxlY3Rvckxpc3QoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBv
KQogewotICAgIENTU1NlbGVjdG9yKiBjdXJyZW50ID0gby5tX3NlbGVjdG9yQXJyYXk7Ci0gICAg
d2hpbGUgKCFjdXJyZW50LT5pc0xhc3RJblNlbGVjdG9yTGlzdCgpKQotICAgICAgICArK2N1cnJl
bnQ7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gKGN1cnJlbnQgLSBvLm1fc2VsZWN0b3JBcnJheSkg
KyAxOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG8ubGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aCA9
PSAxKSB7CiAgICAgICAgIC8vIERlc3RydWN0b3IgZXhwZWN0cyBhIHNpbmdsZSBzZWxlY3RvciB0
byBiZSBhbGxvY2F0ZWQgYnkgbmV3LCBtdWx0aXBsZSB3aXRoIGZhc3RNYWxsb2MuCiAgICAgICAg
IG1fc2VsZWN0b3JBcnJheSA9IG5ldyBDU1NTZWxlY3RvcihvLm1fc2VsZWN0b3JBcnJheVswXSk7
CkBAIC05Nyw2ICs5NSwxNiBAQCB2b2lkIENTU1NlbGVjdG9yTGlzdDo6YWRvcHRTZWxlY3RvclZl
Y3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZQogICAgIHNlbGVjdG9y
VmVjdG9yLnNocmluaygwKTsKIH0KIAordW5zaWduZWQgQ1NTU2VsZWN0b3JMaXN0OjpsZW5ndGgo
KSBjb25zdAoreworICAgIGlmICghbV9zZWxlY3RvckFycmF5KQorICAgICAgICByZXR1cm4gMDsK
KyAgICBDU1NTZWxlY3RvciogY3VycmVudCA9IG1fc2VsZWN0b3JBcnJheTsKKyAgICB3aGlsZSAo
IWN1cnJlbnQtPmlzTGFzdEluU2VsZWN0b3JMaXN0KCkpCisgICAgICAgICsrY3VycmVudDsKKyAg
ICByZXR1cm4gKGN1cnJlbnQgLSBtX3NlbGVjdG9yQXJyYXkpICsgMTsKK30KKwogdm9pZCBDU1NT
ZWxlY3Rvckxpc3Q6OmRlbGV0ZVNlbGVjdG9ycygpCiB7CiAgICAgaWYgKCFtX3NlbGVjdG9yQXJy
YXkpCkBAIC0xMzUsNiArMTQzLDEyIEBAIFN0cmluZyBDU1NTZWxlY3Rvckxpc3Q6OnNlbGVjdG9y
c1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAordm9pZCBD
U1NTZWxlY3Rvckxpc3Q6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvPENTU1NlbGVjdG9yTGlz
dD4gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBNZW1vcnlJbnN0cnVtZW50YXRpb246OkNT
Uyk7CisgICAgaW5mby5hZGRSYXdCdWZmZXIobV9zZWxlY3RvckFycmF5LCBsZW5ndGgoKSAqIHNp
emVvZihDU1NTZWxlY3RvcikpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIHN0
YXRpYyBib29sIGZvckVhY2hUYWdTZWxlY3RvcihGdW5jdG9yJiBmdW5jdG9yLCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0
b3JMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmgKaW5kZXggZTBh
YTY1YzAyYmYzMzA4N2YyYTFhYjI3ZjBjZDAxNGE0MzhlMjJlZi4uODk4NjBlZTA5MDkwZDZhMTlh
MmNiOGMyZTdiNDRiODIwNTM3ZTgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3Qu
aApAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NQYXJz
ZXJTZWxlY3RvcjsKK2NsYXNzIE1lbW9yeU9iamVjdEluZm87CiAKIGNsYXNzIENTU1NlbGVjdG9y
TGlzdCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01Miw3ICs1MywxMCBAQCBw
dWJsaWM6CiAKICAgICBTdHJpbmcgc2VsZWN0b3JzVGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKIHByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVTZWxlY3RvcnMoKTsK
IAogICAgIC8vIEVuZCBvZiBhIG11bHRpcGFydCBzZWxlY3RvciBpcyBpbmRpY2F0ZWQgYnkgbV9p
c0xhc3RJblRhZ0hpc3RvcnkgYml0IGluIHRoZSBsYXN0IGl0ZW0uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5jcHAKaW5kZXggMDBiMmQ5MWM1NTg3NDBmMjJiOGFjNmVlYzQ0NDFhNGMzY2Mw
NzRiZS4uYTJhOTRhNzk1NGFmODI5YTZlMTI5YTI4ZWI5Mjg1ZmZiY2JhMmE4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKKyNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMTY4LDYgKzE2OSwxNCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnJlYXR0YWNoQ2hpbGRSdWxl
Q1NTT01XcmFwcGVycygpCiAgICAgfQogfQogCit2b2lkIENTU1N0eWxlU2hlZXQ6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7Cisg
ICAgTWVtb3J5Q2xhc3NJbmZvPENTU1N0eWxlU2hlZXQ+IGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8uYWRkSW5zdHJ1bWVu
dGVkTWVtYmVyKG1fY29udGVudHMpOworICAgIGluZm8uYWRkU3RyaW5nKG1fdGl0bGUpOworICAg
IGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1fbWVkaWFRdWVyaWVzKTsKK30KKwogdm9pZCBD
U1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogeyAKICAgICBpZiAoZGlz
YWJsZWQgPT0gbV9pc0Rpc2FibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKaW5kZXgg
NWE4MzllMGVlNWY1ODIzM2ZhZmNkMWNlZDYwNzBkMmNjNjViZTZiNy4uZjM4NDcyZGNhYTZlN2M3
YzQ5MGY2ZGU3MzM2NWEwMGY1NzM1NTY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5o
CkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBNZWRpYVF1ZXJ5U2V0OworY2xhc3Mg
TWVtb3J5T2JqZWN0SW5mbzsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwogCkBAIC0xMDUsNiArMTA2LDggQEAgcHVibGljOgogCiAgICAgU3R5bGVTaGVl
dENvbnRlbnRzKiBjb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHMuZ2V0KCk7IH0K
IAorICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIENTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVu
dHM+LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpOwogICAgIENTU1N0eWxlU2hlZXQoUGFzc1Jl
ZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+LCBOb2RlKiBvd25lck5vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFMaXN0LmNwcAppbmRleCA1ZmM3OTNlMzEyYjUyOGIzZGZkNmVlMGY3YmRlOGNjNDAzMWQwYzJj
Li5jMDA0YzliMDY2NDY4MjFkM2Q0ZDE0YjFmMGUzYmM2ODA2ODcyNjMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFMaXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgor
I2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTIwOSw2ICsyMTAsMTIgQEAgU3RyaW5nIE1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCgp
IGNvbnN0CiAgICAgfQogICAgIHJldHVybiB0ZXh0OwogfQorCit2b2lkIE1lZGlhUXVlcnlTZXQ6
OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNv
bnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvPE1lZGlhUXVlcnlTZXQ+IGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkVmVjdG9yKG1fcXVlcmllcyk7Cit9CiAgICAgCiBNZWRpYUxpc3Q6Ok1lZGlh
TGlzdChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMsIENTU1N0eWxlU2hlZXQqIHBhcmVudFNo
ZWV0KQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVkaWFRdWVyaWVzKQpAQCAtMjgyLDQgKzI4OSwx
MCBAQCB2b2lkIE1lZGlhTGlzdDo6cmVhdHRhY2goTWVkaWFRdWVyeVNldCogbWVkaWFRdWVyaWVz
KQogICAgIG1fbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzOwogfQogCit2b2lkIE1lZGlhTGlz
dDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm88TWVkaWFMaXN0PiBpbmZvKG1lbW9yeU9iamVj
dEluZm8sIHRoaXMsIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZElu
c3RydW1lbnRlZE1lbWJlcihtX21lZGlhUXVlcmllcyk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxp
c3QuaAppbmRleCAzMmQwZWMzN2QzYTgzZGViMTUyNTUzYjE5ZDBkZGRhZTcyYjM3YzhmLi41NWYw
ZmMxNGI2MmY5OWE4MTc0MjkwNGUxNTRhMWIxMTAzYmY5NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlz
dC5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0
OwogY2xhc3MgTWVkaWFMaXN0OwogY2xhc3MgTWVkaWFRdWVyeTsKK2NsYXNzIE1lbW9yeU9iamVj
dEluZm87CiAKIGNsYXNzIE1lZGlhUXVlcnlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVF1
ZXJ5U2V0PiB7CiBwdWJsaWM6CkBAIC02Niw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8TWVkaWFRdWVyeVNldD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZWRpYVF1ZXJ5U2V0KCp0aGlzKSk7IH0KIAorICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyopIGNvbnN0OworCiBwcml2YXRlOgogICAgIE1lZGlhUXVlcnlTZXQoKTsK
ICAgICBNZWRpYVF1ZXJ5U2V0KGNvbnN0IFN0cmluZyYgbWVkaWFRdWVyeSwgYm9vbCBmYWxsYmFj
a1RvRGVzY3JpcHRpb24pOwpAQCAtMTA2LDYgKzEwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVhdHRhY2goTWVkaWFRdWVyeVNldCopOwogCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgTWVkaWFMaXN0KCk7CiAg
ICAgTWVkaWFMaXN0KE1lZGlhUXVlcnlTZXQqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5jcHAKaW5kZXggNzA0YzAwYTU5ZGM0N2Q3Y2E1ZTcwODcz
YmQwM2RmYjcxMDFkZTJkZS4uMmJiMmE3OWE3MGYzMWE5YjE4ODIyM2E5YTRjY2QwNzQ0MDVjNmU2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIk1lZGlhUXVlcnkuaCIKIAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKKyNpbmNsdWRl
ICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvTm9uQ29weWluZ1NvcnQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTEzMyw0ICsxMzQs
MTIgQEAgU3RyaW5nIE1lZGlhUXVlcnk6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiBtX3Nl
cmlhbGl6YXRpb25DYWNoZTsKIH0KIAordm9pZCBNZWRpYVF1ZXJ5OjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9y
eUNsYXNzSW5mbzxNZWRpYVF1ZXJ5PiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9y
eUluc3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZFN0cmluZyhtX21lZGlhVHlwZSk7
CisgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRWZWN0b3JQdHIobV9leHByZXNzaW9ucyk7CisgICAg
aW5mby5hZGRTdHJpbmcobV9zZXJpYWxpemF0aW9uQ2FjaGUpOworfQorCiB9IC8vbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnkuaAppbmRleCAzOThlODQ1MjcyNTc4YzI1NTExZmI4NjU0NWRk
MjUxOTE1MjkwZTRiLi5mMzdjNzY0OTI3NTM0NThmOWYzMTNjNDdkMDAxYjYxNGY0NTlhMjE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgTWVkaWFRdWVyeUV4cDsKK2NsYXNzIE1lbW9yeU9iamVjdEluZm87CiAK
IGNsYXNzIE1lZGlhUXVlcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTgs
NiArNTksOCBAQCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IGNvcHkoKSBj
b25zdCB7IHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeSgqdGhpcykpOyB9CiAKKyAgICB2
b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKwogIHByaXZh
dGU6CiAgICAgTWVkaWFRdWVyeShjb25zdCBNZWRpYVF1ZXJ5Jik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5RXhwLmNwcAppbmRleCA3NzBkODgyNzM2ZTcyNWQ4YTk2MGFiODY1NDZlNzIyZDNm
YjZlMTBmLi5hMTE4NTViYzBhOWFiZjc3YjAwNzcwZjY1MTE4MjA0ODUzNmMxYWU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTEwOCw0ICsxMDksMTEgQEAgU3RyaW5nIE1lZGlhUXVlcnlFeHA6OnNlcmlhbGl6ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNhY2hlOwogfQogCit2b2lkIE1lZGlhUXVlcnlF
eHA6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvPE1lZGlhUXVlcnlFeHA+IGluZm8obWVtb3J5
T2JqZWN0SW5mbywgdGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8u
YWRkU3RyaW5nKG1fbWVkaWFGZWF0dXJlKTsKKyAgICBpbmZvLmFkZFN0cmluZyhtX3NlcmlhbGl6
YXRpb25DYWNoZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlF
eHAuaAppbmRleCAwMDNkZTAyYjVkMzhjM2ViODAxNGQzMTY5MjgzODM1MGU4YjA1NDc1Li5lNzdl
YTE3OTBiMGRmODVhZjZmNjhhZDY5ODliZjcwY2RhZDAwOTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXhwLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ1NTUGFyc2VyVmFsdWVMaXN0OworY2xhc3MgTWVtb3J5T2JqZWN0SW5mbzsKIAogY2xhc3Mg
TWVkaWFRdWVyeUV4cCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC03Miw2ICs3
Myw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeUV4cD4gY29weSgpIGNv
bnN0IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXhwKCp0aGlzKSk7IH0KIAorICAg
IHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCiBwcml2
YXRlOgogICAgIE1lZGlhUXVlcnlFeHAoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUs
IENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJv
cGVydHlTZXQuY3BwCmluZGV4IDBjMjVhNWE5Yzc1Y2U2NjBlN2RkZDVjNWY4NzJiMmEzNzEzMTk1
ZDQuLjc5YWIwNDMzN2NhZTY2ZjE1ODBiNzY0MTc4ODNjY2M2NDNjY2Y0MTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKQEAgLTEwNzUsNiArMTA3NSwxNSBAQCB1bnNp
Z25lZCBTdHlsZVByb3BlcnR5U2V0OjphdmVyYWdlU2l6ZUluQnl0ZXMoKQogICAgIHJldHVybiBz
aXplb2YoU3R5bGVQcm9wZXJ0eVNldCkgKyBzaXplb2YoQ1NTUHJvcGVydHkpICogMjsKIH0KIAor
dm9pZCBTdHlsZVByb3BlcnR5U2V0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbzxTdHlsZVBy
b3BlcnR5U2V0PiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9yeUluc3RydW1lbnRh
dGlvbjo6Q1NTKTsKKyAgICBpZiAobV9pc011dGFibGUpCisgICAgICAgIGluZm8uYWRkVmVjdG9y
UHRyKG1fbXV0YWJsZVByb3BlcnR5VmVjdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGluZm8uYWRk
UmF3QnVmZmVyKG1fcHJvcGVydGllcywgbV9hcnJheVNpemUgKiBzaXplb2YoQ1NTUHJvcGVydHkp
KTsKK30KKwogLy8gU2VlIHRoZSBmdW5jdGlvbiBhYm92ZSBpZiB5b3UgbmVlZCB0byB1cGRhdGUg
dGhpcy4KIHN0cnVjdCBTYW1lU2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNhbWVTaXplQXNTdHlsZVByb3BlcnR5U2V0PiB7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAppbmRleCBhNGExM2VmNWUyYzc2OWRj
NjE2NTZlMmQ5YTQxNDBiYWE5MWE2YzMxLi5hNmQ1ODE5YTM0N2E1YWNiNzJiN2M0N2U5NTJkNTBm
YmJiZjVjNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKQEAgLTI1LDcg
KzI1LDYgQEAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIk1lbW9y
eUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM1
LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENT
U1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBLVVJMOworY2xhc3MgTWVtb3J5T2JqZWN0SW5mbzsK
IGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIFN0eWxlZEVsZW1l
bnQ7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2hvcnRoYW5kOwpAQCAtMTExLDE4ICsxMTEsMTIgQEAg
cHVibGljOgogICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7
IH0KIAogICAgIHN0YXRpYyB1bnNpZ25lZCBhdmVyYWdlU2l6ZUluQnl0ZXMoKTsKKyAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogI2lmbmRlZiBO
REVCVUcKICAgICB2b2lkIHNob3dTdHlsZSgpOwogI2VuZGlmCiAgICAgCi0gICAgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAot
ICAgIHsKLSAgICAgICAgTWVtb3J5Q2xhc3NJbmZvPFN0eWxlUHJvcGVydHlTZXQ+IGluZm8obWVt
b3J5T2JqZWN0SW5mbywgdGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MsIG1fYXJyYXlT
aXplICogc2l6ZW9mKENTU1Byb3BlcnR5KSk7Ci0gICAgICAgIGlmIChtX2lzTXV0YWJsZSkKLSAg
ICAgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fbXV0YWJsZVByb3BlcnR5VmVjdG9yKTsKLSAgICB9
Ci0KIHByaXZhdGU6CiAgICAgU3R5bGVQcm9wZXJ0eVNldChDU1NQYXJzZXJNb2RlKTsKICAgICBT
dHlsZVByb3BlcnR5U2V0KGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0aWVzLCB1bnNpZ25lZCBj
b3VudCwgQ1NTUGFyc2VyTW9kZSwgYm9vbCBtYWtlTXV0YWJsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuY3BwCmluZGV4IDM0MjdmMDU1OTIxN2U2MmYzOTI3OGE4ODA1YWIzZDhkOGE0ZTk1MjguLmU1
YTRiYmRiODhiNTcyZDA4M2UzNTRkMjcyYzU3MjZmYTRlZDg0ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCiAj
aW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNs
dWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQu
aCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKICNpbmNsdWRlICJXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmgiCkBAIC01MSw2ICs1Miw0MSBAQCBQYXNzUmVmUHRyPENTU1J1bGU+
IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NSdWxlKiBwYXJlbnRSdWxlKSBj
b25zdAogICAgIHJldHVybiBjcmVhdGVDU1NPTVdyYXBwZXIoMCwgcGFyZW50UnVsZSk7CiB9CiAK
K3ZvaWQgU3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNh
c2UgU3R5bGU6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZSo+KHRoaXMpLT5y
ZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUGFnZToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlUGFnZSo+KHRo
aXMpLT5yZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRm9udEZhY2U6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVs
ZUZvbnRGYWNlKj4odGhpcyktPnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNZWRpYToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgU3R5bGVSdWxlTWVkaWEqPih0aGlzKS0+cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0
SW5mbyk7CisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgY2Fz
ZSBSZWdpb246CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZVJlZ2lvbio+KHRo
aXMpLT5yZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisgICAgY2FzZSBJbXBvcnQ6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0
eWxlUnVsZUltcG9ydCo+KHRoaXMpLT5yZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZv
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgS2V5ZnJhbWVzOgorICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+cmVwb3J0TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFVua25vd246Cisg
ICAgY2FzZSBDaGFyc2V0OgorICAgIGNhc2UgS2V5ZnJhbWU6CisgICAgICAgIE1lbW9yeUNsYXNz
SW5mbzxTdHlsZVJ1bGVCYXNlPiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9yeUlu
c3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUoKSkgewpAQCAtMTcwLDYgKzIwNiwxMyBAQCB1bnNpZ25lZCBTdHlsZVJ1
bGU6OmF2ZXJhZ2VTaXplSW5CeXRlcygpCiAgICAgcmV0dXJuIHNpemVvZihTdHlsZVJ1bGUpICsg
U3R5bGVQcm9wZXJ0eVNldDo6YXZlcmFnZVNpemVJbkJ5dGVzKCk7CiB9CiAKK3ZvaWQgU3R5bGVS
dWxlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbzxTdHlsZVJ1bGU+IGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkTWVtYmVyKG1fcHJvcGVydGllcyk7CisgICAgaW5mby5hZGRJbnN0cnVtZW50
ZWRNZW1iZXIobV9zZWxlY3Rvckxpc3QpOworfQorCiBTdHlsZVJ1bGU6OlN0eWxlUnVsZShpbnQg
c291cmNlTGluZSkKICAgICA6IFN0eWxlUnVsZUJhc2UoU3R5bGUsIHNvdXJjZUxpbmUpCiB7CkBA
IC0yMjYsNiArMjY5LDEzIEBAIHZvaWQgU3R5bGVSdWxlUGFnZTo6c2V0UHJvcGVydGllcyhQYXNz
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXMpCiAgICAgbV9wcm9wZXJ0aWVzID0g
cHJvcGVydGllczsKIH0KIAordm9pZCBTdHlsZVJ1bGVQYWdlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNs
YXNzSW5mbzxTdHlsZVJ1bGVQYWdlPiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9y
eUluc3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlciht
X3Byb3BlcnRpZXMpOworICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1fc2VsZWN0b3JM
aXN0KTsKK30KKwogU3R5bGVSdWxlRm9udEZhY2U6OlN0eWxlUnVsZUZvbnRGYWNlKCkKICAgICA6
IFN0eWxlUnVsZUJhc2UoRm9udEZhY2UsIDApCiB7CkBAIC0yNTMsNiArMzAzLDEzIEBAIHZvaWQg
U3R5bGVSdWxlRm9udEZhY2U6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiBwcm9wZXJ0aWVzKQogICAgIG1fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7CiB9CiAKK3Zv
aWQgU3R5bGVSdWxlRm9udEZhY2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvPFN0eWxlUnVs
ZUZvbnRGYWNlPiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIE1lbW9yeUluc3RydW1lbnRh
dGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihtX3Byb3BlcnRpZXMp
OworfQorCisKIFN0eWxlUnVsZUJsb2NrOjpTdHlsZVJ1bGVCbG9jayhUeXBlIHR5cGUsIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlKQogICAgIDogU3R5bGVSdWxlQmFz
ZSh0eXBlLCAwKQogewpAQCAtMjc3LDYgKzMzNCwxMiBAQCB2b2lkIFN0eWxlUnVsZUJsb2NrOjp3
cmFwcGVyUmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCkKICAgICBtX2NoaWxkUnVsZXMucmVtb3Zl
KGluZGV4KTsKIH0KIAordm9pZCBTdHlsZVJ1bGVCbG9jazo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFz
c0luZm88U3R5bGVSdWxlQmxvY2s+IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgTWVtb3J5
SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkVmVjdG9yKG1f
Y2hpbGRSdWxlcyk7Cit9CisKIFN0eWxlUnVsZU1lZGlhOjpTdHlsZVJ1bGVNZWRpYShQYXNzUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4m
IGFkb3B0UnVsZXMpCiAgICAgOiBTdHlsZVJ1bGVCbG9jayhNZWRpYSwgYWRvcHRSdWxlcykKICAg
ICAsIG1fbWVkaWFRdWVyaWVzKG1lZGlhKQpAQCAtMjkwLDYgKzM1MywxMiBAQCBTdHlsZVJ1bGVN
ZWRpYTo6U3R5bGVSdWxlTWVkaWEoY29uc3QgU3R5bGVSdWxlTWVkaWEmIG8pCiAgICAgICAgIG1f
bWVkaWFRdWVyaWVzID0gby5tX21lZGlhUXVlcmllcy0+Y29weSgpOwogfQogCit2b2lkIFN0eWxl
UnVsZU1lZGlhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAoreworICAgIE1lbW9yeUNsYXNzSW5mbzxTdHlsZVJ1bGVNZWRpYT4gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBNZW1vcnlJbnN0cnVtZW50YXRpb246OkNTUyk7Cisg
ICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9tZWRpYVF1ZXJpZXMpOworfQorCiBTdHls
ZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJlZ2lvbihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiA+KiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRS
dWxlcykKICAgICA6IFN0eWxlUnVsZUJsb2NrKFJlZ2lvbiwgYWRvcHRSdWxlcykKIHsKQEAgLTMw
Miw0ICszNzEsMTAgQEAgU3R5bGVSdWxlUmVnaW9uOjpTdHlsZVJ1bGVSZWdpb24oY29uc3QgU3R5
bGVSdWxlUmVnaW9uJiBvKQogewogfQogCit2b2lkIFN0eWxlUnVsZVJlZ2lvbjo6cmVwb3J0TWVt
b3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAg
ICBNZW1vcnlDbGFzc0luZm88U3R5bGVSdWxlUmVnaW9uPiBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZEluc3RydW1l
bnRlZE1lbWJlcihtX3NlbGVjdG9yTGlzdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3ZmMyMGEzMDNmODUzYWM3NmM5MmVmYjAxNTNmYmZi
MzQ3ZjU3MmEwLi5mYWQyNWMyYzVjN2Y4NGUwMDEwNjMzNGU0YTZmMDY1ZTVjZTE1ODMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUnVsZS5oCkBAIC0zMSw2ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0
OworY2xhc3MgTWVtb3J5T2JqZWN0SW5mbzsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiAKIGNs
YXNzIFN0eWxlUnVsZUJhc2UgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CkBAIC03Miw2
ICs3Myw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNTU09NV3Jh
cHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IDApIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8Q1NTUnVsZT4gY3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0
OwogCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7
CisKIHByb3RlY3RlZDoKICAgICBTdHlsZVJ1bGVCYXNlKFR5cGUgdHlwZSwgc2lnbmVkIHNvdXJj
ZUxpbmUgPSAwKSA6IG1fdHlwZSh0eXBlKSwgbV9zb3VyY2VMaW5lKHNvdXJjZUxpbmUpIHsgfQog
ICAgIFN0eWxlUnVsZUJhc2UoY29uc3QgU3R5bGVSdWxlQmFzZSYgbykgOiBXVEY6OlJlZkNvdW50
ZWRCYXNlKCksIG1fdHlwZShvLm1fdHlwZSksIG1fc291cmNlTGluZShvLm1fc291cmNlTGluZSkg
eyB9CkBAIC0xMDQsNiArMTA3LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxl
PiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZSgqdGhpcykpOyB9
CiAKICAgICBzdGF0aWMgdW5zaWduZWQgYXZlcmFnZVNpemVJbkJ5dGVzKCk7CisgICAgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgU3R5bGVSdWxlKGludCBzb3VyY2VMaW5lKTsKQEAgLTEyNiw2ICsxMzAsOCBAQCBwdWJsaWM6
CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBjb3B5KCkgY29uc3QgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUZvbnRGYWNlKCp0aGlzKSk7IH0KIAorICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIFN0eWxlUnVsZUZvbnRGYWNlKCk7CiAgICAgU3R5bGVSdWxlRm9udEZhY2UoY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UmKTsKQEAgLTE0OSw2ICsxNTUsOCBAQCBwdWJsaWM6CiAKICAgICBQYXNz
UmVmUHRyPFN0eWxlUnVsZVBhZ2U+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcg
U3R5bGVSdWxlUGFnZSgqdGhpcykpOyB9CiAKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBTdHlsZVJ1bGVQYWdlKCk7
CiAgICAgU3R5bGVSdWxlUGFnZShjb25zdCBTdHlsZVJ1bGVQYWdlJik7CkBAIC0xNjMsNiArMTcx
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgd3JhcHBlckluc2VydFJ1bGUodW5zaWduZWQs
IFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4pOwogICAgIHZvaWQgd3JhcHBlclJlbW92ZVJ1bGUo
dW5zaWduZWQpOworCisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3Q7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVSdWxlQmxvY2soVHlwZSwgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGUpOwpAQCAtMTgzLDYgKzE5Myw4
IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IGNvcHkoKSBjb25z
dCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlTWVkaWEoKnRoaXMpKTsgfQogCisgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgU3R5bGVSdWxlTWVkaWEoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKTsKICAgICBTdHlsZVJ1bGVNZWRp
YShjb25zdCBTdHlsZVJ1bGVNZWRpYSYpOwpAQCAtMjAxLDYgKzIxMyw4IEBAIHB1YmxpYzoKIAog
ICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlUmVnaW9uPiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRv
cHRSZWYobmV3IFN0eWxlUnVsZVJlZ2lvbigqdGhpcykpOyB9CiAKKyAgICB2b2lkIHJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBTdHls
ZVJ1bGVSZWdpb24oVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiosIFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcyk7CiAgICAgU3R5bGVSdWxlUmVnaW9u
KGNvbnN0IFN0eWxlUnVsZVJlZ2lvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZUltcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0
LmNwcAppbmRleCBkZjhmYTA3NzQ5ZTNhZGU2ZDdiOTZjOGM4NGZlZmYxNjgwM2UwZDQ3Li4yMWM0
ZjAxNGIyZTdkZDI4ZjM3NTRlNGE5ZGNiMjIyYTNjODQ4ODA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlSW1wb3J0LmNwcApAQCAtMTI4LDQgKzEyOCwxMiBAQCB2b2lkIFN0eWxlUnVsZUlt
cG9ydDo6cmVxdWVzdFN0eWxlU2hlZXQoKQogICAgIH0KIH0KIAordm9pZCBTdHlsZVJ1bGVJbXBv
cnQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0Cit7CisgICAgTWVtb3J5Q2xhc3NJbmZvPFN0eWxlUnVsZUltcG9ydD4gaW5mbyhtZW1v
cnlPYmplY3RJbmZvLCB0aGlzLCBNZW1vcnlJbnN0cnVtZW50YXRpb246OkNTUyk7CisgICAgaW5m
by5hZGRTdHJpbmcobV9zdHJIcmVmKTsKKyAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlciht
X21lZGlhUXVlcmllcyk7CisgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9zdHlsZVNo
ZWV0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZUltcG9ydC5oCmluZGV4IDNhOGQwMTM4OTJkYmE3YjRlOTdmNDdlYjAzNjUyZjAwZTI5MzJkNTYu
LmE5OTFkOWIwOTM3NmY4M2FlMGY5MjkwNDU2YmY1NTYyNGQwNTYzYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSdWxlSW1wb3J0LmgKQEAgLTMwLDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3MgTWVkaWFRdWVyeVNldDsKK2Ns
YXNzIE1lbW9yeU9iamVjdEluZm87CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAKIGNsYXNz
IFN0eWxlUnVsZUltcG9ydCA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKQEAgLTUwLDYgKzUxLDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZXF1ZXN0U3R5bGVTaGVldCgpOwogCisgICAgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgLy8gTk9URTogV2UgcHV0IHRoZSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50IGluIGEgbWVtYmVy
IGluc3RlYWQgb2YgaW5oZXJpdGluZyBmcm9tIGl0CiAgICAgLy8gdG8gYXZvaWQgYWRkaW5nIGEg
dnB0ciB0byBTdHlsZVJ1bGVJbXBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwCmluZGV4IDk3MGM4MjhjYTE0MDFkY2IxNjM4NDQ5ZTk2MDI0MzgyN2VlYzE3OTMu
Ljc1NDU1NWNlYzkzZTA4ZDg4ODlhYWMyNDEyZDQ4ZjAxMjk4ZTUzZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
IlN0eWxlUHJvcGVydHlTZXQuaCIKQEAgLTQ0MSw0ICs0NDIsMTYgQEAgdm9pZCBTdHlsZVNoZWV0
Q29udGVudHM6OnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKQogICAgIG1faXNJbk1lbW9yeUNhY2hl
ID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAoreworICAgIE1lbW9y
eUNsYXNzSW5mbzxTdHlsZVNoZWV0Q29udGVudHM+IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhp
cywgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpDU1MpOworICAgIGluZm8uYWRkU3RyaW5nKG1fb3Jp
Z2luYWxVUkwpOworICAgIGluZm8uYWRkU3RyaW5nKG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUp
OworCisgICAgaW5mby5hZGRWZWN0b3IobV9pbXBvcnRSdWxlcyk7CisgICAgaW5mby5hZGRJbnN0
cnVtZW50ZWRWZWN0b3IobV9jaGlsZFJ1bGVzKTsKKyAgICBpbmZvLmFkZEhhc2hNYXAobV9uYW1l
c3BhY2VzKTsKKyAgICBpbmZvLmFkZFZlY3RvcihtX2NsaWVudHMpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKaW5kZXggN2RmMzRiNzAzMjI3MjU5NzZlNWM3
ZjE1ZDA4MzgwMjY0Y2I3ZWYwZS4uZTJjY2UyZjJiMzUzODE3MzI1MzM1N2FjNWE5OTYwMjEyYTE1
MGU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaApAQCAtMzQsNiAr
MzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3Mg
Q2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgTWVtb3J5T2JqZWN0
SW5mbzsKIGNsYXNzIE5vZGU7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFN0eWxlUnVs
ZUJhc2U7CkBAIC0xMzcsNiArMTM4LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkZWRUb01lbW9y
eUNhY2hlKCk7CiAgICAgdm9pZCByZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CiAKKyAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKwogcHJpdmF0ZToK
ICAgICBTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0
IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKICAgICBTdHlsZVNoZWV0Q29udGVudHMoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCmlu
ZGV4IDA1NzdiNDZmMDc1MGIzNDZiYWNlYzk2NTlmZGY5ZmEwMGRiYWY4NTQuLjVlNzgzMTY2ZTIy
M2MwMGU5ZDRmOWEwZDMwZjYyZmQwOGI0YTVmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCiAKKyNpbmNsdWRlICJN
ZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb24uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgpAQCAtODUsNiArODYsMTMgQEAgU3RyaW5nIFN0eWxlS2V5
ZnJhbWU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgU3R5
bGVLZXlmcmFtZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1vcnlDbGFzc0luZm88U3R5bGVLZXlmcmFtZT4gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBNZW1vcnlJbnN0cnVtZW50YXRpb246OkNTUyk7Cisg
ICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9wcm9wZXJ0aWVzKTsKKyAgICBpbmZvLmFk
ZFN0cmluZyhtX2tleSk7Cit9CisKIFdlYktpdENTU0tleWZyYW1lUnVsZTo6V2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
KiBwYXJlbnQpCiAgICAgOiBDU1NSdWxlKDAsIENTU1J1bGU6OldFQktJVF9LRVlGUkFNRV9SVUxF
KQogICAgICwgbV9rZXlmcmFtZShrZXlmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuaAppbmRleCA0NDRiNjQ4MjAyNzRkODliMTE5MjljNjVmMzQ5MmNiZmEy
NzQyZTVlLi4yNjgzZWUzYjUyMzc1ODk5NTkzYmYzNzk0YjU0ZDRmZWE1ODUyMjk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCkBAIC0zNCw2ICszNCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTWVtb3J5SW5zdHJ1bWVudGF0aW9uOwog
Y2xhc3MgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIFdlYktpdENTU0tleWZy
YW1lc1J1bGU7CiAKQEAgLTU1LDYgKzU2LDggQEAgcHVibGljOgogICAgIAogICAgIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKKwogcHJpdmF0ZTogICAgCiAgICAgU3R5bGVLZXlmcmFtZSgpIHsgfQog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCmlu
ZGV4IDEyNzAwZTlmZGY3MTE1MGRmZmM5ODg4NTI0OWNjZjcxMWZjNWY0MTguLmFjOWQ0ODNiODY3
Y2IwMTJjZmU5ZmYzYWYzY2U0OGVjMmZlZTQzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJD
U1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
U2hlZXQuaCIKKyNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIldl
YktpdENTU0tleWZyYW1lUnVsZS5oIgpAQCAtODYsNiArODcsMTMgQEAgaW50IFN0eWxlUnVsZUtl
eWZyYW1lczo6ZmluZEtleWZyYW1lSW5kZXgoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAgICAg
cmV0dXJuIC0xOwogfQogCit2b2lkIFN0eWxlUnVsZUtleWZyYW1lczo6cmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3sKKyAgICBNZW1v
cnlDbGFzc0luZm88U3R5bGVSdWxlS2V5ZnJhbWVzPiBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRo
aXMsIE1lbW9yeUluc3RydW1lbnRhdGlvbjo6Q1NTKTsKKyAgICBpbmZvLmFkZEluc3RydW1lbnRl
ZFZlY3RvcihtX2tleWZyYW1lcyk7CisgICAgaW5mby5hZGRTdHJpbmcobV9uYW1lKTsKK30KKwog
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHlsZVJ1bGVL
ZXlmcmFtZXMqIGtleWZyYW1lc1J1bGUsIENTU1N0eWxlU2hlZXQqIHBhcmVudCkKICAgICA6IENT
U1J1bGUocGFyZW50LCBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JVTEUpCiAgICAgLCBtX2tl
eWZyYW1lc1J1bGUoa2V5ZnJhbWVzUnVsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5oCmluZGV4IDJmOTM2NWM4MGViMDk1MzJiZDM1NjM1ODgxODdjYTQ0OWY5
ZDNjMTYuLjUzZmY0ZTNhNDIyNTI5MmU0YTQzOWVmMTY1MGI0NGY5ZjEzOWUwNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaApAQCAtMzYsNiArMzYsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIE1lbW9y
eU9iamVjdEluZm87CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlOwogCkBAIC01OCw2ICs1OSw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5
bGVSdWxlS2V5ZnJhbWVzPiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxl
UnVsZUtleWZyYW1lcygqdGhpcykpOyB9CiAKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBTdHlsZVJ1bGVLZXlmcmFt
ZXMoKTsKICAgICBTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxNjlkOGE1YTAyYWE3MmI5ODliNTEzMWNiZjMy
MTllZmRmMGJhZjQ2Li4wY2RlYWEzODZmMDFlYWQwOTg2MDE2OTEyZmY3NTU1OTE4OGY4ZWQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTYwOTMsMTAgKzYwOTMsMTIgQEAgdm9pZCBEb2N1
bWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKICAgICBpbmZvLmFkZFZlY3RvcihtX2N1c3RvbUZvbnRzKTsKICAgICBpbmZvLmFk
ZFN0cmluZyhtX2RvY3VtZW50VVJJKTsKICAgICBpbmZvLmFkZFN0cmluZyhtX2Jhc2VUYXJnZXQp
OworICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1fZWxlbVNoZWV0KTsKKyAgICBpbmZv
LmFkZEluc3RydW1lbnRlZE1lbWJlcihtX3BhZ2VVc2VyU2hlZXQpOwogICAgIGlmIChtX3BhZ2VH
cm91cFVzZXJTaGVldHMpCi0gICAgICAgIGluZm8uYWRkVmVjdG9yKCptX3BhZ2VHcm91cFVzZXJT
aGVldHMuZ2V0KCkpOworICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZFZlY3RvclB0cihtX3Bh
Z2VHcm91cFVzZXJTaGVldHMpOwogICAgIGlmIChtX3VzZXJTaGVldHMpCi0gICAgICAgIGluZm8u
YWRkVmVjdG9yKCptX3VzZXJTaGVldHMuZ2V0KCkpOworICAgICAgICBpbmZvLmFkZEluc3RydW1l
bnRlZFZlY3RvclB0cihtX3VzZXJTaGVldHMpOwogICAgIGluZm8uYWRkSGFzaFNldChtX25vZGVJ
dGVyYXRvcnMpOwogICAgIGluZm8uYWRkSGFzaFNldChtX3Jhbmdlcyk7CiAgICAgaW5mby5hZGRM
aXN0SGFzaFNldChtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggY2NkYWYxOGQ3MjNjOWJhNDRkYzQ3Nzg3
OGRiM2I1MjU2OGFhYmYyZS4uMTg5ZDI0OWQ2MGRmOTQ2ZWIwNzYyZTljMjBmYWM0MmZhMTEzZjBm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lbW9yeUluc3RydW1lbnRhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZW1vcnlJbnN0cnVtZW50YXRpb24uaApAQCAtMTcz
LDggKzE3MywxMSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hTZXRUeXBl
PiB2b2lkIGFkZEhhc2hTZXQoY29uc3QgSGFzaFNldFR5cGUmIHNldCkgeyBtX21lbW9yeUluc3Ry
dW1lbnRhdGlvbi0+YWRkSGFzaFNldChzZXQsIG1fb2JqZWN0VHlwZSwgdHJ1ZSk7IH0KICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFNldFR5cGU+IHZvaWQgYWRkSW5zdHJ1bWVudGVkSGFzaFNl
dChjb25zdCBIYXNoU2V0VHlwZSYgc2V0KSB7IG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLT5hZGRJ
bnN0cnVtZW50ZWRDb2xsZWN0aW9uKHNldCwgbV9vYmplY3RUeXBlLCB0cnVlKTsgfQogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWZWN0b3JUeXBlPiB2b2lkIGFkZEluc3RydW1lbnRlZFZlY3Rvcihj
b25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgbV9tZW1vcnlJbnN0cnVtZW50YXRpb24tPmFkZElu
c3RydW1lbnRlZENvbGxlY3Rpb24odmVjdG9yLCBtX29iamVjdFR5cGUsIHRydWUpOyB9CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGU+IHZvaWQgYWRkSW5zdHJ1bWVudGVkVmVjdG9y
UHRyKGNvbnN0IE93blB0cjxWZWN0b3JUeXBlPiYgdmVjdG9yKSB7IG1fbWVtb3J5SW5zdHJ1bWVu
dGF0aW9uLT5hZGRJbnN0cnVtZW50ZWRDb2xsZWN0aW9uKCp2ZWN0b3IsIG1fb2JqZWN0VHlwZSwg
ZmFsc2UpOyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZlY3RvclR5cGU+IHZvaWQgYWRkSW5z
dHJ1bWVudGVkVmVjdG9yUHRyKGNvbnN0IFZlY3RvclR5cGUqIGNvbnN0JiB2ZWN0b3IpIHsgbV9t
ZW1vcnlJbnN0cnVtZW50YXRpb24tPmFkZEluc3RydW1lbnRlZENvbGxlY3Rpb24oKnZlY3Rvciwg
bV9vYmplY3RUeXBlLCBmYWxzZSk7IH0KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGlzdEhhc2hT
ZXRUeXBlPiB2b2lkIGFkZExpc3RIYXNoU2V0KGNvbnN0IExpc3RIYXNoU2V0VHlwZSYgc2V0KSB7
IG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9uLT5hZGRMaXN0SGFzaFNldChzZXQsIG1fb2JqZWN0VHlw
ZSwgdHJ1ZSk7IH0KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjdG9yVHlwZT4gdm9pZCBhZGRW
ZWN0b3IoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IG1fbWVtb3J5SW5zdHJ1bWVudGF0aW9u
LT5hZGRWZWN0b3IodmVjdG9yLCBtX29iamVjdFR5cGUsIHRydWUpOyB9CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZlY3RvclR5cGU+IHZvaWQgYWRkVmVjdG9yUHRyKGNvbnN0IFZlY3RvclR5cGUq
IGNvbnN0IHZlY3RvcikgeyBtX21lbW9yeUluc3RydW1lbnRhdGlvbi0+YWRkVmVjdG9yKCp2ZWN0
b3IsIG1fb2JqZWN0VHlwZSwgZmFsc2UpOyB9CiAgICAgdm9pZCBhZGRSYXdCdWZmZXIoY29uc3Qg
dm9pZCogY29uc3QmIGJ1ZmZlciwgc2l6ZV90IHNpemUpIHsgbV9tZW1vcnlJbnN0cnVtZW50YXRp
b24tPmFkZFJhd0J1ZmZlcihidWZmZXIsIG1fb2JqZWN0VHlwZSwgc2l6ZSk7IH0KIAogICAgIHZv
aWQgYWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IG1fbWVtb3J5SW5zdHJ1bWVudGF0
aW9uLT5hZGRTdHJpbmcoc3RyaW5nLCBtX29iamVjdFR5cGUpOyB9Cg==
</data>
<flag name="review"
          id="165009"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>