<?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>76064</bug_id>
          
          <creation_ts>2012-01-11 08:50:09 -0800</creation_ts>
          <short_desc>[CSSRegions]Add back region style code removed in r104036</short_desc>
          <delta_ts>2012-01-15 23:02:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>533927</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-11 08:50:09 -0800</bug_when>
    <thetext>Since the code reverted did not change the performance results, add the code back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533933</commentid>
    <comment_count>1</comment_count>
      <attachid>122038</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-11 08:57:10 -0800</bug_when>
    <thetext>Created attachment 122038
Patch

Almost the same code as the one that was removed. The main difference comes from CSSStyleSelector.h, in which the definition of MatchedStyleDeclaration was changed by adding a bit field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534003</commentid>
    <comment_count>2</comment_count>
      <attachid>122038</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-11 10:25:01 -0800</bug_when>
    <thetext>Comment on attachment 122038
Patch

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

Just some nits, Hyatt should do the actual review.  Can you upload a patch that applies to tip-of-tree so the ews bots will run?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:220
&gt; +    RuleSet(bool regionStyleRule = false);

explicit.  Also, I think passing in an enum would make the calling code easier to read and could be used in addMatchedDeclaration and RuleData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535544</commentid>
    <comment_count>3</comment_count>
      <attachid>122400</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-13 02:19:56 -0800</bug_when>
    <thetext>Created attachment 122400
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535784</commentid>
    <comment_count>4</comment_count>
      <attachid>122400</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-13 10:43:07 -0800</bug_when>
    <thetext>Comment on attachment 122400
Patch 2

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:221
&gt; +    RuleSet(ERegionStyleEnabled useInRegionStyle = DoNotUseInRegionStyle);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535818</commentid>
    <comment_count>5</comment_count>
      <attachid>122400</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-01-13 11:08:13 -0800</bug_when>
    <thetext>Comment on attachment 122400
Patch 2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535857</commentid>
    <comment_count>6</comment_count>
      <attachid>122400</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 11:43:10 -0800</bug_when>
    <thetext>Comment on attachment 122400
Patch 2

Clearing flags on attachment: 122400

Committed r104965: &lt;http://trac.webkit.org/changeset/104965&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535858</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 11:43:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536217</commentid>
    <comment_count>8</comment_count>
      <attachid>122400</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-14 13:29:51 -0800</bug_when>
    <thetext>Comment on attachment 122400
Patch 2

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

The CSSStyleSelector code in this patch is not good. The patch tramples all over the performance critical functions and data structures for no good reason (and with no performance data to prove there are no regressions). 

It is unfortunate that this landed as it is clearly r- and needs to be reverted (at least the CSSStyleSelector portion of it). I&apos;d like to see a patch with CSSStyleSelector portion separated.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:173
&gt; -    RuleData(CSSStyleRule*, CSSSelector*, unsigned position);
&gt; +    RuleData(CSSStyleRule*, CSSSelector*, unsigned position, ERegionStyleEnabled useInRegionStyle = DoNotUseInRegionStyle);

RuleSet and RuleData structure exists for optimizing the style lookups. It is not ok to use them for implementing CSS features.

If needed, you could look &quot;useInRegionStyle&quot; up through CSSStyleRule*. If you have a RuleSet containing region styles only (like this patch has) you should never need this information anyway!

&gt; Source/WebCore/css/CSSStyleSelector.cpp:962
&gt; +    m_regionRules = adoptPtr(new RuleSet(UseInRegionStyle));
&gt; +
&gt; +    // From all the region style rules, select those that apply to the specified region.
&gt; +    for (Vector&lt;RefPtr&lt;WebKitCSSRegionRule&gt; &gt;::iterator it = m_regionStyleRules.begin(); it != m_regionStyleRules.end(); ++it) {
&gt; +        const CSSSelectorList&amp; regionSelectorList = (*it)-&gt;selectorList();
&gt; +        for (CSSSelector* s = regionSelectorList.first(); s; s = regionSelectorList.next(s)) {
&gt; +            if (!m_checker.checkSelector(s, static_cast&lt;Element*&gt;(region-&gt;node())))
&gt; +                continue;
&gt; +            CSSRuleList* regionStylingRules = (*it)-&gt;cssRules();
&gt; +            for (unsigned index = 0; index &lt; regionStylingRules-&gt;length(); ++index) {
&gt; +                CSSRule* regionStylingRule = regionStylingRules-&gt;item(index);
&gt; +                if (regionStylingRule-&gt;isStyleRule())
&gt; +                    m_regionRules-&gt;addStyleRule(static_cast&lt;CSSStyleRule*&gt;(regionStylingRule));
&gt; +            }
&gt; +        }
&gt; +    }

This constructs a RuleSet on every region style lookup. RuleSets are meant to be cached structures built statically from style sheets. Furthermore, it actually builds up RuleSet, a style lookup optimization structure, by making selector queries. This makes no sense and is going to be horribly slow.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1315
&gt; -PassRefPtr&lt;RenderStyle&gt; CSSStyleSelector::styleForElement(Element* element, RenderStyle* defaultParent, bool allowSharing, bool resolveForRootDefault)
&gt; +PassRefPtr&lt;RenderStyle&gt; CSSStyleSelector::styleForElement(Element* element, RenderStyle* defaultParent, bool allowSharing, bool resolveForRootDefault, RenderRegion* regionForStyling)

CSSStyleSelector::styleForElement is the core function for style resolve. It is not ok to add new parameters here for this kind of narrow special use case. If you need specialized lookups you should add new functions (similar to CSSStyleSelector::styleForPage etc).

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1488
&gt; -PassRefPtr&lt;RenderStyle&gt; CSSStyleSelector::pseudoStyleForElement(PseudoId pseudo, Element* e, RenderStyle* parentStyle)
&gt; +PassRefPtr&lt;RenderStyle&gt; CSSStyleSelector::pseudoStyleForElement(PseudoId pseudo, Element* e, RenderStyle* parentStyle, RenderRegion* regionForStyling)

As far as I see, you are not even calling this new version of pseudoStyleForElement.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2319
&gt;      }
&gt; -    for (int i = startIndex; i &lt;= endIndex; ++i)
&gt; +    for (int i = startIndex; i &lt;= endIndex; ++i) {
&gt; +        m_applyPropertyToRegionStyle = m_matchedDecls[i].useInRegionStyle;
&gt;          applyDeclaration&lt;applyFirst&gt;(m_matchedDecls[i].styleDeclaration.get(), isImportant, inheritedOnly);
&gt; +        m_applyPropertyToRegionStyle = false;
&gt; +    }

This strategy is used specifically for resolving both visited and regular link style efficiently in parallel (and it is ugly there too). It is not meant that you emulate this code for some feature work.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2701
&gt; +    // Filter region style property
&gt; +    if (applyPropertyToRegionStyle() &amp;&amp; !isValidRegionStyleProperty(id))
&gt; +        return;

The filtering is used for link styles for security reasons. Why does this feature need filtering here? Generally the rendering code should just ignore the properties it is not using.

&gt; Source/WebCore/css/CSSStyleSelector.h:151
&gt; +    void setRegionForStyling(RenderRegion* region) { m_regionForStyling = region; }
&gt; +    RenderRegion* regionForStyling() const { return m_regionForStyling; }

As far as I can see, m_regionForStyling field is not used for anything in this patch (except one if (m_regionForStyling)) so I don&apos;t see why it exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536272</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-15 10:41:17 -0800</bug_when>
    <thetext>Hmm, reading the spec some of this starts making more sense. Maybe this is better fixed in place.

You will want to create the RuleSets for the regions on style selector initialization time. Creating them on every style look up is super slow. I believe you are also getting the specificity (and so the applying order) wrong by matching them separately from the author style. Per spec the @region should behave like @media and not affect the ordering.

Something like this might work for a better and more correct implementation:

1) Cache the region RuleSets in the containing RuleSet. This is done by adding (roughly)

Vector&lt;&lt;pair&lt;CSSSelector, RuleSet*&gt; &gt; m_regionSelectorsAndRuleSets;

member to RuleSets.

3) These sub-RuleSets are created by RuleSet::addRulesFromSheet (thus only once per style selector). The rule position is set to match the actual stylesheet position.

2) When matching the region style (the region element is set) CSSStyleSelector::matchRules will loop though m_regionSelectorsAndRuleSets, if any, and try to match the selectors to the region element.

3) If the region selector matches then CSSStyleSelector::matchRules is invoked recursively for the sub-RuleSet (this will require some refactoring of matchRules, the actual matching needs to be split out).

The (confusingly similar) m_regionStyleRules and m_regionRules members of CSSStyleSelector both go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536377</commentid>
    <comment_count>10</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-15 23:02:48 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Hmm, reading the spec some of this starts making more sense. Maybe this is better fixed in place.
&gt; 
&gt; You will want to create the RuleSets for the regions on style selector initialization time. Creating them on every style look up is super slow. I believe you are also getting the specificity (and so the applying order) wrong by matching them separately from the author style. Per spec the @region should behave like @media and not affect the ordering.
&gt; 
&gt; Something like this might work for a better and more correct implementation:
&gt; 
&gt; 1) Cache the region RuleSets in the containing RuleSet. This is done by adding (roughly)
&gt; 
&gt; Vector&lt;&lt;pair&lt;CSSSelector, RuleSet*&gt; &gt; m_regionSelectorsAndRuleSets;
&gt; 
&gt; member to RuleSets.
&gt; 
&gt; 3) These sub-RuleSets are created by RuleSet::addRulesFromSheet (thus only once per style selector). The rule position is set to match the actual stylesheet position.
&gt; 
&gt; 2) When matching the region style (the region element is set) CSSStyleSelector::matchRules will loop though m_regionSelectorsAndRuleSets, if any, and try to match the selectors to the region element.
&gt; 
&gt; 3) If the region selector matches then CSSStyleSelector::matchRules is invoked recursively for the sub-RuleSet (this will require some refactoring of matchRules, the actual matching needs to be split out).
&gt; 
&gt; The (confusingly similar) m_regionStyleRules and m_regionRules members of CSSStyleSelector both go away.

Thanks for the review/suggestions. I will leave the actual code in place (not roll out the patch) and come up with another patch that will improve the current solution.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122038</attachid>
            <date>2012-01-11 08:57:10 -0800</date>
            <delta_ts>2012-01-13 02:19:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>76064.patch</filename>
            <type>text/plain</type>
            <size>32568</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmOGQ4MTc4Li5lNGFmYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAg
QEAKKzIwMTItMDEtMTEgIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAg
ICAgICAgW0NTU1JlZ2lvbnNdQWRkIGJhY2sgcmVnaW9uIHN0eWxlIGNvZGUgcmVtb3ZlZCBpbiBy
MTA0MDM2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlIHJlZ2lvbiBzdHlsZSB0ZXN0cyBhcmUgc3RpbGwgc2tpcHBlZC4gQSBm
b2xsb3cgdXAgcGF0Y2ggd2lsbCBlbmFibGUKKyAgICAgICAgYm90aCByZWdpb24gc3R5bGUgZm9y
IGJhY2tncm91bmQtY29sb3IgYW5kIHJlZ2lvbiBzdHlsZSB0ZXN0cy4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpyZWdpb25TdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmluaXRGb3JSZWdpb25TdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OmluaXRSZWdpb25SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVEYXRhOjpSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFRvUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2V0UmVnaW9uRm9y
U3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpyZWdpb25Gb3JT
dHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHlUb1JlZ2lvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlck9iamVj
dEN1c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJl
Z2lvblJhbmdlRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlclJlZ2lvbk1haW50
YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6
On5DdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNhbkhhdmVSZWdp
b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbW92ZUNoaWxkTm9k
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZWdpb246OnJlbmRlck9iamVjdFJlZ2lvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6Y29tcHV0ZVN0eWxlSW5SZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpjbGVhck9iamVjdFN0eWxlSW5SZWdpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJSZWdpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6Y3VycmVudFJlbmRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpz
ZXRDdXJyZW50UmVuZGVyUmVnaW9uKToKKwogMjAxMi0wMS0xMSAgQWxleGFuZHJ1IENoaWN1bGl0
YSAgPGFjaGljdUBhZG9iZS5jb20+CiAKICAgICAgICAgQ1NTIEZpbHRlcnM6IGFwcGx5IHRoZSBm
aWx0ZXJzIGluIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIgd2hlbiBmaWx0ZXJz
IGNhbm5vdCBiZSBjb21wb3NpdGVkIGluIGhhcmR3YXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4
IDA5ODlhMjUuLjA2MjdjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yNzgsNiArMjc4LDcg
QEAgX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bvb2xQYWdlRVJOU18xNUdyYXBoaWNzQ29u
dGV4dEVpZgogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bvb2xSZWN0RVJOU18xNUdyYXBo
aWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHRDMUVQ
TlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHREMUV2CitfX1pOSzdXZWJDb3Jl
MTJSZW5kZXJPYmplY3QxM3N0eWxlSW5SZWdpb25FdgogX19aTjdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QxNnJlcGFpbnRSZWN0YW5nbGVFUktOU183SW50UmVjdEViCiBfX1pON1dlYkNvcmUxMlJlbmRl
cldpZGdldDI4cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2CiBfX1pON1dlYkNvcmUxMlJl
bmRlcldpZGdldDI5c3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNFdgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDk3ZjE5Y2YuLjQ1MzIxOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNs
dWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlF1b3Rlc0Rh
dGEuaCIKICNpbmNsdWRlICJSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyVGhlbWUu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgpAQCAtMTY4LDcgKzE2OSw3IEBA
IGlmIChwcmltaXRpdmVWYWx1ZSkgXAogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAg
UnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbik7
CisgICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3Np
dGlvbiwgYm9vbCByZWdpb25TdHlsZVJ1bGUgPSBmYWxzZSk7CiAKICAgICB1bnNpZ25lZCBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTE4MCw2ICsxODEsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQogICAgIHVuc2lnbmVk
IHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQogICAgIHVuc2ln
bmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KKyAg
ICBib29sIHJlZ2lvblN0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uU3R5bGVSdWxl
OyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhlcmUg
Y2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBlcmZv
cm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50
ID0gNDsKQEAgLTE5MSwxMiArMTkzLDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zcGVj
aWZpY2l0eTsKICAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmls
eS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCiAgICAgLy8gU29tZSBz
aW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4K
LSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjY7CisgICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6
IDI1OwogICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKICAgICB1
bnNpZ25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKICAgICB1bnNpZ25lZCBtX2hhc1Jp
Z2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKICAgICB1bnNp
Z25lZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CiAgICAgdW5zaWdu
ZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFz
aworICAgIHVuc2lnbmVkIG1fcmVnaW9uU3R5bGVSdWxlIDogMTsKICAgICAvLyBVc2UgcGxhaW4g
YXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCiAg
ICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1J
ZGVudGlmaWVyQ291bnRdOwogfTsKQEAgLTIxNCw3ICsyMTcsNyBAQCBDT01QSUxFX0FTU0VSVChz
aXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1lU2l6ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9z
aG91bGRfcwogY2xhc3MgUnVsZVNldCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUnVsZVNl
dCk7CiBwdWJsaWM6Ci0gICAgUnVsZVNldCgpOworICAgIFJ1bGVTZXQoYm9vbCByZWdpb25TdHls
ZVJ1bGUgPSBmYWxzZSk7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKIApAQCAtMjQ5LDYgKzI1
Miw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UnVsZURhdGE+IG1fcGFnZVJ1bGVzOwogICAgIHVu
c2lnbmVkIG1fcnVsZUNvdW50OwogICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwor
ICAgIGJvb2wgbV9yZWdpb25TdHlsZVJ1bGVzOwogfTsKIAogc3RhdGljIFJ1bGVTZXQqIGRlZmF1
bHRTdHlsZTsKQEAgLTMzNiw2ICszNDAsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAg
ICwgbV9yb290RWxlbWVudFN0eWxlKDApCiAgICAgLCBtX2VsZW1lbnQoMCkKICAgICAsIG1fc3R5
bGVkRWxlbWVudCgwKQorICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCiAgICAgLCBtX2VsZW1l
bnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKICAgICAsIG1fcGFyZW50Tm9kZSgwKQogICAgICwg
bV9saW5lSGVpZ2h0VmFsdWUoMCkKQEAgLTM0NSw2ICszNTAsNyBAQCBDU1NTdHlsZVNlbGVjdG9y
OjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0
eWxlU2hlZQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9j
dW1lbnQpKQogICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKICAgICAs
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKKyAgICAsIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVnaW9uU3R5bGUoZmFsc2UpCiAgICAgLCBtX2FwcGx5UHJvcGVydHkoQ1NTU3R5
bGVBcHBseVByb3BlcnR5OjpzaGFyZWRDU1NTdHlsZUFwcGx5UHJvcGVydHkoKSkKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCiAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQpAQCAtNjQ4
LDEyICs2NTQsMTMgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KQogI2VuZGlmCiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZURlY2xhcmF0aW9uLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKQordm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIGJvb2wgcmVnaW9uU3R5bGVS
dWxlKQogewogICAgIG1fbWF0Y2hlZERlY2xzLmdyb3cobV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsg
MSk7CiAgICAgTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24mIG5ld0RlY2xhcmF0aW9uID0gbV9tYXRj
aGVkRGVjbHMubGFzdCgpOwogICAgIG5ld0RlY2xhcmF0aW9uLnN0eWxlRGVjbGFyYXRpb24gPSBz
dHlsZURlY2xhcmF0aW9uOwogICAgIG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRjaFR5cGUgPSBsaW5r
TWF0Y2hUeXBlOworICAgIG5ld0RlY2xhcmF0aW9uLnJlZ2lvblN0eWxlUnVsZSA9IHJlZ2lvblN0
eWxlUnVsZTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCkBAIC03MDgsNyArNzE1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3QKICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1fbWF0Y2hlZFJ1bGVzW2ldLT5s
aW5rTWF0Y2hUeXBlKCk7CiAgICAgICAgIGlmIChzd2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5r
TWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkK
ICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAobGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSk7
CisgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgp
LT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBlLCBtX21hdGNoZWRSdWxlc1tpXS0+cmVnaW9u
U3R5bGVSdWxlKCkpOwogICAgIH0KIH0KIApAQCAtODY4LDYgKzg3NSw5IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0
eWxlLmdldCgpLCByZXN1bHQuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUs
IGZhbHNlKTsKIAorICAgIGlmIChtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgICAgIG1hdGNoUnVs
ZXMobV9yZWdpb25SdWxlcy5nZXQoKSwgcmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxh
c3RBdXRob3JSdWxlLCBmYWxzZSk7CisKICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHls
ZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5
bGVkRWxlbWVudCkgewogICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5l
RGVjbCA9IG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CkBAIC05MjAsNiArOTMw
LDM3IEBAIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUo
RWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiAgICAgbV9mb250RGlydHkgPSBmYWxzZTsK
IH0KIAoraW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclJlZ2lvblN0eWxpbmco
UmVuZGVyUmVnaW9uKiByZWdpb24pCit7CisgICAgc2V0UmVnaW9uRm9yU3R5bGluZyhyZWdpb24p
OworCisgICAgaWYgKHJlZ2lvbikKKyAgICAgICAgaW5pdFJlZ2lvblJ1bGVzKHJlZ2lvbik7Cit9
CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJlZ2lvbiog
cmVnaW9uKQoreworICAgIEFTU0VSVChyZWdpb24pOworICAgIC8vIE1hcmsgdGhhdCB0aGUgc2V0
IG9mIHJ1bGVzIGNvbWVzIGZyb20gcmVnaW9uIHN0eWxpbmcgc2luY2Ugd2UgbmVlZCB0byBmaWx0
ZXIKKyAgICAvLyB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkLgorICAgIG1fcmVn
aW9uUnVsZXMgPSBhZG9wdFB0cihuZXcgUnVsZVNldCh0cnVlKSk7CisKKyAgICAvLyBGcm9tIGFs
bCB0aGUgcmVnaW9uIHN0eWxlIHJ1bGVzLCBzZWxlY3QgdGhvc2UgdGhhdCBhcHBseSB0byB0aGUg
c3BlY2lmaWVkIHJlZ2lvbi4KKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTUmVnaW9u
UnVsZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblN0eWxlUnVsZXMuYmVnaW4oKTsgaXQgIT0g
bV9yZWdpb25TdHlsZVJ1bGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGNvbnN0IENTU1NlbGVj
dG9yTGlzdCYgcmVnaW9uU2VsZWN0b3JMaXN0ID0gKCppdCktPnNlbGVjdG9yTGlzdCgpOworICAg
ICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3JMaXN0LmZpcnN0KCk7IHM7
IHMgPSByZWdpb25TZWxlY3Rvckxpc3QubmV4dChzKSkgeworICAgICAgICAgICAgaWYgKCFtX2No
ZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVnaW9uLT5ub2Rl
KCkpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1J1bGVMaXN0
KiByZWdpb25TdHlsaW5nUnVsZXMgPSAoKml0KS0+Y3NzUnVsZXMoKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHJlZ2lvblN0eWxpbmdSdWxlcy0+bGVuZ3Ro
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBDU1NSdWxlKiByZWdpb25TdHlsaW5nUnVs
ZSA9IHJlZ2lvblN0eWxpbmdSdWxlcy0+aXRlbShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgICAgICAgICBt
X3JlZ2lvblJ1bGVzLT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocmVn
aW9uU3R5bGluZ1J1bGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwog
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwogc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7CiAKQEAgLTEy
NzAsNyArMTMxMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoRWxl
bWVudCogZWxlbWVudCkKIC8vIElmIHJlc29sdmVGb3JSb290RGVmYXVsdCBpcyB0cnVlLCBzdHls
ZSBiYXNlZCBvbiB1c2VyIGFnZW50IHN0eWxlIHNoZWV0IG9ubHkuIFRoaXMgaXMgdXNlZCBpbiBt
ZWRpYSBxdWVyaWVzLCB3aGVyZQogLy8gcmVsYXRpdmUgdW5pdHMgYXJlIGludGVycHJldGVkIGFj
Y29yZGluZyB0byBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIHN0eWxlZCBvbmx5IHdpdGgg
VUEgc3R5bGVzaGVldAogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9y
OjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQ
YXJlbnQsIGJvb2wgYWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCkKK1Bh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1No
YXJpbmcsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZhdWx0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZv
clN0eWxpbmcpCiB7CiAgICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBk
b24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgogICAg
IC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcu
CkBAIC0xMjg2LDYgKzEzMjcsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogCiAgICAgaW5p
dEVsZW1lbnQoZWxlbWVudCk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZh
dWx0UGFyZW50KTsKKyAgICBpbml0Rm9yUmVnaW9uU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsK
ICAgICBpZiAoYWxsb3dTaGFyaW5nKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHls
ZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgICAgIGlmIChzaGFyZWRTdHlsZSkKQEAgLTE0
NDIsNyArMTQ4NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JB
bmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgfQogfQogCi1QYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKIHsKICAgICBpZiAoIWUpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTQ1MCw2ICsxNDkyLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywKICAgICBpbml0RWxlbWVudChlKTsKIAogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwg
cGFyZW50U3R5bGUsIHBzZXVkbyk7CisgICAgaW5pdEZvclJlZ2lvblN0eWxpbmcocmVnaW9uRm9y
U3R5bGluZyk7CiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAogICAgIGlm
IChtX3BhcmVudFN0eWxlKQpAQCAtMTkzMyw3ICsxOTc2LDcgQEAgc3RhdGljIGlubGluZSBib29s
IGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHls
ZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24pCitS
dWxlRGF0YTo6UnVsZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIHJlZ2lvblN0eWxlUnVsZSkKICAgICA6IG1fcnVs
ZShydWxlKQogICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKICAgICAsIG1fc3BlY2lmaWNpdHko
c2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCkBAIC0xOTQzLDEzICsxOTg2LDE1IEBAIFJ1bGVEYXRh
OjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5z
aWduZWQgcG9zaXRpb24pCiAgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2Vs
ZWN0b3IpKQogICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29y
ZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKICAgICAsIG1f
bGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2Vs
ZWN0b3IpKQorICAgICwgbV9yZWdpb25TdHlsZVJ1bGUocmVnaW9uU3R5bGVSdWxlKQogewogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3RvciwgbV9k
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50
KTsKIH0KIAotUnVsZVNldDo6UnVsZVNldCgpCitSdWxlU2V0OjpSdWxlU2V0KGJvb2wgcmVnaW9u
U3R5bGVSdWxlcykKICAgICA6IG1fcnVsZUNvdW50KDApCiAgICAgLCBtX2F1dG9TaHJpbmtUb0Zp
dEVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fcmVnaW9uU3R5bGVSdWxlcyhyZWdpb25TdHlsZVJ1bGVz
KQogewogfQogCkBAIC0xOTYwLDcgKzIwMDUsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNl
dChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIENTU1N0eWxlUnVsZQog
ICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVzID0gbWFwLmFkZChrZXksIG51bGxw
dHIpLmZpcnN0LT5zZWNvbmQ7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcnVsZXMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVsZXMtPmFwcGVuZChSdWxlRGF0YShy
dWxlLCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKykpOworICAgIHJ1bGVzLT5hcHBlbmQoUnVsZURh
dGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyssIG1fcmVnaW9uU3R5bGVSdWxlcykpOwog
fQogCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsKQpAQCAtMjI2Niw4ICsyMzExLDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlCiAg
ICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZElu
ZGV4OyArK2kpCisgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsr
aSkgeworICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlID0gbV9tYXRjaGVkRGVj
bHNbaV0ucmVnaW9uU3R5bGVSdWxlOwogICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFwcGx5Rmly
c3Q+KG1fbWF0Y2hlZERlY2xzW2ldLnN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIGlzSW1wb3J0YW50
LCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZSA9
IGZhbHNlOworICAgIH0KIH0KIAogdW5zaWduZWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29tcHV0ZURl
Y2xhcmF0aW9uSGFzaChNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb25zLCB1bnNp
Z25lZCBzaXplKQpAQCAtMjU1Myw2ICsyNjAxLDIwIEBAIGlubGluZSBib29sIGlzVmFsaWRWaXNp
dGVkTGlua1Byb3BlcnR5KGludCBpZCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKy8vIGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9ucy8jdGhlLWF0LXJlZ2lvbi1zdHlsZS1ydWxl
CisvLyBGSVhNRTogYWRkIGluY3JlbWVudGFsIHN1cHBvcnQgZm9yIG90aGVyIHJlZ2lvbiBzdHls
aW5nIHByb3BlcnRpZXMuCitpbmxpbmUgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShp
bnQgaWQpCit7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihpZCkpIHsK
KyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIC8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBh
cmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCiAvLyBvZiBl
YWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQogLy8gbXVsdGlwbGllcyBlYWNoIHJl
c29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5l
ZWQgdG8gZGlzYWJsZSB0aGF0LgpAQCAtMjYzMyw2ICsyNjk1LDEwIEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIC8vIEZpbHRlciByZWdpb24gc3R5bGUgcHJvcGVydHkKKyAg
ICBpZiAoYXBwbHlQcm9wZXJ0eVRvUmVnaW9uU3R5bGUoKSAmJiAhaXNWYWxpZFJlZ2lvblN0eWxl
UHJvcGVydHkoaWQpKQorICAgICAgICByZXR1cm47CisKICAgICBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaWQpOwogCiAgICAgaWYgKGlzSW5oZXJp
dCAmJiBtX3BhcmVudFN0eWxlICYmICFtX3BhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJp
dGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9w
ZXJ0eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCA4NTYxOTNmLi45
ZjgyOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTYzLDYgKzYz
LDcgQEAgY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNsYXNzIE1l
ZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOworY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xh
c3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0xMDQsMTEg
KzEwNSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkg
eyBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOyB9CiAgICAgdm9pZCBwb3BQYXJlbnQoRWxl
bWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsgfQogCi0gICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2
ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9v
bCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNl
LCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIAogICAgIHZvaWQga2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJh
bWVMaXN0Jik7CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsK
KyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBSZW5kZXJSZWdpb24q
IHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsKIApAQCAtMTM1LDYgKzEzNiw4IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGlu
aXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGluaXRGb3JSZWdpb25TdHlsaW5nKFJlbmRl
clJlZ2lvbiopOworICAgIHZvaWQgaW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJlZ2lvbiopOwogICAg
IHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0
eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CkBAIC0xNDMsNiArMTQ2
LDggQEAgcHJpdmF0ZToKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRF
bGVtZW50KikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktl
eWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiwg
S2V5ZnJhbWVWYWx1ZSYpOworICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5kZXJSZWdp
b24qIHJlZ2lvbikgeyBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb247IH0KKyAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbkZvclN0eWxp
bmc7IH0KIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhl
IHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1
ZG8tZWxlbWVudCkuCkBAIC0yNDMsNyArMjQ4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIEVsZW1lbnQqKTsKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVs
ZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Ci0gICAgdm9pZCBh
ZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCk7CisgICAgdm9pZCBh
ZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgYm9vbCByZWdpb25T
dHlsZVJ1bGUgPSBmYWxzZSk7CiAKICAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewogICAgICAgICBN
YXRjaFJlc3VsdCgpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRo
b3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVz
ZXJSdWxlKC0xKSwgaXNDYWNoZWFibGUodHJ1ZSkgeyB9CkBAIC0yNzksNiArMjg0LDcgQEAgcHJp
dmF0ZToKIAogICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwogICAgIE93blB0cjxS
dWxlU2V0PiBtX3VzZXJTdHlsZTsKKyAgICBPd25QdHI8UnVsZVNldD4gbV9yZWdpb25SdWxlczsK
IAogICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CiAKQEAgLTMwMiw2ICszMDgsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVnaW9uU3R5bGU7IH0KIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC0zNTAs
NyArMzU3LDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZURlY2xhcmF0aW9uOwogICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlIDogMzE7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgcmVnaW9uU3R5bGVSdWxlIDogMTsKKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICAv
LyBVc2VkIHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQgc2luY2Ug
d2UgY29tcHV0ZSB0aGUgaGFzaCBvdmVyIHRoZSBieXRlcyBvZiB0aGlzIG9iamVjdC4KICAgICAg
ICAgICAgIHZvaWQqIHBvc3NpYmx5UGFkZGVkTWVtYmVyOwogICAgICAgICB9OwpAQCAtMzk5LDYg
KzQwOSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsK
ICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVt
ZW50OworICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOwogICAgIEVJbnNpZGVM
aW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKICAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7
CiAgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwpAQCAtNDExLDYgKzQyMiw3IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwogICAgIGJv
b2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9SZWdpb25TdHlsZTsKICAgICBjb25zdCBDU1NTdHlsZUFwcGx5UHJvcGVydHkmIG1f
YXBwbHlQcm9wZXJ0eTsKICAgICAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggOTY3YzVkMS4uMzY2
ZjMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cApAQCAtNzQ3LDYgKzc0NywzMiBAQCBSZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6Omxh
c3RSZWdpb24oKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCit2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsCisgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBvbGRTdGFydFJlZ2lvbiwgY29uc3QgUmVuZGVy
UmVnaW9uKiBvbGRFbmRSZWdpb24sCisgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBuZXdTdGFydFJl
Z2lvbiwgY29uc3QgUmVuZGVyUmVnaW9uKiBuZXdFbmRSZWdpb24pCit7CisgICAgLy8gQ2xlYXIg
dGhlIHN0eWxlcyBmb3IgdGhlIG9iamVjdCBpbiB0aGUgcmVnaW9ucy4KKyAgICAvLyBUaGUgc3R5
bGVzIGFyZSBub3QgY2xlYXJlZCBmb3IgdGhlIHJlZ2lvbnMgdGhhdCBhcmUgY29udGFpbmVkIGlu
IGJvdGggcmFuZ2VzLgorICAgIGJvb2wgaW5zaWRlT2xkUmVnaW9uUmFuZ2UgPSBmYWxzZTsKKyAg
ICBib29sIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gZmFsc2U7CisgICAgZm9yIChSZW5kZXJSZWdp
b25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9y
ZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24g
PSAqaXRlcjsKKworICAgICAgICBpZiAob2xkU3RhcnRSZWdpb24gPT0gcmVnaW9uKQorICAgICAg
ICAgICAgaW5zaWRlT2xkUmVnaW9uUmFuZ2UgPSB0cnVlOworICAgICAgICBpZiAobmV3U3RhcnRS
ZWdpb24gPT0gcmVnaW9uKQorICAgICAgICAgICAgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSB0cnVl
OworCisgICAgICAgIGlmICghKGluc2lkZU9sZFJlZ2lvblJhbmdlICYmIGluc2lkZU5ld1JlZ2lv
blJhbmdlKSkKKyAgICAgICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9i
amVjdCk7CisKKyAgICAgICAgaWYgKG9sZEVuZFJlZ2lvbiA9PSByZWdpb24pCisgICAgICAgICAg
ICBpbnNpZGVPbGRSZWdpb25SYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAobmV3RW5kUmVnaW9u
ID09IHJlZ2lvbikKKyAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gZmFsc2U7Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KGNv
bnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dFBhZ2UpCiB7CiAgICAgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZGlmZmVyaW5nIHdyaXRpbmct
bW9kZXMuCkBAIC03NTgsNiArNzg0LDkgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdp
b25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBvZmYKICAgICAg
ICAgaWYgKHJhbmdlLT5zdGFydFJlZ2lvbigpID09IHN0YXJ0UmVnaW9uICYmIHJhbmdlLT5lbmRS
ZWdpb24oKSA9PSBlbmRSZWdpb24pCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgUmVu
ZGVyUmVnaW9uKiBvbGRTdGFydFJlZ2lvbiA9IHJhbmdlLT5zdGFydFJlZ2lvbigpOworICAgICAg
ICBSZW5kZXJSZWdpb24qIG9sZEVuZFJlZ2lvbiA9IHJhbmdlLT5lbmRSZWdpb24oKTsKKwogICAg
ICAgICAvLyBEZWxldGUgYW55IGluZm8gdGhhdCB3ZSBmaW5kIGJlZm9yZSBvdXIgbmV3IHN0YXJ0
UmVnaW9uIGFuZCBhZnRlciBvdXIgbmV3IGVuZFJlZ2lvbi4KICAgICAgICAgZm9yIChSZW5kZXJS
ZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0g
bV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiog
cmVnaW9uID0gKml0ZXI7CkBAIC03NzMsNiArODAyLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
OjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBv
ZmYKICAgICAgICAgfQogCiAgICAgICAgIHJhbmdlLT5zZXRSYW5nZShzdGFydFJlZ2lvbiwgZW5k
UmVnaW9uKTsKKyAgICAgICAgY2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShib3gsIG9sZFN0
YXJ0UmVnaW9uLCBvbGRFbmRSZWdpb24sIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIHJhbmdlID0gbmV3IFJlbmRlclJlZ2lvblJhbmdlKHN0YXJ0
UmVnaW9uLCBlbmRSZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmgKaW5kZXggN2M0MTFjMC4uOWQyYzU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCkBAIC0xMjQsNiArMTI0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICB2b2lkIGdldFJlZ2lvblJhbmdl
Rm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5k
ZXJSZWdpb24qJiBlbmRSZWdpb24pIGNvbnN0OwogCisgICAgdm9pZCBjbGVhclJlbmRlck9iamVj
dEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogb2xkU3RhcnRSZWdpb24gPSAwLCBj
b25zdCBSZW5kZXJSZWdpb24qIG9sZEVuZFJlZ2lvbiA9IDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogbmV3U3RhcnRSZWdpb24gPSAw
LCBjb25zdCBSZW5kZXJSZWdpb24qIG5ld0VuZFJlZ2lvbiA9IDApOwogICAgIFdlYktpdE5hbWVk
RmxvdyogZW5zdXJlTmFtZWRGbG93KCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4M2EwZmU5Li5hN2QyYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI1ODMsOSArMjU4MywyOCBAQCBib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdAogICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCitjbGFzcyBDdXJyZW50UmVu
ZGVyUmVnaW9uTWFpbnRhaW5lciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIpOworcHVibGljOgorICAgIEN1cnJlbnRSZW5kZXJSZWdpb25N
YWludGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQor
ICAgIDogbV92aWV3KHZpZXcpCisgICAgLCBtX3JlbmRlclJlZ2lvbih2aWV3LT5jdXJyZW50UmVu
ZGVyUmVnaW9uKCkpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldEN1cnJlbnRSZW5kZXJSZWdp
b24ocmVuZGVyUmVnaW9uKTsKKyAgICB9CisgICAgfkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFp
bmVyKCkKKyAgICB7CisgICAgICAgIG1fdmlldy0+c2V0Q3VycmVudFJlbmRlclJlZ2lvbihtX3Jl
bmRlclJlZ2lvbik7CisgICAgfQorcHJpdmF0ZToKKyAgICBSZW5kZXJWaWV3KiBtX3ZpZXc7Cisg
ICAgUmVuZGVyUmVnaW9uKiBtX3JlbmRlclJlZ2lvbjsKK307CisKIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QgKnBhaW50aW5nUm9vdCwK
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7
CisgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVuZGVyUmVnaW9uTWFpbnRhaW5l
cihyZW5kZXJlcigpLT52aWV3KCksIHJlZ2lvbik7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFw
IG92ZXJsYXBUZXN0UmVxdWVzdHM7CiAgICAgcGFpbnRMYXllcih0aGlzLCBwLCBkYW1hZ2VSZWN0
LCBwYWludEJlaGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVz
dHMsIHBhaW50RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5k
ID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTMwNzMsNiArMzA5Miw3IEBAIHN0YXRp
YyBpbmxpbmUgTGF5b3V0UmVjdCBmcmFtZVZpc2libGVSZWN0KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKKyAgICBDdXJyZW50UmVuZGVyUmVnaW9u
TWFpbnRhaW5lciByZW5kZXJSZWdpb25NYWludGFpbmVyKHJlbmRlcmVyKCktPnZpZXcoKSwgcmVz
dWx0LnJlZ2lvbigpKTsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKICAgICAKICAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gcmVuZGVyZXIoKS0+dmlldygp
LT5kb2N1bWVudFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggNWUyMTdjOC4uY2Y3YzE3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKQEAgLTE3MTMsNiArMTcxMywyMCBAQCBTdHlsZURpZmZlcmVuY2UgUmVu
ZGVyT2JqZWN0OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVu
c2lnbgogICAgIHJldHVybiBkaWZmOwogfQogCitSZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0Ojpz
dHlsZUluUmVnaW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5SZW5kZXJGbG93VGhyZWFkKCkp
OworCisgICAgaWYgKCFjYW5IYXZlUmVnaW9uU3R5bGUoKQorICAgICAgICB8fCAhKCh2aWV3KCkg
JiYgdmlldygpLT5jdXJyZW50UmVuZGVyUmVnaW9uKCkgJiYgdmlldygpLT5jdXJyZW50UmVuZGVy
UmVnaW9uKCktPmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpKSkKKyAgICAgICAgcmV0dXJuIG1fc3R5
bGUuZ2V0KCk7CisKKyAgICBSZW5kZXJTdHlsZSogcmVnaW9uU3R5bGUgPSB2aWV3KCktPmN1cnJl
bnRSZW5kZXJSZWdpb24oKS0+cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUodGhpcyk7CisgICAgaWYg
KCFyZWdpb25TdHlsZSkKKyAgICAgICAgdmlldygpLT5jdXJyZW50UmVuZGVyUmVnaW9uKCktPmNv
bXB1dGVTdHlsZUluUmVnaW9uKHRoaXMpOworICAgIHJldHVybiB2aWV3KCktPmN1cnJlbnRSZW5k
ZXJSZWdpb24oKS0+cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUodGhpcyk7Cit9CisKIHZvaWQgUmVu
ZGVyT2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAg
ICBpZiAobV9zdHlsZSA9PSBzdHlsZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCmluZGV4IGFjMzMzOWUuLjBiMjZlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTM0Myw2ICszNDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgY2FuSGF2ZVJlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJC
bG9jaygpICYmICFpc0Fub255bW91cygpICYmICFpc1JlbmRlckZsb3dUaHJlYWQoKTsgfQogCiAg
ICAgYm9vbCBpc1Jvb3QoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSA9PSBtX25vZGU7IH0KICAgICBib29sIGlzQm9keSgpIGNvbnN0OwpAQCAtODc4LDYgKzg3
OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0Zv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBMYXlv
dXRQb2ludCogLypjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIqLyA9IDApIGNvbnN0IHsg
cmV0dXJuIExheW91dFJlY3QoKTsgfQogCiBwcml2YXRlOgorICAgIFJlbmRlclN0eWxlKiBzdHls
ZUluUmVnaW9uKCkgY29uc3Q7CiAgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlU2xvd0Nh
c2UoKSBjb25zdDsKICAgICBTdHlsZURpZmZlcmVuY2UgYWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0
eWxlRGlmZmVyZW5jZSwgdW5zaWduZWQgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExp
c3QuY3BwCmluZGV4IGNlNjExYTcuLjFmMTc2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCkBAIC0xMTQsOCArMTE0LDExIEBA
IFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVu
ZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNSZW5kZXJS
ZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0YWNoUmVn
aW9uKCk7CiAKLSAgICAgICAgaWYgKG9sZENoaWxkLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiBv
bGRDaGlsZC0+aXNCb3goKSkKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pblJlbmRlckZsb3dUaHJl
YWQoKSAmJiBvbGRDaGlsZC0+aXNCb3goKSkgewogICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xv
c2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRl
ckJveChvbGRDaGlsZCkpOworICAgICAgICAgICAgaWYgKG9sZENoaWxkLT5jYW5IYXZlUmVnaW9u
U3R5bGUoKSkKKyAgICAgICAgICAgICAgICBvbGRDaGlsZC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1Ro
cmVhZCgpLT5jbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKG9sZENoaWxkKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBjb250YWluZXJGbG93VGhyZWFkID0g
cmVuZGVyRmxvd1RocmVhZENvbnRhaW5lcihvd25lcikpCiAgICAgICAgICAgICBjb250YWluZXJG
bG93VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGQob2xkQ2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCAzNWQ5MDNjLi44ODUyMGU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjQyLDQgKzI0MiwzOCBAQCBM
YXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
IGNvbnN0CiAgICAgcmV0dXJuIHJlZ2lvblJlY3QoKS54KCk7CiB9CiAKK1JlbmRlclN0eWxlKiBS
ZW5kZXJSZWdpb246OnJlbmRlck9iamVjdFJlZ2lvblN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0KSBjb25zdAoreworICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChyZW5kZXJP
YmplY3QpOworICAgIHJldHVybiAoaXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQo
KSkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmNvbXB1
dGVTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VS
VChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPnZpZXcoKSk7CisgICAgQVNTRVJUKG9iamVj
dC0+dmlldygpLT5kb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMo
KSk7CisgICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpICYmIG9iamVjdC0+bm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChvYmplY3QtPm5v
ZGUoKSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJPYmplY3RTdHlsZSA9IG9iamVj
dC0+dmlldygpLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChl
bGVtZW50LCAwLCBmYWxzZSwgZmFsc2UsIHRoaXMpOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGUuc2V0KG9iamVjdCwgcmVuZGVyT2JqZWN0U3R5bGUpOworCisgICAgaWYgKCFvYmplY3Qt
Pmhhc0JveERlY29yYXRpb25zKCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSBjb25zdF9j
YXN0PFJlbmRlckJveCo+KHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAgICBSZW5kZXJTdHls
ZSogc3R5bGVJblJlZ2lvbiA9IHJlbmRlck9iamVjdFJlZ2lvblN0eWxlKG9iamVjdCk7CisgICAg
ICAgIEFTU0VSVChzdHlsZUluUmVnaW9uKTsKKworICAgICAgICBib29sIGhhc0JveERlY29yYXRp
b25zID0gb2JqZWN0LT5pc1RhYmxlQ2VsbCgpIHx8IHN0eWxlSW5SZWdpb24tPmhhc0JhY2tncm91
bmQoKSB8fCBzdHlsZUluUmVnaW9uLT5oYXNCb3JkZXIoKSB8fCBzdHlsZUluUmVnaW9uLT5oYXNB
cHBlYXJhbmNlKCkgfHwgc3R5bGVJblJlZ2lvbi0+Ym94U2hhZG93KCk7CisgICAgICAgIGJveC0+
c2V0SGFzQm94RGVjb3JhdGlvbnMoaGFzQm94RGVjb3JhdGlvbnMpOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBtX3JlbmRlck9iamVjdFJl
Z2lvblN0eWxlLnJlbW92ZShvYmplY3QpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggMjQ4ZDE0OC4uNTc2NmJm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaApAQCAtODEsNiArODEs
OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0xhc3RSZWdpb24oKSBjb25zdDsKIAorICAgIFJlbmRlclN0eWxlKiByZW5kZXJPYmplY3RSZWdp
b25TdHlsZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVTdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHZvaWQgY2xlYXJPYmplY3RTdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUmVnaW9uIjsgfQog
CkBAIC05OCw2ICsxMDEsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBpdCB3aWxsIGFsc28gaG9sZCBh
IGN1c3RvbSBzdHlsZSBmb3IgYW55IGJveCAoZm9yIHJlZ2lvbiBzdHlsaW5nKS4KICAgICBIYXNo
TWFwPGNvbnN0IFJlbmRlckJveCosIFJlbmRlckJveFJlZ2lvbkluZm8qPiBtX3JlbmRlckJveFJl
Z2lvbkluZm87CiAKKyAgICAvLyBUaGlzIG1hcCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
cmVnaW9uIHN0eWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVuZGVyIG9iamVjdHMgdGhhdAorICAg
IC8vIGFyZSBkaXNwbGF5ZWQgaW50byB0aGlzIHJlZ2lvbi4KKyAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgUmVuZGVyT2JqZWN0KiwgUmVmUHRyPFJlbmRlclN0eWxlPiA+IFJlbmRlck9iamVjdFJl
Z2lvblN0eWxlTWFwOworICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIG1fcmVuZGVyT2Jq
ZWN0UmVnaW9uU3R5bGU7CisKICAgICBib29sIG1faXNWYWxpZDsKICAgICBib29sIG1faGFzQ3Vz
dG9tUmVnaW9uU3R5bGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
CmluZGV4IGU2MTkwZmYuLmM4ODU4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKQEAgLTU4LDYgKzU4LDcgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBu
b2RlLCBGcmFtZVZpZXcqIHZpZXcpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xh
eW91dFN0YXRlRGlzYWJsZUNvdW50KDApCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJGbG93VGhyZWFk
KDApCisgICAgLCBtX2N1cnJlbnRSZW5kZXJSZWdpb24oMCkKIHsKICAgICAvLyBDbGVhciBvdXIg
YW5vbnltb3VzIGJpdCwgc2V0IGJlY2F1c2UgUmVuZGVyT2JqZWN0IGFzc3VtZXMKICAgICAvLyBh
bnkgcmVuZGVyZXIgd2l0aCBkb2N1bWVudCBhcyB0aGUgbm9kZSBpcyBhbm9ueW1vdXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBmNGMyYzhhLi43MjhkZDhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKK2NsYXNzIFJlbmRlclJl
Z2lvbjsKIGNsYXNzIFJlbmRlcldpZGdldDsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKQEAgLTE4Nyw2ICsxODgsOSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyRmxvd1RocmVhZCog
Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRSZW5kZXJG
bG93VGhyZWFkOyB9CiAgICAgdm9pZCBzZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkKSB7IG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQgPSBmbG93
VGhyZWFkOyB9CiAKKyAgICBSZW5kZXJSZWdpb24qIGN1cnJlbnRSZW5kZXJSZWdpb24oKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRSZW5kZXJSZWdpb247IH0KKyAgICB2b2lkIHNldEN1cnJlbnRS
ZW5kZXJSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24pIHsgbV9jdXJyZW50UmVuZGVyUmVnaW9u
ID0gcmVnaW9uOyB9CisKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIEludGVydmFsQXJlbmEqIGludGVy
dmFsQXJlbmEoKTsKQEAgLTI3Niw2ICsyODAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgT3du
UHRyPFJlbmRlckZsb3dUaHJlYWRMaXN0PiBtX3JlbmRlckZsb3dUaHJlYWRMaXN0OwogICAgIFJl
bmRlckZsb3dUaHJlYWQqIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQ7CisgICAgUmVuZGVyUmVn
aW9uKiBtX2N1cnJlbnRSZW5kZXJSZWdpb247CiAgICAgUmVmUHRyPEludGVydmFsQXJlbmE+IG1f
aW50ZXJ2YWxBcmVuYTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122400</attachid>
            <date>2012-01-13 02:19:56 -0800</date>
            <delta_ts>2012-01-14 13:29:51 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>76064-2.patch</filename>
            <type>text/plain</type>
            <size>32396</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3OGNiZGQwLi42ZTkyYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAg
QEAKKzIwMTItMDEtMTMgIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAg
ICAgICAgW0NTU1JlZ2lvbnNdQWRkIGJhY2sgcmVnaW9uIHN0eWxlIGNvZGUgcmVtb3ZlZCBpbiBy
MTA0MDM2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlIHJlZ2lvbiBzdHlsZSB0ZXN0cyBhcmUgc3RpbGwgc2tpcHBlZC4gQSBm
b2xsb3cgdXAgcGF0Y2ggd2lsbCBlbmFibGUKKyAgICAgICAgYm90aCByZWdpb24gc3R5bGUgZm9y
IGJhY2tncm91bmQtY29sb3IgYW5kIHJlZ2lvbiBzdHlsZSB0ZXN0cy4KKworICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjp1c2VJblJlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjppbml0Rm9yUmVnaW9uU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjppbml0UmVnaW9uUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6UnVsZVNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNldFJlZ2lvbkZv
clN0eWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cmVnaW9uRm9y
U3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5VG9SZWdpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJPYmpl
Y3RDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpzZXRS
ZWdpb25SYW5nZUZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWlu
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVy
Ojp+Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6c3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjYW5IYXZlUmVn
aW9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpyZW5kZXJPYmplY3RSZWdpb25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVTdHlsZUluUmVnaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZXc6OmN1cnJlbnRSZW5kZXJSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
c2V0Q3VycmVudFJlbmRlclJlZ2lvbik6CisKIDIwMTItMDEtMTIgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIHB1dERpcmVjdCAo
cGFydCAyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA1ZGIzN2JiLi4yN2E4MDk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMjgwLDYgKzI4MCw3IEBAIF9fWk43V2ViQ29yZTEyUHJpbnRDb250
ZXh0OXNwb29sUGFnZUVSTlNfMTVHcmFwaGljc0NvbnRleHRFaWYKIF9fWk43V2ViQ29yZTEyUHJp
bnRDb250ZXh0OXNwb29sUmVjdEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0QzFFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTEy
UHJpbnRDb250ZXh0RDFFdgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTNzdHlsZUluUmVn
aW9uRXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNf
N0ludFJlY3RFYgogX19aTjdXZWJDb3JlMTJSZW5kZXJXaWRnZXQyOHJlc3VtZVdpZGdldEhpZXJh
cmNoeVVwZGF0ZXNFdgogX19aTjdXZWJDb3JlMTJSZW5kZXJXaWRnZXQyOXN1c3BlbmRXaWRnZXRI
aWVyYXJjaHlVcGRhdGVzRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApp
bmRleCA2YjNhNjkxLi5hOTRhZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVD
b25zdGFudHMuaCIKQEAgLTE2OSw3ICsxNzAsNyBAQCBpZiAocHJpbWl0aXZlVmFsdWUpIFwKIAog
Y2xhc3MgUnVsZURhdGEgewogcHVibGljOgotICAgIFJ1bGVEYXRhKENTU1N0eWxlUnVsZSosIENT
U1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRpb24pOworICAgIFJ1bGVEYXRhKENTU1N0eWxlUnVs
ZSosIENTU1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRpb24sIEVSZWdpb25TdHlsZUVuYWJsZWQg
dXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNlSW5SZWdpb25TdHlsZSk7CiAKICAgICB1bnNpZ25l
ZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBDU1NTdHlsZVJ1
bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTE4MSw2ICsxODIsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcjsgfQogICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY2l0eTsgfQogICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7
IH0KKyAgICBFUmVnaW9uU3R5bGVFbmFibGVkIHVzZUluUmVnaW9uU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxFUmVnaW9uU3R5bGVFbmFibGVkPihtX3VzZUluUmVnaW9uU3R5bGUp
OyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhlcmUg
Y2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBlcmZv
cm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50
ID0gNDsKQEAgLTE5MiwxMiArMTk0LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zcGVj
aWZpY2l0eTsKICAgICAvLyBUaGlzIG51bWJlciB3YXMgcGlja2VkIGZhaXJseSBhcmJpdHJhcmls
eS4gV2UgY2FuIHByb2JhYmx5IGxvd2VyIGl0IGlmIHdlIG5lZWQgdG8uCiAgICAgLy8gU29tZSBz
aW1wbGUgdGVzdGluZyBzaG93ZWQgPDEwMCwwMDAgUnVsZURhdGEncyBvbiBsYXJnZSBzaXRlcy4K
LSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjY7CisgICAgdW5zaWduZWQgbV9wb3NpdGlvbiA6
IDI1OwogICAgIHVuc2lnbmVkIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yIDogMTsKICAgICB1
bnNpZ25lZCBtX2hhc011bHRpcGFydFNlbGVjdG9yIDogMTsKICAgICB1bnNpZ25lZCBtX2hhc1Jp
Z2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoIDogMTsKICAgICB1bnNp
Z25lZCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvciA6IDE7CiAgICAgdW5zaWdu
ZWQgbV9saW5rTWF0Y2hUeXBlIDogMjsgLy8gIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFz
aworICAgIHVuc2lnbmVkIG1fdXNlSW5SZWdpb25TdHlsZSA6IDE7IC8vIEVSZWdpb25TdHlsZUVu
YWJsZWQKICAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5p
bWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCiAgICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzW21heGltdW1JZGVudGlmaWVyQ291bnRdOwogfTsKQEAgLTIxNSw3ICsy
MTgsNyBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoUnVsZURhdGEpID09IHNpemVvZihTYW1lU2l6
ZUFzUnVsZURhdGEpLCBSdWxlRGF0YV9zaG91bGRfcwogY2xhc3MgUnVsZVNldCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUnVsZVNldCk7CiBwdWJsaWM6Ci0gICAgUnVsZVNldCgpOworICAg
IFJ1bGVTZXQoRVJlZ2lvblN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlID0gRG9Ob3RVc2VJ
blJlZ2lvblN0eWxlKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwg
T3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOwogCkBAIC0yNTAsNiArMjUz
LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9wYWdlUnVsZXM7CiAgICAgdW5z
aWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7Cisg
ICAgRVJlZ2lvblN0eWxlRW5hYmxlZCBtX3VzZUluUmVnaW9uU3R5bGU7CiB9OwogCiBzdGF0aWMg
UnVsZVNldCogZGVmYXVsdFN0eWxlOwpAQCAtMzM3LDYgKzM0MSw3IEBAIENTU1N0eWxlU2VsZWN0
b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVlCiAgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKICAgICAsIG1fZWxlbWVudCgw
KQogICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkK
ICAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQogICAgICwgbV9wYXJlbnRO
b2RlKDApCiAgICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQpAQCAtMzQ2LDYgKzM1MSw3IEBAIENT
U1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHls
ZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0
b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSh0cnVlKQogICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQor
ICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZShmYWxzZSkKICAgICAsIG1fYXBwbHlQ
cm9wZXJ0eShDU1NTdHlsZUFwcGx5UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0
eSgpKQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMo
ZmFsc2UpCkBAIC02NDksMTIgKzY1NSwxMyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAjZW5kaWYKIH0KIAotdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUpCit2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgRVJl
Z2lvblN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKQogewogICAgIG1fbWF0Y2hlZERlY2xz
Lmdyb3cobV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgMSk7CiAgICAgTWF0Y2hlZFN0eWxlRGVjbGFy
YXRpb24mIG5ld0RlY2xhcmF0aW9uID0gbV9tYXRjaGVkRGVjbHMubGFzdCgpOwogICAgIG5ld0Rl
Y2xhcmF0aW9uLnN0eWxlRGVjbGFyYXRpb24gPSBzdHlsZURlY2xhcmF0aW9uOwogICAgIG5ld0Rl
Y2xhcmF0aW9uLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOworICAgIG5ld0RlY2xhcmF0
aW9uLnVzZUluUmVnaW9uU3R5bGUgPSB1c2VJblJlZ2lvblN0eWxlOwogfQogCiB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKQEAgLTcwOSw3
ICs3MTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVs
ZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICB1bnNpZ25lZCBsaW5r
TWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKTsKICAgICAgICAg
aWYgKHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxpbmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlw
ZSAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKQogICAgICAgICAgICAgbGlua01hdGNoVHlw
ZSA9IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSA/IFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7
Ci0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgp
LT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBlKTsKKyAgICAgICAgYWRkTWF0Y2hlZERlY2xh
cmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCksIGxpbmtNYXRj
aFR5cGUsIG1fbWF0Y2hlZFJ1bGVzW2ldLT51c2VJblJlZ2lvblN0eWxlKCkpOwogICAgIH0KIH0K
IApAQCAtODY5LDYgKzg3Niw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
cykKICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKIAorICAgIGlmIChtX3Jl
Z2lvbkZvclN0eWxpbmcpCisgICAgICAgIG1hdGNoUnVsZXMobV9yZWdpb25SdWxlcy5nZXQoKSwg
cmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CisK
ICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewogICAgICAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVudC0+
aW5saW5lU3R5bGVEZWNsKCk7CkBAIC05MjEsNiArOTMxLDM3IEBAIGlubGluZSB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUq
IHBhcmVuCiAgICAgbV9mb250RGlydHkgPSBmYWxzZTsKIH0KIAoraW5saW5lIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEZvclJlZ2lvblN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdpb24pCit7
CisgICAgc2V0UmVnaW9uRm9yU3R5bGluZyhyZWdpb24pOworCisgICAgaWYgKHJlZ2lvbikKKyAg
ICAgICAgaW5pdFJlZ2lvblJ1bGVzKHJlZ2lvbik7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6aW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJlZ2lvbiogcmVnaW9uKQoreworICAgIEFTU0VSVChy
ZWdpb24pOworICAgIC8vIE1hcmsgdGhhdCB0aGUgc2V0IG9mIHJ1bGVzIGNvbWVzIGZyb20gcmVn
aW9uIHN0eWxpbmcgc2luY2Ugd2UgbmVlZCB0byBmaWx0ZXIKKyAgICAvLyB0aGUgcHJvcGVydGll
cyB0aGF0IGNhbiBiZSBhcHBsaWVkLgorICAgIG1fcmVnaW9uUnVsZXMgPSBhZG9wdFB0cihuZXcg
UnVsZVNldChVc2VJblJlZ2lvblN0eWxlKSk7CisKKyAgICAvLyBGcm9tIGFsbCB0aGUgcmVnaW9u
IHN0eWxlIHJ1bGVzLCBzZWxlY3QgdGhvc2UgdGhhdCBhcHBseSB0byB0aGUgc3BlY2lmaWVkIHJl
Z2lvbi4KKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX3JlZ2lvblN0eWxlUnVsZXMuYmVnaW4oKTsgaXQgIT0gbV9yZWdpb25TdHls
ZVJ1bGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgcmVn
aW9uU2VsZWN0b3JMaXN0ID0gKCppdCktPnNlbGVjdG9yTGlzdCgpOworICAgICAgICBmb3IgKENT
U1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3JMaXN0LmZpcnN0KCk7IHM7IHMgPSByZWdpb25T
ZWxlY3Rvckxpc3QubmV4dChzKSkgeworICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIuY2hlY2tT
ZWxlY3RvcihzLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVnaW9uLT5ub2RlKCkpKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1J1bGVMaXN0KiByZWdpb25TdHls
aW5nUnVsZXMgPSAoKml0KS0+Y3NzUnVsZXMoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IHJlZ2lvblN0eWxpbmdSdWxlcy0+bGVuZ3RoKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBDU1NSdWxlKiByZWdpb25TdHlsaW5nUnVsZSA9IHJlZ2lvblN0
eWxpbmdSdWxlcy0+aXRlbShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlZ2lvblN0eWxp
bmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgICAgICAgICBtX3JlZ2lvblJ1bGVz
LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1
bGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwogc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7CiAKQEAgLTEyNzEsNyArMTMxMiw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoRWxlbWVudCogZWxlbWVu
dCkKIC8vIElmIHJlc29sdmVGb3JSb290RGVmYXVsdCBpcyB0cnVlLCBzdHlsZSBiYXNlZCBvbiB1
c2VyIGFnZW50IHN0eWxlIHNoZWV0IG9ubHkuIFRoaXMgaXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVz
LCB3aGVyZQogLy8gcmVsYXRpdmUgdW5pdHMgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBk
b2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIHN0eWxlZCBvbmx5IHdpdGggVUEgc3R5bGVzaGVl
dAogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJvb2wg
YWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCkKK1Bhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpCiB7
CiAgICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8g
ZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgogICAgIC8vIHdpbGwgdmFu
aXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCkBAIC0xMjg3LDYg
KzEzMjgsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogCiAgICAgaW5pdEVsZW1lbnQoZWxl
bWVudCk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsK
KyAgICBpbml0Rm9yUmVnaW9uU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKICAgICBpZiAoYWxs
b3dTaGFyaW5nKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNo
YXJlZFN0eWxlKCk7CiAgICAgICAgIGlmIChzaGFyZWRTdHlsZSkKQEAgLTE0NDMsNyArMTQ4NSw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxl
bWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQg
cHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNl
dWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRl
clJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKIHsKICAgICBpZiAoIWUpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTQ1MSw2ICsxNDkzLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5
bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKICAgICBp
bml0RWxlbWVudChlKTsKIAogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUs
IHBzZXVkbyk7CisgICAgaW5pdEZvclJlZ2lvblN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7CiAg
ICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAogICAgIGlmIChtX3BhcmVudFN0
eWxlKQpAQCAtMTkzNCw3ICsxOTc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5j
b21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUs
IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24pCitSdWxlRGF0YTo6UnVs
ZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVk
IHBvc2l0aW9uLCBFUmVnaW9uU3R5bGVFbmFibGVkIHVzZUluUmVnaW9uU3R5bGUpCiAgICAgOiBt
X3J1bGUocnVsZSkKICAgICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgLCBtX3NwZWNpZmlj
aXR5KHNlbGVjdG9yLT5zcGVjaWZpY2l0eSgpKQpAQCAtMTk0NCwxMyArMTk4NywxNSBAQCBSdWxl
RGF0YTo6UnVsZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IHVuc2lnbmVkIHBvc2l0aW9uKQogICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5n
SFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KHNlbGVjdG9yKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdl
YkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCiAgICAg
LCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBl
KHNlbGVjdG9yKSkKKyAgICAsIG1fdXNlSW5SZWdpb25TdHlsZSh1c2VJblJlZ2lvblN0eWxlKQog
ewogICAgIFNlbGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3Rv
ciwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmll
ckNvdW50KTsKIH0KIAotUnVsZVNldDo6UnVsZVNldCgpCitSdWxlU2V0OjpSdWxlU2V0KEVSZWdp
b25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSkKICAgICA6IG1fcnVsZUNvdW50KDApCiAg
ICAgLCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fdXNlSW5SZWdpb25T
dHlsZSh1c2VJblJlZ2lvblN0eWxlKQogewogfQogCkBAIC0xOTYxLDcgKzIwMDYsNyBAQCB2b2lk
IFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFw
JiBtYXAsIENTU1N0eWxlUnVsZQogICAgIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4mIHJ1bGVz
ID0gbWFwLmFkZChrZXksIG51bGxwdHIpLmZpcnN0LT5zZWNvbmQ7CiAgICAgaWYgKCFydWxlcykK
ICAgICAgICAgcnVsZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7Ci0gICAgcnVs
ZXMtPmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKykpOworICAg
IHJ1bGVzLT5hcHBlbmQoUnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyssIG1f
dXNlSW5SZWdpb25TdHlsZSkpOwogfQogCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQpAQCAtMjI2Nyw4ICsyMzEyLDExIEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50
IHN0YXJ0SW5kZXgsIGludCBlCiAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZvciAoaW50IGkgPSBz
dGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpCisgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5k
ZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgeworICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ2lv
blN0eWxlID0gbV9tYXRjaGVkRGVjbHNbaV0udXNlSW5SZWdpb25TdHlsZTsKICAgICAgICAgYXBw
bHlEZWNsYXJhdGlvbjxhcHBseUZpcnN0PihtX21hdGNoZWREZWNsc1tpXS5zdHlsZURlY2xhcmF0
aW9uLmdldCgpLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVnaW9uU3R5bGUgPSBmYWxzZTsKKyAgICB9CiB9CiAKIHVuc2lnbmVkIENTU1N0
eWxlU2VsZWN0b3I6OmNvbXB1dGVEZWNsYXJhdGlvbkhhc2goTWF0Y2hlZFN0eWxlRGVjbGFyYXRp
b24qIGRlY2xhcmF0aW9ucywgdW5zaWduZWQgc2l6ZSkKQEAgLTI1NTQsNiArMjYwMiwyMCBAQCBp
bmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpbnQgaWQpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCisvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3Ro
ZS1hdC1yZWdpb24tc3R5bGUtcnVsZQorLy8gRklYTUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0
IGZvciBvdGhlciByZWdpb24gc3R5bGluZyBwcm9wZXJ0aWVzLgoraW5saW5lIGJvb2wgaXNWYWxp
ZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKQoreworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
Q1NTUHJvcGVydHlJRD4oaWQpKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBTVkcgaGFuZGxlcyB6b29taW5nIGlu
IGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBz
Y2FsZWQgaW5zdGVhZAogLy8gb2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUg
cmVuZGVyIHN0eWxlIC8gdHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkK
IC8vIG11bHRpcGxpZXMgZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBs
aWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KQEAgLTI2MzQsNiArMjY5
NiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NW
YWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBGaWx0ZXIgcmVn
aW9uIHN0eWxlIHByb3BlcnR5CisgICAgaWYgKGFwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlKCkg
JiYgIWlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KGlkKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlk
KTsKIAogICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRTdHlsZSAmJiAhbV9wYXJlbnRTdHls
ZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6Omlz
SW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmgKaW5kZXggODU2MTkzZi4uZDZiYjQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0g
RVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6
ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKK2VudW0gRVJlZ2lvblN0eWxlRW5hYmxl
ZCB7IERvTm90VXNlSW5SZWdpb25TdHlsZSwgVXNlSW5SZWdpb25TdHlsZSB9OwogCiBjbGFzcyBD
U1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTYz
LDYgKzY0LDcgQEAgY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNs
YXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOworY2xhc3MgUmVuZGVyUmVnaW9u
OwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0x
MDQsMTEgKzEwNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBh
cmVudCkgeyBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOyB9CiAgICAgdm9pZCBwb3BQYXJl
bnQoRWxlbWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsgfQogCi0g
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9
IGZhbHNlLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIAogICAgIHZvaWQg
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
S2V5ZnJhbWVMaXN0Jik7CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQo
UHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KTsKIApAQCAtMTM1LDYgKzEzNyw4IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2
b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIGluaXRGb3JSZWdpb25TdHlsaW5n
KFJlbmRlclJlZ2lvbiopOworICAgIHZvaWQgaW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJlZ2lvbiop
OwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNo
YXJlZFN0eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CkBAIC0xNDMs
NiArMTQ3LDggQEAgcHJpdmF0ZToKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChT
dHlsZWRFbGVtZW50KikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlKiwgS2V5ZnJhbWVWYWx1ZSYpOworICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5k
ZXJSZWdpb24qIHJlZ2lvbikgeyBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb247IH0KKyAgICBS
ZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbkZv
clN0eWxpbmc7IH0KIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJh
Y2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3Ig
YSBwc2V1ZG8tZWxlbWVudCkuCkBAIC0yNDMsNyArMjQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKIAogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29u
c3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Ci0gICAg
dm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCk7CisgICAg
dm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgRVJlZ2lv
blN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlID0gRG9Ob3RVc2VJblJlZ2lvblN0eWxlKTsK
IAogICAgIHN0cnVjdCBNYXRjaFJlc3VsdCB7CiAgICAgICAgIE1hdGNoUmVzdWx0KCkgOiBmaXJz
dFVBUnVsZSgtMSksIGxhc3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0QXV0
aG9yUnVsZSgtMSksIGZpcnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpLCBpc0NhY2hl
YWJsZSh0cnVlKSB7IH0KQEAgLTI3OSw2ICsyODUsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxl
OworICAgIE93blB0cjxSdWxlU2V0PiBtX3JlZ2lvblJ1bGVzOwogCiAgICAgRmVhdHVyZXMgbV9m
ZWF0dXJlczsKIApAQCAtMzAyLDYgKzMwOSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGU7IH0KICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAg
ICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBs
eVByb3BlcnR5VG9SZWdpb25TdHlsZTsgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBSZW5kZXJT
dHlsZSogc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKQEAgLTM1MCw3ICszNTgsMTAgQEAgcHJpdmF0
ZToKIAogICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRGVj
bGFyYXRpb247CiAgICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGU7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUgOiAzMTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB1c2VJblJlZ2lvblN0
eWxlIDogMTsgLy8gRVJlZ2lvblN0eWxlRW5hYmxlZAorICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIC8vIFVzZWQgdG8gbWFrZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBz
aW5jZSB3ZSBjb21wdXRlIHRoZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0Lgog
ICAgICAgICAgICAgdm9pZCogcG9zc2libHlQYWRkZWRNZW1iZXI7CiAgICAgICAgIH07CkBAIC0z
OTksNiArNDEwLDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0
eWxlOwogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxl
ZEVsZW1lbnQ7CisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CiAgICAgRUlu
c2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwogICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50
Tm9kZTsKICAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CkBAIC00MTEsNiArNDIzLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAg
ICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CisgICAgYm9vbCBtX2Fw
cGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0
eSYgbV9hcHBseVByb3BlcnR5OwogICAgIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCBkZmRjOTY2
Li40ZGRlZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCkBAIC03MzQsNiArNzM0LDMyIEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyRmxvd1RocmVh
ZDo6bGFzdFJlZ2lvbigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6Y2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCwKKyAgICBjb25zdCBSZW5kZXJSZWdpb24qIG9sZFN0YXJ0UmVnaW9uLCBjb25zdCBS
ZW5kZXJSZWdpb24qIG9sZEVuZFJlZ2lvbiwKKyAgICBjb25zdCBSZW5kZXJSZWdpb24qIG5ld1N0
YXJ0UmVnaW9uLCBjb25zdCBSZW5kZXJSZWdpb24qIG5ld0VuZFJlZ2lvbikKK3sKKyAgICAvLyBD
bGVhciB0aGUgc3R5bGVzIGZvciB0aGUgb2JqZWN0IGluIHRoZSByZWdpb25zLgorICAgIC8vIFRo
ZSBzdHlsZXMgYXJlIG5vdCBjbGVhcmVkIGZvciB0aGUgcmVnaW9ucyB0aGF0IGFyZSBjb250YWlu
ZWQgaW4gYm90aCByYW5nZXMuCisgICAgYm9vbCBpbnNpZGVPbGRSZWdpb25SYW5nZSA9IGZhbHNl
OworICAgIGJvb2wgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSBmYWxzZTsKKyAgICBmb3IgKFJlbmRl
clJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAh
PSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZW5kZXJSZWdpb24qIHJl
Z2lvbiA9ICppdGVyOworCisgICAgICAgIGlmIChvbGRTdGFydFJlZ2lvbiA9PSByZWdpb24pCisg
ICAgICAgICAgICBpbnNpZGVPbGRSZWdpb25SYW5nZSA9IHRydWU7CisgICAgICAgIGlmIChuZXdT
dGFydFJlZ2lvbiA9PSByZWdpb24pCisgICAgICAgICAgICBpbnNpZGVOZXdSZWdpb25SYW5nZSA9
IHRydWU7CisKKyAgICAgICAgaWYgKCEoaW5zaWRlT2xkUmVnaW9uUmFuZ2UgJiYgaW5zaWRlTmV3
UmVnaW9uUmFuZ2UpKQorICAgICAgICAgICAgcmVnaW9uLT5jbGVhck9iamVjdFN0eWxlSW5SZWdp
b24ob2JqZWN0KTsKKworICAgICAgICBpZiAob2xkRW5kUmVnaW9uID09IHJlZ2lvbikKKyAgICAg
ICAgICAgIGluc2lkZU9sZFJlZ2lvblJhbmdlID0gZmFsc2U7CisgICAgICAgIGlmIChuZXdFbmRS
ZWdpb24gPT0gcmVnaW9uKQorICAgICAgICAgICAgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSBmYWxz
ZTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JC
b3goY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSkKIHsKICAgICAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBkaWZmZXJpbmcgd3Jp
dGluZy1tb2Rlcy4KQEAgLTc2NCw2ICs3OTAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNl
dFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IG9mZgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2xlYXJSZW5kZXJPYmplY3RDdXN0b21T
dHlsZShib3gsIHJhbmdlLnN0YXJ0UmVnaW9uKCksIHJhbmdlLmVuZFJlZ2lvbigpLCBzdGFydFJl
Z2lvbiwgZW5kUmVnaW9uKTsKICAgICByYW5nZS5zZXRSYW5nZShzdGFydFJlZ2lvbiwgZW5kUmVn
aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
aW5kZXggZTEwYzVmYy4uNWFiYWJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5oCkBAIC0xMjMsNiArMTIzLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICB2b2lkIGdldFJlZ2lvblJhbmdlRm9yQm94KGNv
bnN0IFJlbmRlckJveCosIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdpb24q
JiBlbmRSZWdpb24pIGNvbnN0OwogCisgICAgdm9pZCBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0
eWxlKGNvbnN0IFJlbmRlck9iamVjdCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogb2xkU3RhcnRSZWdpb24gPSAwLCBjb25zdCBSZW5k
ZXJSZWdpb24qIG9sZEVuZFJlZ2lvbiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogbmV3U3RhcnRSZWdpb24gPSAwLCBjb25zdCBS
ZW5kZXJSZWdpb24qIG5ld0VuZFJlZ2lvbiA9IDApOwogICAgIFdlYktpdE5hbWVkRmxvdyogZW5z
dXJlTmFtZWRGbG93KCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCA4M2EwZmU5Li5hN2QyYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI1ODMsOSArMjU4MywyOCBAQCBib29sIFJlbmRlckxh
eWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdAogICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCitjbGFzcyBDdXJyZW50UmVuZGVyUmVnaW9u
TWFpbnRhaW5lciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlclJlZ2lv
bk1haW50YWluZXIpOworcHVibGljOgorICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVy
KFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQorICAgIDogbV92
aWV3KHZpZXcpCisgICAgLCBtX3JlbmRlclJlZ2lvbih2aWV3LT5jdXJyZW50UmVuZGVyUmVnaW9u
KCkpCisgICAgeworICAgICAgICBtX3ZpZXctPnNldEN1cnJlbnRSZW5kZXJSZWdpb24ocmVuZGVy
UmVnaW9uKTsKKyAgICB9CisgICAgfkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKCkKKyAg
ICB7CisgICAgICAgIG1fdmlldy0+c2V0Q3VycmVudFJlbmRlclJlZ2lvbihtX3JlbmRlclJlZ2lv
bik7CisgICAgfQorcHJpdmF0ZToKKyAgICBSZW5kZXJWaWV3KiBtX3ZpZXc7CisgICAgUmVuZGVy
UmVnaW9uKiBtX3JlbmRlclJlZ2lvbjsKK307CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogcCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhh
dmlvciBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QgKnBhaW50aW5nUm9vdCwKICAgICBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CisgICAgQ3Vy
cmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVuZGVyUmVnaW9uTWFpbnRhaW5lcihyZW5kZXJl
cigpLT52aWV3KCksIHJlZ2lvbik7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92ZXJsYXBU
ZXN0UmVxdWVzdHM7CiAgICAgcGFpbnRMYXllcih0aGlzLCBwLCBkYW1hZ2VSZWN0LCBwYWludEJl
aGF2aW9yLCBwYWludGluZ1Jvb3QsIHJlZ2lvbiwgJm92ZXJsYXBUZXN0UmVxdWVzdHMsIHBhaW50
RmxhZ3MpOwogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3Zlcmxh
cFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTMwNzMsNiArMzA5Miw3IEBAIHN0YXRpYyBpbmxpbmUg
TGF5b3V0UmVjdCBmcmFtZVZpc2libGVSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKKyAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5l
ciByZW5kZXJSZWdpb25NYWludGFpbmVyKHJlbmRlcmVyKCktPnZpZXcoKSwgcmVzdWx0LnJlZ2lv
bigpKTsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAK
ICAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhID0gcmVuZGVyZXIoKS0+dmlldygpLT5kb2N1bWVu
dFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
MGNmNTAzMi4uNTI2OTU0MCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTE3MTMsNiArMTcxMywyMCBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyT2JqZWN0
OjphZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIHVuc2lnbgogICAg
IHJldHVybiBkaWZmOwogfQogCitSZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpzdHlsZUluUmVn
aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5SZW5kZXJGbG93VGhyZWFkKCkpOworCisgICAg
aWYgKCFjYW5IYXZlUmVnaW9uU3R5bGUoKQorICAgICAgICB8fCAhKCh2aWV3KCkgJiYgdmlldygp
LT5jdXJyZW50UmVuZGVyUmVnaW9uKCkgJiYgdmlldygpLT5jdXJyZW50UmVuZGVyUmVnaW9uKCkt
Pmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpKSkKKyAgICAgICAgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7
CisKKyAgICBSZW5kZXJTdHlsZSogcmVnaW9uU3R5bGUgPSB2aWV3KCktPmN1cnJlbnRSZW5kZXJS
ZWdpb24oKS0+cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUodGhpcyk7CisgICAgaWYgKCFyZWdpb25T
dHlsZSkKKyAgICAgICAgdmlldygpLT5jdXJyZW50UmVuZGVyUmVnaW9uKCktPmNvbXB1dGVTdHls
ZUluUmVnaW9uKHRoaXMpOworICAgIHJldHVybiB2aWV3KCktPmN1cnJlbnRSZW5kZXJSZWdpb24o
KS0+cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUodGhpcyk7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0
OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBpZiAobV9z
dHlsZSA9PSBzdHlsZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IGFjMzMzOWUuLjBiMjZlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTM0Myw2ICszNDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgY2FuSGF2ZVJlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJCbG9jaygpICYm
ICFpc0Fub255bW91cygpICYmICFpc1JlbmRlckZsb3dUaHJlYWQoKTsgfQogCiAgICAgYm9vbCBp
c1Jvb3QoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBt
X25vZGU7IH0KICAgICBib29sIGlzQm9keSgpIGNvbnN0OwpAQCAtODc4LDYgKzg3OSw3IEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBMYXlvdXRQb2ludCog
LypjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIqLyA9IDApIGNvbnN0IHsgcmV0dXJuIExh
eW91dFJlY3QoKTsgfQogCiBwcml2YXRlOgorICAgIFJlbmRlclN0eWxlKiBzdHlsZUluUmVnaW9u
KCkgY29uc3Q7CiAgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlU2xvd0Nhc2UoKSBjb25z
dDsKICAgICBTdHlsZURpZmZlcmVuY2UgYWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0eWxlRGlmZmVy
ZW5jZSwgdW5zaWduZWQgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCmlu
ZGV4IGNlNjExYTcuLjFmMTc2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCkBAIC0xMTQsOCArMTE0LDExIEBAIFJlbmRlck9i
amVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNSZW5kZXJSZWdpb24oKSkK
ICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0YWNoUmVnaW9uKCk7CiAK
LSAgICAgICAgaWYgKG9sZENoaWxkLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiBvbGRDaGlsZC0+
aXNCb3goKSkKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiBv
bGRDaGlsZC0+aXNCb3goKSkgewogICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOworICAgICAgICAgICAgaWYgKG9sZENoaWxkLT5jYW5IYXZlUmVnaW9uU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICBvbGRDaGlsZC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5j
bGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKG9sZENoaWxkKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIGlmIChSZW5kZXJGbG93VGhyZWFkKiBjb250YWluZXJGbG93VGhyZWFkID0gcmVuZGVyRmxv
d1RocmVhZENvbnRhaW5lcihvd25lcikpCiAgICAgICAgICAgICBjb250YWluZXJGbG93VGhyZWFk
LT5yZW1vdmVGbG93Q2hpbGQob2xkQ2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAppbmRleCAzMjdmODJiLi42M2ZlYzBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtMjM0LDQgKzIzNCwzOCBAQCBMYXlvdXRVbml0
IFJlbmRlclJlZ2lvbjo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlZ2lvblJlY3QoKS54KCk7CiB9CiAKK1JlbmRlclN0eWxlKiBSZW5kZXJSZWdp
b246OnJlbmRlck9iamVjdFJlZ2lvblN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0KSBjb25zdAoreworICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChyZW5kZXJPYmplY3QpOwor
ICAgIHJldHVybiAoaXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQoKSkgPyBpdC0+
c2Vjb25kLmdldCgpIDogMDsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVTdHlsZUlu
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3Qp
OworICAgIEFTU0VSVChvYmplY3QtPnZpZXcoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+dmlldygp
LT5kb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7CisgICAg
QVNTRVJUKG9iamVjdC0+bm9kZSgpICYmIG9iamVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkp
OworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSk7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5kZXJPYmplY3RTdHlsZSA9IG9iamVjdC0+dmlldygp
LT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAw
LCBmYWxzZSwgZmFsc2UsIHRoaXMpOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuc2V0
KG9iamVjdCwgcmVuZGVyT2JqZWN0U3R5bGUpOworCisgICAgaWYgKCFvYmplY3QtPmhhc0JveERl
Y29yYXRpb25zKCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSBjb25zdF9jYXN0PFJlbmRl
ckJveCo+KHRvUmVuZGVyQm94KG9iamVjdCkpOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVJ
blJlZ2lvbiA9IHJlbmRlck9iamVjdFJlZ2lvblN0eWxlKG9iamVjdCk7CisgICAgICAgIEFTU0VS
VChzdHlsZUluUmVnaW9uKTsKKworICAgICAgICBib29sIGhhc0JveERlY29yYXRpb25zID0gb2Jq
ZWN0LT5pc1RhYmxlQ2VsbCgpIHx8IHN0eWxlSW5SZWdpb24tPmhhc0JhY2tncm91bmQoKSB8fCBz
dHlsZUluUmVnaW9uLT5oYXNCb3JkZXIoKSB8fCBzdHlsZUluUmVnaW9uLT5oYXNBcHBlYXJhbmNl
KCkgfHwgc3R5bGVJblJlZ2lvbi0+Ym94U2hhZG93KCk7CisgICAgICAgIGJveC0+c2V0SGFzQm94
RGVjb3JhdGlvbnMoaGFzQm94RGVjb3JhdGlvbnMpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJS
ZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxl
LnJlbW92ZShvYmplY3QpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggNjFjZjFmNS4uYjY0ODNmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaApAQCAtODAsNiArODAsOSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xhc3RSZWdp
b24oKSBjb25zdDsKIAorICAgIFJlbmRlclN0eWxlKiByZW5kZXJPYmplY3RSZWdpb25TdHlsZShj
b25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVTdHlsZUluUmVnaW9u
KGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHZvaWQgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9u
KGNvbnN0IFJlbmRlck9iamVjdCopOwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUmVnaW9uIjsgfQogCkBAIC05Nyw2
ICsxMDAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBpdCB3aWxsIGFsc28gaG9sZCBhIGN1c3RvbSBz
dHlsZSBmb3IgYW55IGJveCAoZm9yIHJlZ2lvbiBzdHlsaW5nKS4KICAgICBIYXNoTWFwPGNvbnN0
IFJlbmRlckJveCosIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiA+IG1fcmVuZGVyQm94UmVn
aW9uSW5mbzsKIAorICAgIC8vIFRoaXMgbWFwIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBy
ZWdpb24gc3R5bGUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZW5kZXIgb2JqZWN0cyB0aGF0CisgICAg
Ly8gYXJlIGRpc3BsYXllZCBpbnRvIHRoaXMgcmVnaW9uLgorICAgIHR5cGVkZWYgSGFzaE1hcDxj
b25zdCBSZW5kZXJPYmplY3QqLCBSZWZQdHI8UmVuZGVyU3R5bGU+ID4gUmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGVNYXA7CisgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgbV9yZW5kZXJPYmpl
Y3RSZWdpb25TdHlsZTsKKwogICAgIGJvb2wgbV9pc1ZhbGlkOwogICAgIGJvb2wgbV9oYXNDdXN0
b21SZWdpb25TdHlsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
aW5kZXggZTYxOTBmZi4uYzg4NThjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNTgsNiArNTgsNyBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5v
ZGUsIEZyYW1lVmlldyogdmlldykKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5
b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKICAgICAsIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQo
MCkKKyAgICAsIG1fY3VycmVudFJlbmRlclJlZ2lvbigwKQogewogICAgIC8vIENsZWFyIG91ciBh
bm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBSZW5kZXJPYmplY3QgYXNzdW1lcwogICAgIC8vIGFu
eSByZW5kZXJlciB3aXRoIGRvY3VtZW50IGFzIHRoZSBub2RlIGlzIGFub255bW91cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IGY0YzJjOGEuLjcyOGRkOGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOworY2xhc3MgUmVuZGVyUmVn
aW9uOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpAQCAtMTg3LDYgKzE4OCw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJGbG93VGhyZWFkKiBj
dXJyZW50UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFJlbmRlckZs
b3dUaHJlYWQ7IH0KICAgICB2b2lkIHNldEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQpIHsgbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZCA9IGZsb3dU
aHJlYWQ7IH0KIAorICAgIFJlbmRlclJlZ2lvbiogY3VycmVudFJlbmRlclJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudFJlbmRlclJlZ2lvbjsgfQorICAgIHZvaWQgc2V0Q3VycmVudFJl
bmRlclJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbikgeyBtX2N1cnJlbnRSZW5kZXJSZWdpb24g
PSByZWdpb247IH0KKwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgSW50ZXJ2YWxBcmVuYSogaW50ZXJ2
YWxBcmVuYSgpOwpAQCAtMjc2LDYgKzI4MCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBPd25Q
dHI8UmVuZGVyRmxvd1RocmVhZExpc3Q+IG1fcmVuZGVyRmxvd1RocmVhZExpc3Q7CiAgICAgUmVu
ZGVyRmxvd1RocmVhZCogbV9jdXJyZW50UmVuZGVyRmxvd1RocmVhZDsKKyAgICBSZW5kZXJSZWdp
b24qIG1fY3VycmVudFJlbmRlclJlZ2lvbjsKICAgICBSZWZQdHI8SW50ZXJ2YWxBcmVuYT4gbV9p
bnRlcnZhbEFyZW5hOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>