<?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>101312</bug_id>
          
          <creation_ts>2012-11-05 23:53:44 -0800</creation_ts>
          <short_desc>&lt;style scoped&gt;: refactor StyleScopeResolver</short_desc>
          <delta_ts>2026-03-03 12:41:23 -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>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72462</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Takashi Sakamoto">tasak</reporter>
          <assigned_to name="Takashi Sakamoto">tasak</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>morrita</cc>
    
    <cc>ntim</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>tasak</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>759316</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-05 23:53:44 -0800</bug_when>
    <thetext>Class StyleScopeResolver should have a scoped tree to find matched scoped author rules. This would make it easier to understand the code for style scoped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759327</commentid>
    <comment_count>1</comment_count>
      <attachid>172500</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-06 00:04:09 -0800</bug_when>
    <thetext>Created attachment 172500
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759334</commentid>
    <comment_count>2</comment_count>
      <attachid>172500</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-06 00:13:29 -0800</bug_when>
    <thetext>Comment on attachment 172500
WIP

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

&gt; Source/WebCore/css/StyleScopeResolver.h:94
&gt; +    };

Let&apos;s move this out from the class. Nested classes tend to limit flexibility to moving code around.
Also, make this a class instead of a struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759343</commentid>
    <comment_count>3</comment_count>
      <attachid>172500</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-11-06 00:28:11 -0800</bug_when>
    <thetext>Comment on attachment 172500
WIP

Attachment 172500 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14683353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759382</commentid>
    <comment_count>4</comment_count>
      <attachid>172500</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-06 01:28:09 -0800</bug_when>
    <thetext>Comment on attachment 172500
WIP

Attachment 172500 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14722936</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759411</commentid>
    <comment_count>5</comment_count>
      <attachid>172500</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-06 01:50:50 -0800</bug_when>
    <thetext>Comment on attachment 172500
WIP

Attachment 172500 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14665481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759430</commentid>
    <comment_count>6</comment_count>
      <attachid>172500</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 02:08:03 -0800</bug_when>
    <thetext>Comment on attachment 172500
WIP

Attachment 172500 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14726877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760390</commentid>
    <comment_count>7</comment_count>
      <attachid>172719</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-06 22:05:55 -0800</bug_when>
    <thetext>Created attachment 172719
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760392</commentid>
    <comment_count>8</comment_count>
      <attachid>172719</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-06 22:11:32 -0800</bug_when>
    <thetext>Comment on attachment 172719
WIP

Attachment 172719 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14761208</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760395</commentid>
    <comment_count>9</comment_count>
      <attachid>172719</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 22:13:30 -0800</bug_when>
    <thetext>Comment on attachment 172719
WIP

Attachment 172719 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14763081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760405</commentid>
    <comment_count>10</comment_count>
      <attachid>172722</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-06 22:34:49 -0800</bug_when>
    <thetext>Created attachment 172722
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763974</commentid>
    <comment_count>11</comment_count>
      <attachid>173538</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-11-11 19:03:33 -0800</bug_when>
    <thetext>Created attachment 173538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764009</commentid>
    <comment_count>12</comment_count>
      <attachid>173538</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-11 20:59:54 -0800</bug_when>
    <thetext>Comment on attachment 173538
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:751
&gt; +    Vector&lt;std::pair&lt;const ContainerNode*, RuleSet*&gt; &gt; matchedRules;

Let&apos;s specify some initial vector capacity for easy perf win.
Also, I think we can hold this vector as a ScopedRuleData member. Is that right? And do you think is it a good approach?

&gt; Source/WebCore/css/StyleScopeResolver.cpp:88
&gt; +ScopedRuleData* StyleScopeResolver::addScopedRuleData(const ContainerNode* scope, bool needRuleSet, bool&amp; isNewEntry)

- The name sounds misleading. This doesn&apos;t always create nor add ScopedRuleData. It lazily creates an instance for them instead.
- Is it possible to make the tree setup as a part of this instead of let caller do it. the isNewEntry out parameter is something sad to see.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:100
&gt; +void StyleScopeResolver::setupScopedRuleDataTree(ScopedRuleData* target)

Can this be loop instead of recursion?

&gt; Source/WebCore/css/StyleScopeResolver.cpp:107
&gt; +    // prepared.

How about to have &quot;already prepared&quot; flag on each ScopedRuleData that indicates the parent is correctly set?
We&apos;ve spent too much complexity just to avoid extra lookups of their parents, which better be avoided if possible.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:145
&gt; +        if (scope-&gt;isShadowRoot()) {

It seems this can be part of scopedRuleDataFor() because every ShadowRoot is going to have ScopedRuleData eventually and
The logic is overlapping to setupScopedRuleDataTree() in certain way.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:187
&gt; +inline ScopedRuleData* StyleScopeResolver::parentRuleData(ScopedRuleData* ruleData)

Why not a method of ScopedRuleData?

&gt; Source/WebCore/css/StyleScopeResolver.h:118
&gt; +    ScopedRuleData* m_stackHead;

It is confusing to see having both m_stackHead and m_stackParent, whose relationship is unclear.
What is the stack here  after all? Is there any better way to explain what is happening here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801630</commentid>
    <comment_count>13</comment_count>
      <attachid>173538</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-01-07 14:06:02 -0800</bug_when>
    <thetext>Comment on attachment 173538
Patch

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

I think this is a great start in the right direction, but I worry there&apos;s still not enough clarity in data structures and their consumers. The way I see it is that there are:

1) The list of scope ancestors, whose integrity is maintained during cascading attach calls. This data structure persists throughout the entire cycle of resolving styles. This is one nicely encapsulated class.

2) The scope-aware style resolver, or the actor on the data structure mentioned in #1, which is instantiated at will (it is only relevant while computing style of one element), and which incorporates all the logic of crawling up #1 and collecting rules on it.

Then, the StyleResolver only needs to hold on to the #1 and create #2 only when it needs to resolve scoped styles. WDYT?

&gt; Source/WebCore/ChangeLog:3
&gt; +        &lt;style scoped&gt;: refactor StyleScopeResolver

The title of the bug is too generic to say anything useful.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:138
&gt; +    m_stackHead = 0;

Whoa. What happens with the ScopedRuleData?

&gt;&gt; Source/WebCore/css/StyleScopeResolver.h:118
&gt;&gt; +    ScopedRuleData* m_stackHead;
&gt; 
&gt; It is confusing to see having both m_stackHead and m_stackParent, whose relationship is unclear.
&gt; What is the stack here  after all? Is there any better way to explain what is happening here?

Stacks usually have top and bottom, not head and tail. Also: is this really a stack? This is simply a chain of ancestor scopes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1902376</commentid>
    <comment_count>14</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-09-30 09:24:51 -0700</bug_when>
    <thetext>If I am not mistaken &lt;style scoped&gt; was removed from Webkit and also from Web-Spec but came back in different way.

Is this refactoring required? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2186664</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2026-03-03 12:41:23 -0800</bug_when>
    <thetext>I think we can close this now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172500</attachid>
            <date>2012-11-06 00:04:09 -0800</date>
            <delta_ts>2012-11-06 22:05:50 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-101312-20121106170222.patch</filename>
            <type>text/plain</type>
            <size>16416</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE0YTliNzE2N2ViMmFj
NWM0MDU4NTc4NTAxYWM5MmViZTcyYmU1MC4uMWUxNGVjZGM4NDJmODMyY2ZiNjk2MDkzMjI5OTgz
ZjliNmMyZGFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTA1ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICA8c3R5bGUgc2NvcGVk
PjogcmVmYWN0b3IgU3R5bGVTY29wZVJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgb2xkIGNvZGUgYWx3YXlzIGdvZXMgdXAgYSBET00g
dHJlZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50IHRvCisgICAgICAgIGZpbmQgYWxsIG1hdGNoZWQg
c2NvcGVkIHN0eWxlcy4gSG93ZXZlciBudW1iZXIgb2Ygc2NvcGluZyBub2RlcyBpcworICAgICAg
ICBtdWNoIGZld2VyZXIgdGhhbiBudW1iZXIgb2Ygbm9kZXMuIFNvIGl0IHdvdWxkIGJlIGJldHRl
ciB0byBsb29rIHVwCisgICAgICAgIHNvbWV0aGluZyBsaWtlIGEgc2NvcGVkIHRyZWUgdGhhbiBs
b29raW5nIHVwIGFuY2VzdG9yIG5vZGVzLiBXZSBjYW4KKyAgICAgICAgZXhwZWN0IHRoZSBzY29w
ZWQgdHJlZSBpcyB2ZXJ5IHNwYXJzZSB0cmVlIGNvbXBhcmluZyB3aXRoIGEgRE9NIHRyZWUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMganVzdCBmb3IgcmVm
YWN0b3JpbmcuIE5vIG5ldworICAgICAgICBmZWF0dXJlcyBhcmUgYWRkZWQuCisKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U3R5bGVTY29w
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cnVsZVNl
dEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlZFJ1bGVE
YXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjphZGRTY29wZWRSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OnNldHVwU2NvcGVkUnVsZURhdGFUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNldHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTY29wZVJlc29sdmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6cG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cGFyZW50
UnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpmaW5kTWF0
Y2hlZFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFNjb3BlZFJ1
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U2NvcGVkUnVs
ZURhdGE6OlNjb3BlZFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6U2NvcGVkUnVsZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kpOgorCiAyMDEyLTExLTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBCYXNlQ2hvb3Nlck9ubHlE
YXRlQW5kVGltZUlucHV0VHlwZSBzaG91bGQgaGF2ZSBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0
VHlwZSBiZWhhdmlvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGFiMTU1
M2NhZTExOWZiMTI2ZDcxOTc4MTlmZTk5OTdjZTQwN2U1YjcuLjA3OTA5ZjkyNTJjYzE1MjFhY2Fk
MDlhYzMwNjk0Y2E3ZTQzMTNjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAK
QEAgLTc0OCwzMiArNzQ4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAKICAgICBtYXRj
aEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAotICAgIGlmICghbV9zY29w
ZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
TWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVu
dCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAoIW1f
c2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVl
U2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKLSAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0
cnVlOwotICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKLSAgICAgICAgZG9jdW1lbnRTY29wZSA9IGRvY3Vt
ZW50U2NvcGUgJiYgIWZyYW1lLm1fc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCk7Ci0gICAgICAgIGlm
IChkb2N1bWVudFNjb3BlKSB7Ci0gICAgICAgICAgICBpZiAoIWFwcGx5QXV0aG9yU3R5bGVzKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFtZSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgCi0gICAgICAgIE1hdGNo
T3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzLCBmcmFtZS5tX3Njb3BlKTsKLSAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7Ci0g
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUs
IG9wdGlvbnMpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgQ29udGFpbmVyTm9kZSosIFJ1
bGVTZXQqPiA+IG1hdGNoZWRSdWxlczsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPmZpbmRNYXRjaGVk
U2NvcGVkQXV0aG9yUnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIGZvciAoaW50
IGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTWF0
Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoZWRSdWxlc1tpXS5maXJz
dCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlc1tpXS5zZWNvbmQs
IHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0
Y2hlZFJ1bGVzW2ldLnNlY29uZCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwogICAgIH0KLQogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAppbmRleCA1ZmYyYjNl
MGIxMTU0OTk0NDdlMjFjODZmNThmNjQ2MTMwMWNmMGZkLi5hNDI1NWI0NmMzODkzYThlNmNiYzU0
NTUxYmRmYTUzMTQ3OTVlNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
Y29wZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcApAQCAtNDYsOCArNDYsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHlsZVNj
b3BlUmVzb2x2ZXI6OlN0eWxlU2NvcGVSZXNvbHZlcigpCi0gICAgOiBtX3N0YWNrUGFyZW50KDAp
Ci0gICAgLCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgoMCkKKyAgICA6IG1fc3RhY2tIZWFkKDAp
CisgICAgLCBtX3N0YWNrUGFyZW50KDApCiB7CiB9CiAKQEAgLTgxLDM2ICs4MSw4NSBAQCBpbmxp
bmUgUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjpydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKSBjb25zdAogewogICAgIGlmICghc2NvcGUtPmhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuZmluZChzY29wZSk7Ci0gICAgcmV0dXJuIGl0
ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsgCisgICAgU2Nv
cGVkUnVsZURhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuZmluZChz
Y29wZSk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZhbHVl
LT5tX3J1bGVTZXQuZ2V0KCkgOiAwOyAKIH0KIAotUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVy
OjplbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5lIFN0
eWxlU2NvcGVSZXNvbHZlcjo6U2NvcGVkUnVsZURhdGEqIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2Nv
cGVkUnVsZURhdGFGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgaWYgKCFz
Y29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSAmJiAhc2NvcGUtPmlzU2hhZG93Um9vdCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBTY29wZWRSdWxlRGF0YU1hcDo6aXRlcmF0b3IgaXQg
PSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JT
dHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCitTdHlsZVNjb3BlUmVzb2x2
ZXI6OlNjb3BlZFJ1bGVEYXRhKiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZFNjb3BlZFJ1bGVEYXRh
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBib29sIG5lZWRSdWxlU2V0LCBib29sJiBpc05l
d0VudHJ5KQogewotICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBt
X2F1dGhvclN0eWxlcy5hZGQoc2NvcGUsIG51bGxwdHIpOworICAgIFNjb3BlZFJ1bGVEYXRhTWFw
OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRy
KTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IFNjb3BlZFJ1bGVEYXRhOjpjcmVhdGUoc2NvcGUpOworICAgIGlzTmV3RW50
cnkgPSBhZGRSZXN1bHQuaXNOZXdFbnRyeTsKKworICAgIGlmIChuZWVkUnVsZVNldCAmJiAhYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV9ydWxlU2V0KQorICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5tX3J1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKICAgICByZXR1cm4g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAordm9pZCBTdHlsZVNjb3BlUmVz
b2x2ZXI6OnNldHVwU2NvcGVkUnVsZURhdGFUcmVlKFNjb3BlZFJ1bGVEYXRhKiB0YXJnZXQpCit7
CisgICAgQVNTRVJUKHRhcmdldCk7CisgICAgQVNTRVJUKHRhcmdldC0+bV9zY29wZSk7CisKKyAg
ICAvLyBCZSBjYXJlZnVsISEgbmVlZCB0byBjaGVjayBTQ09QRUQgVFJFRS4gVGhpcyBjb2RlIGRl
cGVuZHMgb24KKyAgICAvLyB0aGUgb3JkZXIgb2Ygc2NvcGVzLgorICAgIGNvbnN0IENvbnRhaW5l
ck5vZGUqIGUgPSB0YXJnZXQtPm1fc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBmb3Ig
KDsgZTsgZSA9IGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICBpZiAoU2NvcGVkUnVs
ZURhdGEqIHJ1bGVEYXRhID0gc2NvcGVkUnVsZURhdGFGb3IoZSkpIHsKKyAgICAgICAgICAgIHRh
cmdldC0+bV9wYXJlbnRSdWxlRGF0YSA9IHJ1bGVEYXRhOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChlLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAg
Ym9vbCBkdW1teTsKKyAgICAgICAgICAgIFNjb3BlZFJ1bGVEYXRhKiBydWxlRGF0YSA9IGFkZFNj
b3BlZFJ1bGVEYXRhKGUsIGZhbHNlLCBkdW1teSk7CisgICAgICAgICAgICB0YXJnZXQtPm1fcGFy
ZW50UnVsZURhdGEgPSBydWxlRGF0YTsKKyAgICAgICAgICAgIHNldHVwU2NvcGVkUnVsZURhdGFU
cmVlKHJ1bGVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30K
KworUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGJvb2wgaXNOZXdFbnRyeTsKKyAgICBTY29wZWRS
dWxlRGF0YSogcnVsZURhdGEgPSBhZGRTY29wZWRSdWxlRGF0YShzY29wZSwgdHJ1ZSwgaXNOZXdF
bnRyeSk7CisgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgIHNldHVwU2NvcGVkUnVsZURhdGFU
cmVlKHJ1bGVEYXRhKTsKKyAgICByZXR1cm4gcnVsZURhdGEtPm1fcnVsZVNldC5nZXQoKTsKK30K
Kwogdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNldHVwU3RhY2soY29uc3QgQ29udGFpbmVyTm9k
ZSogcGFyZW50KQogewogICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0
IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KICAgICBBU1NF
UlQoIW1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7CiAKLSAgICBtX3N0YWNrLnNocmluaygwKTsK
LSAgICBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9IDA7CisgICAgbV9zdGFja0hlYWQgPSAw
OwogICAgIGZvciAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBwYXJlbnQ7IHNjb3BlOyBz
Y29wZSA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAgICAgICAgUnVsZVNldCogcnVs
ZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOwotICAgICAgICBpZiAocnVsZVNldCkKLSAgICAgICAg
ICAgIG1fc3RhY2suYXBwZW5kKFN0YWNrRnJhbWUoc2NvcGUsIGF1dGhvclN0eWxlQm91bmRzSW5k
ZXgsIHJ1bGVTZXQpKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9T
aGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAgICAgICAgICAgIC0tYXV0
aG9yU3R5bGVCb3VuZHNJbmRleDsKKyAgICAgICAgU2NvcGVkUnVsZURhdGEqIHJ1bGVEYXRhID0g
c2NvcGVkUnVsZURhdGFGb3Ioc2NvcGUpOworICAgICAgICBpZiAocnVsZURhdGEpIHsKKyAgICAg
ICAgICAgIG1fc3RhY2tIZWFkID0gcnVsZURhdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBi
b29sIGR1bW15OworICAgICAgICAgICAgLy8gVG8gcXVpY2tseSBzb2x2ZSBhcHBseS1hdXRob3It
c3R5bGVzIGZsYWcsIGNyZWF0ZSBhbiBlbXB0eQorICAgICAgICAgICAgLy8gU2NvcGVkUnVsZURh
dGEgZm9yIGEgU2hhZG93Um9vdC4gU28gd2UgY2FuIHJlbHkgb24gbV9zdGFja0hlYWQKKyAgICAg
ICAgICAgIC8vIGFuZCB0cmF2ZXJzZSBtX3BhcmVudFJ1bGVEYXRhIHRvIHNvbHZlIGFwcGx5LWF1
dGhvci1zdHlsZXMuCisgICAgICAgICAgICBtX3N0YWNrSGVhZCA9IGFkZFNjb3BlZFJ1bGVEYXRh
KHNjb3BlLCBmYWxzZSwgZHVtbXkpOworICAgICAgICAgICAgc2V0dXBTY29wZWRSdWxlRGF0YVRy
ZWUobV9zdGFja0hlYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9Ci0K
LSAgICBtX3N0YWNrLnJldmVyc2UoKTsKICAgICBtX3N0YWNrUGFyZW50ID0gcGFyZW50OwotICAg
IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA9IDA7CiB9CiAKIHZvaWQgU3R5bGVTY29wZVJlc29s
dmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZVBhcmVudCkKQEAgLTExOCw3ICsxNjcsNiBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZl
cjo6cHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3QgQ29udGFpbmVyTm9kZSog
cwogICAgIC8vIFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUgc2NvcGluZyBlbGVtZW50
IHN0YWNrIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCiAgICAgaWYgKG1f
YXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoIW1fc3RhY2tQYXJlbnQp
OwotICAgICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMjgsMTMgKzE3Niw4IEBAIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNo
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWluZXJOb2RlKiBzCiAgICAg
ICAgIHNldHVwU3RhY2soc2NvcGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYg
KHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRo
b3JTdHlsZXMoKSkKLSAgICAgICAgKyttX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7Ci0gICAgLy8g
T3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhlIHN0YWNrLgotICAgIFJ1bGVT
ZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKLSAgICBpZiAocnVsZVNldCkKLSAgICAg
ICAgbV9zdGFjay5hcHBlbmQoU3RhY2tGcmFtZShzY29wZSwgbV9zdGFja1BhcmVudEJvdW5kc0lu
ZGV4LCBydWxlU2V0KSk7CisgICAgaWYgKFNjb3BlZFJ1bGVEYXRhKiBydWxlRGF0YSA9IHNjb3Bl
ZFJ1bGVEYXRhRm9yKHNjb3BlKSkKKyAgICAgICAgbV9zdGFja0hlYWQgPSBydWxlRGF0YTsKICAg
ICBtX3N0YWNrUGFyZW50ID0gc2NvcGU7CiB9CiAKQEAgLTE0MiwxOCArMTg1LDQ4IEBAIHZvaWQg
U3R5bGVTY29wZVJlc29sdmVyOjpwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAg
ICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYg
aXQgaXMgY29uc2lzdGVudC4KICAgICBpZiAoc3RhY2tJc0NvbnNpc3RlbnQoc2NvcGUpKSB7Ci0g
ICAgICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkgJiYgbV9zdGFjay5sYXN0KCkubV9zY29wZSA9
PSBzY29wZSkKLSAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAo
c2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhv
clN0eWxlcygpKQotICAgICAgICAgICAgLS1tX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisgICAg
ICAgIGlmIChtX3N0YWNrSGVhZCAmJiBtX3N0YWNrSGVhZC0+bV9zY29wZSA9PSBtX3N0YWNrUGFy
ZW50KQorICAgICAgICAgICAgbV9zdGFja0hlYWQgPSBtX3N0YWNrSGVhZC0+bV9wYXJlbnRSdWxl
RGF0YTsKICAgICAgICAgbV9zdGFja1BhcmVudCA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCk7
CiAgICAgfQogfQogCitpbmxpbmUgU3R5bGVTY29wZVJlc29sdmVyOjpTY29wZWRSdWxlRGF0YSog
U3R5bGVTY29wZVJlc29sdmVyOjpwYXJlbnRSdWxlRGF0YShTY29wZWRSdWxlRGF0YSogcnVsZURh
dGEpCit7CisgICAgaWYgKCFydWxlRGF0YS0+bV9zY29wZS0+aXNTaGFkb3dSb290KCkpCisgICAg
ICAgIHJldHVybiBydWxlRGF0YS0+bV9wYXJlbnRSdWxlRGF0YTsKKyAgICByZXR1cm4gdG9TaGFk
b3dSb290KHJ1bGVEYXRhLT5tX3Njb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSA/IHJ1bGVEYXRh
LT5tX3BhcmVudFJ1bGVEYXRhIDogMDsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmZp
bmRNYXRjaGVkU2NvcGVkQXV0aG9yUnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmVjdG9y
PHN0ZDo6cGFpcjxjb25zdCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+ID4mIG1hdGNoZWRSdWxl
cykKK3sKKyAgICBpZiAoIWhhc1Njb3BlZFN0eWxlcygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCFlbnN1cmVTdGFja0NvbnNpc3RlbmN5KGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5
QXV0aG9yU3R5bGVzKCkgfHwgIWVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgaWYgKGVs
ZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIGZvciAoU2NvcGVkUnVsZURhdGEqIHJ1
bGVEYXRhID0gbV9zdGFja0hlYWQ7IHJ1bGVEYXRhOyBydWxlRGF0YSA9IHBhcmVudFJ1bGVEYXRh
KHJ1bGVEYXRhKSkKKyAgICAgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gcnVsZURhdGEt
Pm1fcnVsZVNldC5nZXQoKSkKKyAgICAgICAgICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHBh
aXI8Y29uc3QgQ29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPihydWxlRGF0YS0+bV9zY29wZSwgcnVs
ZVNldCkpOworCisgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU2NvcGVkUnVsZURhdGEqIHJ1bGVEYXRhID0gbV9zdGFja0hlYWQ7CisgICAgZm9yICg7
IHJ1bGVEYXRhICYmIHJ1bGVEYXRhLT5tX3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOyBydWxlRGF0
YSA9IHJ1bGVEYXRhLT5tX3BhcmVudFJ1bGVEYXRhKSB7IH0KKyAgICBmb3IgKDsgcnVsZURhdGE7
IHJ1bGVEYXRhID0gcnVsZURhdGEtPm1fcGFyZW50UnVsZURhdGEpIHsKKyAgICAgICAgQVNTRVJU
KHJ1bGVEYXRhLT5tX3J1bGVTZXQuZ2V0KCkpOworICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5k
KHBhaXI8Y29uc3QgQ29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPihydWxlRGF0YS0+bV9zY29wZSwg
cnVsZURhdGEtPm1fcnVsZVNldC5nZXQoKSkpOworICAgIH0KK30KKwogdm9pZCBTdHlsZVNjb3Bl
UmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcykKIHsK
LSAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMu
YmVnaW4oKTsgaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGZlYXR1
cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOworICAgIGZvciAoU2NvcGVkUnVsZURhdGFN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9hdXRob3JT
dHlsZXMuZW5kKCk7ICsraXQpCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gaXQtPnZh
bHVlLT5tX3J1bGVTZXQuZ2V0KCkpCisgICAgICAgICAgICBmZWF0dXJlcy5hZGQocnVsZVNldC0+
ZmVhdHVyZXMoKSk7CiB9CiAKIGlubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVu
c3VyZUF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKQEAgLTIz
OSwxMCArMzEyLDggQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGMKIHsKICAgICBNZW1vcnlDbGFz
c0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNT
Uyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZXMpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fc3RhY2spOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXRIb3N0UnVsZXMpOwogfQogCiB9
Ci0KICNlbmRpZiAvLyBFTkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oCmluZGV4IDNiZTNmZjRmNzBjNzM3NWJkMDE0MjZhMDBiYTQyNDEyODQ2
MmNjMGUuLmIzMGYyOTVlODA2ZThjZDczOTQ4ODkyZTlkNzBjZTM3ODgxYWM4YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5k
ZWYgU3R5bGVTY29wZVJlc29sdmVyX2gKICNkZWZpbmUgU3R5bGVTY29wZVJlc29sdmVyX2gKIAor
I2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTcwLDExICs3
MSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTY29wZWRTdHlsZXMoKSBjb25zdCB7IHJldHVy
biAhbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpOyB9CiAgICAgUnVsZVNldCogZW5zdXJlUnVsZVNl
dEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CiAgICAgYm9vbCBlbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KENvbnRhaW5lck5vZGUqKTsKLSAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25z
dCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQotICAgIGNvbnN0IFN0YWNrRnJhbWUmIHN0YWNr
RnJhbWVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5hdChpbmRleCk7
IH0KLSAgICBib29sIG1hdGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkg
Y29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQ
YXJlbnRCb3VuZHNJbmRleDsgfQogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1
cmVTZXQmKTsKIAorICAgIHZvaWQgZmluZE1hdGNoZWRTY29wZWRBdXRob3JSdWxlcyhjb25zdCBF
bGVtZW50KiwgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+
ID4mIG1hdGNoZWRSdWxlcyk7CisKICAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3Qq
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKTsKICAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoY29u
c3QgRWxlbWVudCopOwogICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoY29uc3QgRWxlbWVudCosIFZl
Y3RvcjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcyk7CkBAIC04MiwyMSArODIsMzUgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIHN0cnVjdCBTY29wZWRSdWxlRGF0YSB7CisgICAgICAgIGNvbnN0IENv
bnRhaW5lck5vZGUqIG1fc2NvcGU7CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBtX3J1bGVTZXQ7
CisgICAgICAgIFNjb3BlZFJ1bGVEYXRhKiBtX3BhcmVudFJ1bGVEYXRhOworCisgICAgICAgIFNj
b3BlZFJ1bGVEYXRhKCkgOiBtX3Njb3BlKDApLCBtX3BhcmVudFJ1bGVEYXRhKDApIHsgfQorICAg
ICAgICBTY29wZWRSdWxlRGF0YShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgOiBtX3Njb3Bl
KHNjb3BlKSwgbV9wYXJlbnRSdWxlRGF0YSgwKSB7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNjb3BlZFJ1bGVEYXRhPiBjcmVhdGUoY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY29wZWRSdWxlRGF0YShzY29wZSkpOyB9Cisg
ICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxT
Y29wZWRSdWxlRGF0YT4gPiBTY29wZWRSdWxlRGF0YU1hcDsKKyAgICBTY29wZWRSdWxlRGF0YU1h
cCBtX2F1dGhvclN0eWxlczsKKwogICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3IoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpIGNvbnN0OworICAgIHN0cnVjdCBTY29wZWRSdWxlRGF0YSogc2NvcGVk
UnVsZURhdGFGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIHN0cnVjdCBTY29w
ZWRSdWxlRGF0YSogYWRkU2NvcGVkUnVsZURhdGEoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IGJvb2wgbmVlZFJ1bGVTZXQsIGJvb2wmIGlzTmV3RW50cnkpOworICAgIHZvaWQgc2V0dXBTY29w
ZWRSdWxlRGF0YVRyZWUoU2NvcGVkUnVsZURhdGEqKTsKKyAgICBTY29wZWRSdWxlRGF0YSogcGFy
ZW50UnVsZURhdGEoU2NvcGVkUnVsZURhdGEqKTsKKwogICAgIHZvaWQgc2V0dXBTdGFjayhjb25z
dCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250
YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9z
dGFja1BhcmVudDsgfQorCiAgICAgUnVsZVNldCogZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25z
dCBTaGFkb3dSb290Kik7CiAgICAgUnVsZVNldCogYXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFk
b3dSb290KikgY29uc3Q7CiAKLSAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXV0aG9yU3R5bGVzOwot
Ci0gICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNrKSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3Bp
bmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdpdGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkK
LSAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJlZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29s
dXRpb24uCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IG1fc3RhY2s7CisgICAgU2NvcGVkUnVsZURh
dGEqIG1fc3RhY2tIZWFkOwogICAgIC8vIEVsZW1lbnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVt
ZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxlbWVudFN0YWNrLgogICAgIC8vIFRoaXMgaXMg
dXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVu
dCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBj
b25zdCBDb250YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OwotICAgIGludCBtX3N0YWNrUGFyZW50
Qm91bmRzSW5kZXg7CiAKICAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXRIb3N0UnVsZXM7CiB9OwpA
QCAtMTA2LDcgKzEyMCw3IEBAIGlubGluZSBib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJl
U3RhY2tDb25zaXN0ZW5jeShDb250YWluZXJOb2RlKiBwYXJlbnQpCiAgICAgLy8gTWF0Y2ggc2Nv
cGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAo
cmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KICAgICBpZiAoIXN0YWNrSXNDb25z
aXN0ZW50KHBhcmVudCkpCiAgICAgICAgIHNldHVwU3RhY2socGFyZW50KTsKLSAgICByZXR1cm4g
IW1fc3RhY2suaXNFbXB0eSgpOworICAgIHJldHVybiBtX3N0YWNrSGVhZDsKIH0KIAogI2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172719</attachid>
            <date>2012-11-06 22:05:55 -0800</date>
            <delta_ts>2012-11-06 22:34:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-101312-20121107150407.patch</filename>
            <type>text/plain</type>
            <size>16379</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE2YWU5MzQ5NmQzNjA0
YmVkMGNmYjEwNTBhNzk2ZDk5OTNhYzExMi4uOGI0YWVlNTc2ODA3OWIwM2E0ZGUxNTdhZmY4YzVj
Yzg3ZmEzMjg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTA1ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICA8c3R5bGUgc2NvcGVk
PjogcmVmYWN0b3IgU3R5bGVTY29wZVJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgb2xkIGNvZGUgYWx3YXlzIGdvZXMgdXAgYSBET00g
dHJlZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50IHRvCisgICAgICAgIGZpbmQgYWxsIG1hdGNoZWQg
c2NvcGVkIHN0eWxlcy4gSG93ZXZlciBudW1iZXIgb2Ygc2NvcGluZyBub2RlcyBpcworICAgICAg
ICBtdWNoIGZld2VyZXIgdGhhbiBudW1iZXIgb2Ygbm9kZXMuIFNvIGl0IHdvdWxkIGJlIGJldHRl
ciB0byBsb29rIHVwCisgICAgICAgIHNvbWV0aGluZyBsaWtlIGEgc2NvcGVkIHRyZWUgdGhhbiBs
b29raW5nIHVwIGFuY2VzdG9yIG5vZGVzLiBXZSBjYW4KKyAgICAgICAgZXhwZWN0IHRoZSBzY29w
ZWQgdHJlZSBpcyB2ZXJ5IHNwYXJzZSB0cmVlIGNvbXBhcmluZyB3aXRoIGEgRE9NIHRyZWUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMganVzdCBmb3IgcmVm
YWN0b3JpbmcuIE5vIG5ldworICAgICAgICBmZWF0dXJlcyBhcmUgYWRkZWQuCisKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U3R5bGVTY29w
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cnVsZVNl
dEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlZFJ1bGVE
YXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjphZGRTY29wZWRSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OnNldHVwU2NvcGVkUnVsZURhdGFUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNldHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTY29wZVJlc29sdmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6cG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cGFyZW50
UnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpmaW5kTWF0
Y2hlZFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5oOgorICAgICAgICAoU3R5bGVTY29wZVJlc29sdmVyKToKKyAgICAgICAgKFNjb3BlZFJ1
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U2NvcGVkUnVs
ZURhdGE6OlNjb3BlZFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6U2NvcGVkUnVsZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kpOgorCiAyMDEyLTExLTA2ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIHdoaWNo
IHN0b3JhZ2UgY29va2llIGphciBmdW5jdGlvbnMgdXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggN2NjZGZmZmQ3MDY0NWI2MWYxNmM2YzcxNGY0Y2MyZTA3NDFmMGNlNy4u
NWExMWUyNjhkMmRhMDllNTQwZWM2ZWMwZWRjOWM0YTcwYzY1MWU3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNzQ4LDMyICs3NDgsMTMgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHQKIAogICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMp
OwogCi0gICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNp
bmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNp
c3RlbnQpLgotICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5
KG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYXBwbHlBdXRob3JTdHls
ZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwotICAgIGJv
b2wgZG9jdW1lbnRTY29wZSA9IHRydWU7Ci0gICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29w
ZVJlc29sdmVyLT5zdGFja1NpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Nv
cGVTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFja0Zy
YW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwotICAgICAgICBk
b2N1bWVudFNjb3BlID0gZG9jdW1lbnRTY29wZSAmJiAhZnJhbWUubV9zY29wZS0+aXNJblNoYWRv
d1RyZWUoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50U2NvcGUpIHsKLSAgICAgICAgICAgIGlmICgh
YXBwbHlBdXRob3JTdHlsZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+bWF0Y2hlc1N0eWxlQm91
bmRzKGZyYW1lKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICAgICAKLSAgICAgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMsIGZy
YW1lLm1fc2NvcGUpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhmcmFtZS5tX3J1bGVT
ZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlLCBvcHRpb25zKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
ZnJhbWUubV9ydWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25z
dCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+ID4gbWF0Y2hlZFJ1bGVzOworICAgIG1fc2NvcGVS
ZXNvbHZlci0+ZmluZE1hdGNoZWRTY29wZWRBdXRob3JSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRS
dWxlcyk7CisgICAgZm9yIChpbnQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcywg
bWF0Y2hlZFJ1bGVzW2ldLmZpcnN0KTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0
Y2hlZFJ1bGVzW2ldLnNlY29uZCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihtYXRjaGVkUnVsZXNbaV0uc2Vjb25kLCByZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAg
ICAgfQotCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJB
TShpbmNsdWRlRW1wdHlSdWxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTY29wZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2
ZXIuY3BwCmluZGV4IDVmZjJiM2UwYjExNTQ5OTQ0N2UyMWM4NmY1OGY2NDYxMzAxY2YwZmQuLmE0
MjU1YjQ2YzM4OTNhOGU2Y2JjNTQ1NTFiZGZhNTMxNDc5NWU2NjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBAIC00Niw4ICs0Niw4IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFN0eWxlU2NvcGVSZXNvbHZlcjo6U3R5bGVTY29wZVJlc29sdmVyKCkKLSAg
ICA6IG1fc3RhY2tQYXJlbnQoMCkKLSAgICAsIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCgwKQor
ICAgIDogbV9zdGFja0hlYWQoMCkKKyAgICAsIG1fc3RhY2tQYXJlbnQoMCkKIHsKIH0KIApAQCAt
ODEsMzYgKzgxLDg1IEBAIGlubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJ1bGVT
ZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzY29w
ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2Nv
cGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNj
b3BlKTsKLSAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUu
Z2V0KCkgOiAwOyAKKyAgICBTY29wZWRSdWxlRGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHls
ZXMuZW5kKCkgPyBpdC0+dmFsdWUtPm1fcnVsZVNldC5nZXQoKSA6IDA7IAogfQogCi1SdWxlU2V0
KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpCitpbmxpbmUgU3R5bGVTY29wZVJlc29sdmVyOjpTY29wZWRSdWxlRGF0YSogU3R5
bGVTY29wZVJlc29sdmVyOjpzY29wZWRSdWxlRGF0YUZvcihjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSkKK3sKKyAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpICYmICFz
Y29wZS0+aXNTaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFNjb3BlZFJ1bGVE
YXRhTWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOworICAgIHJl
dHVybiBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT52YWx1ZS5nZXQoKSA6IDA7Cit9
CisKK1N0eWxlU2NvcGVSZXNvbHZlcjo6U2NvcGVkUnVsZURhdGEqIFN0eWxlU2NvcGVSZXNvbHZl
cjo6YWRkU2NvcGVkUnVsZURhdGEoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGJvb2wgbmVl
ZFJ1bGVTZXQsIGJvb2wmIGlzTmV3RW50cnkpCiB7Ci0gICAgU2NvcGVkUnVsZVNldE1hcDo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IG1fYXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7Cisg
ICAgU2NvcGVkUnVsZURhdGFNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F1dGhvclN0eWxl
cy5hZGQoc2NvcGUsIG51bGxwdHIpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2NvcGVkUnVsZURhdGE6OmNyZWF0ZShz
Y29wZSk7CisgICAgaXNOZXdFbnRyeSA9IGFkZFJlc3VsdC5pc05ld0VudHJ5OworCisgICAgaWYg
KG5lZWRSdWxlU2V0ICYmICFhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tX3J1bGVTZXQpCisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fcnVsZVNldCA9IFJ1bGVTZXQ6OmNy
ZWF0ZSgpOwogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQog
Cit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTY29wZWRSdWxlRGF0YVRyZWUoU2NvcGVk
UnVsZURhdGEqIHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICBBU1NFUlQodGFy
Z2V0LT5tX3Njb3BlKTsKKworICAgIC8vIEJlIGNhcmVmdWwhISBuZWVkIHRvIGNoZWNrIFNDT1BF
RCBUUkVFLiBUaGlzIGNvZGUgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBvcmRlciBvZiBzY29wZXMu
CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogZSA9IHRhcmdldC0+bV9zY29wZS0+cGFyZW50T3JI
b3N0Tm9kZSgpOworICAgIGZvciAoOyBlOyBlID0gZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChTY29wZWRSdWxlRGF0YSogcnVsZURhdGEgPSBzY29wZWRSdWxlRGF0YUZvcihl
KSkgeworICAgICAgICAgICAgdGFyZ2V0LT5tX3BhcmVudFJ1bGVEYXRhID0gcnVsZURhdGE7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGUtPmlzU2hhZG93Um9v
dCgpKSB7CisgICAgICAgICAgICBib29sIGR1bW15OworICAgICAgICAgICAgU2NvcGVkUnVsZURh
dGEqIHJ1bGVEYXRhID0gYWRkU2NvcGVkUnVsZURhdGEoZSwgZmFsc2UsIGR1bW15KTsKKyAgICAg
ICAgICAgIHRhcmdldC0+bV9wYXJlbnRSdWxlRGF0YSA9IHJ1bGVEYXRhOworICAgICAgICAgICAg
c2V0dXBTY29wZWRSdWxlRGF0YVRyZWUocnVsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorfQorCitSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3Vy
ZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgYm9vbCBpc05l
d0VudHJ5OworICAgIFNjb3BlZFJ1bGVEYXRhKiBydWxlRGF0YSA9IGFkZFNjb3BlZFJ1bGVEYXRh
KHNjb3BlLCB0cnVlLCBpc05ld0VudHJ5KTsKKyAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAg
c2V0dXBTY29wZWRSdWxlRGF0YVRyZWUocnVsZURhdGEpOworICAgIHJldHVybiBydWxlRGF0YS0+
bV9ydWxlU2V0LmdldCgpOworfQorCiB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTdGFj
ayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpCiB7CiAgICAgLy8gVGhlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2Vk
IGFueXdoZXJlLgogICAgIEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKIAotICAg
IG1fc3RhY2suc2hyaW5rKDApOwotICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsK
KyAgICBtX3N0YWNrSGVhZCA9IDA7CiAgICAgZm9yIChjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSA9IHBhcmVudDsgc2NvcGU7IHNjb3BlID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewot
ICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29wZSk7Ci0gICAgICAgIGlm
IChydWxlU2V0KQotICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoU3RhY2tGcmFtZShzY29wZSwg
YXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgICAgICBpZiAoc2NvcGUtPmlz
U2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygp
KQotICAgICAgICAgICAgLS1hdXRob3JTdHlsZUJvdW5kc0luZGV4OworICAgICAgICBTY29wZWRS
dWxlRGF0YSogcnVsZURhdGEgPSBzY29wZWRSdWxlRGF0YUZvcihzY29wZSk7CisgICAgICAgIGlm
IChydWxlRGF0YSkgeworICAgICAgICAgICAgbV9zdGFja0hlYWQgPSBydWxlRGF0YTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290
KCkpIHsKKyAgICAgICAgICAgIGJvb2wgZHVtbXk7CisgICAgICAgICAgICAvLyBUbyBxdWlja2x5
IHNvbHZlIGFwcGx5LWF1dGhvci1zdHlsZXMgZmxhZywgY3JlYXRlIGFuIGVtcHR5CisgICAgICAg
ICAgICAvLyBTY29wZWRSdWxlRGF0YSBmb3IgYSBTaGFkb3dSb290LiBTbyB3ZSBjYW4gcmVseSBv
biBtX3N0YWNrSGVhZAorICAgICAgICAgICAgLy8gYW5kIHRyYXZlcnNlIG1fcGFyZW50UnVsZURh
dGEgdG8gc29sdmUgYXBwbHktYXV0aG9yLXN0eWxlcy4KKyAgICAgICAgICAgIG1fc3RhY2tIZWFk
ID0gYWRkU2NvcGVkUnVsZURhdGEoc2NvcGUsIGZhbHNlLCBkdW1teSk7CisgICAgICAgICAgICBz
ZXR1cFNjb3BlZFJ1bGVEYXRhVHJlZShtX3N0YWNrSGVhZCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgIH0KLQotICAgIG1fc3RhY2sucmV2ZXJzZSgpOwogICAgIG1fc3RhY2tQ
YXJlbnQgPSBwYXJlbnQ7Ci0gICAgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ID0gMDsKIH0KIAog
dm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQpAQCAtMTE4LDcgKzE2Nyw2IEBAIHZv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBj
b25zdCBDb250YWluZXJOb2RlKiBzCiAgICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRo
IHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBh
bnl3aGVyZS4KICAgICBpZiAobV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFT
U0VSVCghbV9zdGFja1BhcmVudCk7Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyOCwxMyArMTc2LDggQEAgdm9pZCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHMKICAgICAgICAgc2V0dXBTdGFjayhzY29wZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jv
b3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAgICAgICArK21fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleDsKLSAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0
aGUgc3RhY2suCi0gICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOwotICAg
IGlmIChydWxlU2V0KQotICAgICAgICBtX3N0YWNrLmFwcGVuZChTdGFja0ZyYW1lKHNjb3BlLCBt
X3N0YWNrUGFyZW50Qm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKKyAgICBpZiAoU2NvcGVkUnVsZURh
dGEqIHJ1bGVEYXRhID0gc2NvcGVkUnVsZURhdGFGb3Ioc2NvcGUpKQorICAgICAgICBtX3N0YWNr
SGVhZCA9IHJ1bGVEYXRhOwogICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZTsKIH0KIApAQCAtMTQy
LDE4ICsxODUsNDggQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKIHsKICAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3Bp
bmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgogICAgIGlmIChzdGFja0lzQ29u
c2lzdGVudChzY29wZSkpIHsKLSAgICAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHkoKSAmJiBtX3N0
YWNrLmxhc3QoKS5tX3Njb3BlID09IHNjb3BlKQotICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9v
dChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICAgICAtLW1fc3RhY2tQYXJl
bnRCb3VuZHNJbmRleDsKKyAgICAgICAgaWYgKG1fc3RhY2tIZWFkICYmIG1fc3RhY2tIZWFkLT5t
X3Njb3BlID09IG1fc3RhY2tQYXJlbnQpCisgICAgICAgICAgICBtX3N0YWNrSGVhZCA9IG1fc3Rh
Y2tIZWFkLT5tX3BhcmVudFJ1bGVEYXRhOwogICAgICAgICBtX3N0YWNrUGFyZW50ID0gc2NvcGUt
PnBhcmVudE9ySG9zdE5vZGUoKTsKICAgICB9CiB9CiAKK2lubGluZSBTdHlsZVNjb3BlUmVzb2x2
ZXI6OlNjb3BlZFJ1bGVEYXRhKiBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBhcmVudFJ1bGVEYXRhKFNj
b3BlZFJ1bGVEYXRhKiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIXJ1bGVEYXRhLT5tX3Njb3BlLT5p
c1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIHJ1bGVEYXRhLT5tX3BhcmVudFJ1bGVEYXRh
OworICAgIHJldHVybiB0b1NoYWRvd1Jvb3QocnVsZURhdGEtPm1fc2NvcGUpLT5hcHBseUF1dGhv
clN0eWxlcygpID8gcnVsZURhdGEtPm1fcGFyZW50UnVsZURhdGEgOiAwOworfQorCit2b2lkIFN0
eWxlU2NvcGVSZXNvbHZlcjo6ZmluZE1hdGNoZWRTY29wZWRBdXRob3JSdWxlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IENvbnRhaW5lck5vZGUqLCBSdWxl
U2V0Kj4gPiYgbWF0Y2hlZFJ1bGVzKQoreworICAgIGlmICghaGFzU2NvcGVkU3R5bGVzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWVuc3VyZVN0YWNrQ29uc2lzdGVuY3koZWxlbWVudCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBlbGVtZW50
LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKSB8fCAhZWxlbWVudC0+aXNJblNoYWRv
d1RyZWUoKTsKKyAgICBpZiAoZWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgZm9y
IChTY29wZWRSdWxlRGF0YSogcnVsZURhdGEgPSBtX3N0YWNrSGVhZDsgcnVsZURhdGE7IHJ1bGVE
YXRhID0gcGFyZW50UnVsZURhdGEocnVsZURhdGEpKQorICAgICAgICAgICAgaWYgKFJ1bGVTZXQq
IHJ1bGVTZXQgPSBydWxlRGF0YS0+bV9ydWxlU2V0LmdldCgpKQorICAgICAgICAgICAgICAgIG1h
dGNoZWRSdWxlcy5hcHBlbmQocGFpcjxjb25zdCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+KHJ1
bGVEYXRhLT5tX3Njb3BlLCBydWxlU2V0KSk7CisKKyAgICBpZiAoIWFwcGx5QXV0aG9yU3R5bGVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBTY29wZWRSdWxlRGF0YSogcnVsZURhdGEgPSBtX3N0
YWNrSGVhZDsKKyAgICBmb3IgKDsgcnVsZURhdGEgJiYgcnVsZURhdGEtPm1fc2NvcGUtPmlzSW5T
aGFkb3dUcmVlKCk7IHJ1bGVEYXRhID0gcnVsZURhdGEtPm1fcGFyZW50UnVsZURhdGEpIHsgfQor
ICAgIGZvciAoOyBydWxlRGF0YTsgcnVsZURhdGEgPSBydWxlRGF0YS0+bV9wYXJlbnRSdWxlRGF0
YSkgeworICAgICAgICBBU1NFUlQocnVsZURhdGEtPm1fcnVsZVNldC5nZXQoKSk7CisgICAgICAg
IG1hdGNoZWRSdWxlcy5hcHBlbmQocGFpcjxjb25zdCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+
KHJ1bGVEYXRhLT5tX3Njb3BlLCBydWxlRGF0YS0+bV9ydWxlU2V0LmdldCgpKSk7CisgICAgfQor
fQorCiB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1
cmVTZXQmIGZlYXR1cmVzKQogewotICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2F1dGhvclN0eWxlcy5iZWdpbigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT52YWx1ZS0+ZmVhdHVyZXMoKSk7CisgICAg
Zm9yIChTY29wZWRSdWxlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5iZWdp
bigpOyBpdCAhPSBtX2F1dGhvclN0eWxlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgaWYgKFJ1bGVT
ZXQqIHJ1bGVTZXQgPSBpdC0+dmFsdWUtPm1fcnVsZVNldC5nZXQoKSkKKyAgICAgICAgICAgIGZl
YXR1cmVzLmFkZChydWxlU2V0LT5mZWF0dXJlcygpKTsKIH0KIAogaW5saW5lIFJ1bGVTZXQqIFN0
eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290
KiBzaGFkb3dSb290KQpAQCAtMjM5LDEwICszMTIsOCBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZl
cjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
YwogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdl
YkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxl
cyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdGFjayk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9h
dEhvc3RSdWxlcyk7CiB9CiAKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShTVFlMRV9TQ09QRUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKaW5kZXggM2JlM2ZmNGY3MGM3Mzc1
YmQwMTQyNmEwMGJhNDI0MTI4NDYyY2MwZS4uYjMwZjI5NWU4MDZlOGNkNzM5NDg4OTJlOWQ3MGNl
Mzc4ODFhYzhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAt
MjcsNiArMjcsNyBAQAogI2lmbmRlZiBTdHlsZVNjb3BlUmVzb2x2ZXJfaAogI2RlZmluZSBTdHls
ZVNjb3BlUmVzb2x2ZXJfaAogCisjaW5jbHVkZSAiUnVsZVNldC5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgpAQCAtNzAsMTEgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Njb3BlZFN0
eWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX2F1dGhvclN0eWxlcy5pc0VtcHR5KCk7IH0KICAgICBS
dWxlU2V0KiBlbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKICAg
ICBib29sIGVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFpbmVyTm9kZSopOwotICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9Ci0gICAgY29u
c3QgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3N0YWNrLmF0KGluZGV4KTsgfQotICAgIGJvb2wgbWF0Y2hlc1N0eWxlQm91bmRzKGNvbnN0
IFN0YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhvclN0eWxlQm91
bmRzSW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CiAgICAgdm9pZCBjb2xsZWN0
RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYpOwogCisgICAgdm9pZCBmaW5kTWF0Y2hlZFNjb3Bl
ZEF1dGhvclJ1bGVzKGNvbnN0IEVsZW1lbnQqLCBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IENvbnRh
aW5lck5vZGUqLCBSdWxlU2V0Kj4gPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAgIHZvaWQgYWRkSG9z
dFJ1bGUoU3R5bGVSdWxlSG9zdCosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwogICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBFbGVtZW50Kik7CiAgICAgdm9pZCBtYXRjaEhvc3RSdWxl
cyhjb25zdCBFbGVtZW50KiwgVmVjdG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKQEAgLTgy
LDIxICs4MiwzNSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgc3RydWN0IFNjb3BlZFJ1bGVEYXRh
IHsKKyAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAgICAgICAgT3duUHRy
PFJ1bGVTZXQ+IG1fcnVsZVNldDsKKyAgICAgICAgU2NvcGVkUnVsZURhdGEqIG1fcGFyZW50UnVs
ZURhdGE7CisKKyAgICAgICAgU2NvcGVkUnVsZURhdGEoKSA6IG1fc2NvcGUoMCksIG1fcGFyZW50
UnVsZURhdGEoMCkgeyB9CisgICAgICAgIFNjb3BlZFJ1bGVEYXRhKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKSA6IG1fc2NvcGUoc2NvcGUpLCBtX3BhcmVudFJ1bGVEYXRhKDApIHsgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8U2NvcGVkUnVsZURhdGE+IGNyZWF0ZShj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNjb3BlZFJ1
bGVEYXRhKHNjb3BlKSk7IH0KKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250
YWluZXJOb2RlKiwgT3duUHRyPFNjb3BlZFJ1bGVEYXRhPiA+IFNjb3BlZFJ1bGVEYXRhTWFwOwor
ICAgIFNjb3BlZFJ1bGVEYXRhTWFwIG1fYXV0aG9yU3R5bGVzOworCiAgICAgUnVsZVNldCogcnVs
ZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3Q7CisgICAgc3RydWN0IFNj
b3BlZFJ1bGVEYXRhKiBzY29wZWRSdWxlRGF0YUZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSk7CisgICAgc3RydWN0IFNjb3BlZFJ1bGVEYXRhKiBhZGRTY29wZWRSdWxlRGF0YShjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSwgYm9vbCBuZWVkUnVsZVNldCwgYm9vbCYgaXNOZXdFbnRyeSk7
CisgICAgdm9pZCBzZXR1cFNjb3BlZFJ1bGVEYXRhVHJlZShTY29wZWRSdWxlRGF0YSopOworICAg
IFNjb3BlZFJ1bGVEYXRhKiBwYXJlbnRSdWxlRGF0YShTY29wZWRSdWxlRGF0YSopOworCiAgICAg
dm9pZCBzZXR1cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKICAgICBib29sIHN0YWNrSXND
b25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFy
ZW50ICYmIHBhcmVudCA9PSBtX3N0YWNrUGFyZW50OyB9CisKICAgICBSdWxlU2V0KiBlbnN1cmVB
dEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICBSdWxlU2V0KiBhdEhvc3RS
dWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKSBjb25zdDsKIAotICAgIFNjb3BlZFJ1bGVTZXRN
YXAgbV9hdXRob3JTdHlsZXM7Ci0KLSAgICAvLyBWZWN0b3IgKHVzZWQgYXMgc3RhY2spIHRoYXQg
a2VlcHMgdHJhY2sgb2Ygc2NvcGluZyBlbGVtZW50cyAoaS5lLiwgZWxlbWVudHMgd2l0aCBhIDxz
dHlsZSBzY29wZWQ+IGNoaWxkKQotICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyB0cmVlIGl0ZXJh
dGlvbiBmb3Igc3R5bGUgcmVzb2x1dGlvbi4KLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gbV9zdGFj
azsKKyAgICBTY29wZWRSdWxlRGF0YSogbV9zdGFja0hlYWQ7CiAgICAgLy8gRWxlbWVudCBsYXN0
IHNlZW4gYXMgcGFyZW50IGVsZW1lbnQgd2hlbiB1cGRhdGluZyBtX3Njb3BpbmdFbGVtZW50U3Rh
Y2suCiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1l
bnRTdGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjpt
X3BhcmVudFN0YWNrLgogICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc3RhY2tQYXJlbnQ7Ci0g
ICAgaW50IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKIAogICAgIFNjb3BlZFJ1bGVTZXRNYXAg
bV9hdEhvc3RSdWxlczsKIH07CkBAIC0xMDYsNyArMTIwLDcgQEAgaW5saW5lIGJvb2wgU3R5bGVT
Y29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVu
dCkKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNj
b3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgog
ICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKICAgICAgICAgc2V0dXBTdGFjayhw
YXJlbnQpOwotICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fc3Rh
Y2tIZWFkOwogfQogCiAjZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172722</attachid>
            <date>2012-11-06 22:34:49 -0800</date>
            <delta_ts>2012-11-11 19:03:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-101312-20121107153300.patch</filename>
            <type>text/plain</type>
            <size>17198</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE2YWU5MzQ5NmQzNjA0
YmVkMGNmYjEwNTBhNzk2ZDk5OTNhYzExMi4uYmZkODI4M2RmMDZlMGI3MzU5ZGJlNmYwZWFlZGVm
Y2YxMTQ0Mjc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTA2ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICA8c3R5bGUgc2NvcGVk
PjogcmVmYWN0b3IgU3R5bGVTY29wZVJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgb2xkIGNvZGUgYWx3YXlzIGdvZXMgdXAgYSBET00g
dHJlZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50IHRvCisgICAgICAgIGZpbmQgYWxsIG1hdGNoZWQg
c2NvcGVkIHN0eWxlcy4gSG93ZXZlciBudW1iZXIgb2Ygc2NvcGluZyBub2RlcyBpcworICAgICAg
ICBtdWNoIGZld2VyZXIgdGhhbiBudW1iZXIgb2Ygbm9kZXMuIFNvIGl0IHdvdWxkIGJlIGJldHRl
ciB0byBsb29rIHVwCisgICAgICAgIHNvbWV0aGluZyBsaWtlIGEgc2NvcGVkIHRyZWUgdGhhbiBs
b29raW5nIHVwIGFuY2VzdG9yIG5vZGVzLiBXZSBjYW4KKyAgICAgICAgZXhwZWN0IHRoZSBzY29w
ZWQgdHJlZSBpcyB2ZXJ5IHNwYXJzZSB0cmVlIGNvbXBhcmluZyB3aXRoIGEgRE9NIHRyZWUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMganVzdCBmb3IgcmVm
YWN0b3JpbmcuIE5vIG5ldworICAgICAgICBmZWF0dXJlcyBhcmUgYWRkZWQuCisKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U3R5bGVTY29w
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cnVsZVNl
dEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlZFJ1bGVE
YXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjphZGRTY29wZWRSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OnNldHVwU2NvcGVkUnVsZURhdGFUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlUnVsZVNldEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnNldHVwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTY29wZVJlc29sdmVyOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6cG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cGFyZW50
UnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpmaW5kTWF0
Y2hlZFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNv
bHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5oOgorICAgICAgICAoU2NvcGVkUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nv
cGVkUnVsZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlRGF0YTo6
c2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZURhdGE6OnJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZURhdGE6OnByZXBhcmVFbXB0eVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZURhdGE6OnNldFBhcmVudFJ1bGVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVEYXRhOjpwYXJlbnRSdWxlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY29wZWRSdWxlRGF0YTo6U2NvcGVkUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChTdHlsZVNjb3BlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KToKKwogMjAxMi0xMS0wNiAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCB3
aGljaCBzdG9yYWdlIGNvb2tpZSBqYXIgZnVuY3Rpb25zIHVzZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDdjY2RmZmZkNzA2NDViNjFmMTZjNmM3MTRmNGNjMmUwNzQxZjBj
ZTcuLjVhMTFlMjY4ZDJkYTA5ZTU0MGVjNmVjMGVkYzljNGE3MGM2NTFlNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTc0OCwzMiArNzQ4LDEzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0CiAKICAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKIAotICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2
ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5j
b25zaXN0ZW50KS4KLSAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0
ZW5jeShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGFwcGx5QXV0aG9y
U3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKLSAg
ICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwotICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1f
c2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3Rh
Y2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKLSAgICAg
ICAgZG9jdW1lbnRTY29wZSA9IGRvY3VtZW50U2NvcGUgJiYgIWZyYW1lLm1fc2NvcGUtPmlzSW5T
aGFkb3dUcmVlKCk7Ci0gICAgICAgIGlmIChkb2N1bWVudFNjb3BlKSB7Ci0gICAgICAgICAgICBp
ZiAoIWFwcGx5QXV0aG9yU3R5bGVzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHls
ZUJvdW5kcyhmcmFtZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgCi0gICAgICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVz
LCBmcmFtZS5tX3Njb3BlKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9y
dWxlU2V0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgb3B0aW9ucyk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Y29uc3QgQ29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPiA+IG1hdGNoZWRSdWxlczsKKyAgICBtX3Nj
b3BlUmVzb2x2ZXItPmZpbmRNYXRjaGVkU2NvcGVkQXV0aG9yUnVsZXMobV9lbGVtZW50LCBtYXRj
aGVkUnVsZXMpOworICAgIGZvciAoaW50IGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVs
ZXMsIG1hdGNoZWRSdWxlc1tpXS5maXJzdCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KG1hdGNoZWRSdWxlc1tpXS5zZWNvbmQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hlZFJ1bGVzW2ldLnNlY29uZCwgcmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMp
OwogICAgIH0KLQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURf
UEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJl
c29sdmVyLmNwcAppbmRleCA1ZmYyYjNlMGIxMTU0OTk0NDdlMjFjODZmNThmNjQ2MTMwMWNmMGZk
Li43ZDA5NDRkMmNlY2UwOWJiNGE5MjE0YWUzYTk3NmJkY2M0ZmMzNmI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAtNDYsOCArNDYsOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0eWxlU2NvcGVSZXNvbHZlcigp
Ci0gICAgOiBtX3N0YWNrUGFyZW50KDApCi0gICAgLCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXgo
MCkKKyAgICA6IG1fc3RhY2tIZWFkKDApCisgICAgLCBtX3N0YWNrUGFyZW50KDApCiB7CiB9CiAK
QEAgLTgxLDM2ICs4MSw4NSBAQCBpbmxpbmUgUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjpy
dWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAogewogICAgIGlmICgh
c2NvcGUtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuZmlu
ZChzY29wZSk7Ci0gICAgcmV0dXJuIGl0ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnZh
bHVlLmdldCgpIDogMDsgCisgICAgU2NvcGVkUnVsZURhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hdXRob3JTdHlsZXMuZmluZChzY29wZSk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXV0aG9y
U3R5bGVzLmVuZCgpID8gaXQtPnZhbHVlLT5ydWxlU2V0KCkgOiAwOwogfQogCi1SdWxlU2V0KiBT
dHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCitpbmxpbmUgU2NvcGVkUnVsZURhdGEqIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVk
UnVsZURhdGFGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgaWYgKCFzY29w
ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSAmJiAhc2NvcGUtPmlzU2hhZG93Um9vdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBTY29wZWRSdWxlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHls
ZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCitTY29wZWRSdWxlRGF0YSogU3R5
bGVTY29wZVJlc29sdmVyOjphZGRTY29wZWRSdWxlRGF0YShjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSwgYm9vbCBuZWVkUnVsZVNldCwgYm9vbCYgaXNOZXdFbnRyeSkKIHsKLSAgICBTY29wZWRS
dWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3Bl
LCBudWxscHRyKTsKKyAgICBTY29wZWRSdWxlRGF0YU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9
IG1fYXV0aG9yU3R5bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6
Y3JlYXRlKCk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTY29wZWRSdWxl
RGF0YTo6Y3JlYXRlKHNjb3BlKTsKKyAgICBpc05ld0VudHJ5ID0gYWRkUmVzdWx0LmlzTmV3RW50
cnk7CisKKyAgICBpZiAobmVlZFJ1bGVTZXQgJiYgIWFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PnJ1bGVTZXQoKSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+cHJlcGFyZUVt
cHR5UnVsZVNldCgpOwogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwogfQogCit2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTY29wZWRSdWxlRGF0YVRyZWUo
U2NvcGVkUnVsZURhdGEqIHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICBBU1NF
UlQodGFyZ2V0LT5zY29wZSgpKTsKKworICAgIC8vIEJlIGNhcmVmdWwhISBuZWVkIHRvIGNoZWNr
IFNDT1BFRCBUUkVFLiBUaGlzIGNvZGUgZGVwZW5kcyBvbgorICAgIC8vIHRoZSBvcmRlciBvZiBz
Y29wZXMuCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogZSA9IHRhcmdldC0+c2NvcGUoKS0+cGFy
ZW50T3JIb3N0Tm9kZSgpOworICAgIGZvciAoOyBlOyBlID0gZS0+cGFyZW50T3JIb3N0Tm9kZSgp
KSB7CisgICAgICAgIGlmIChTY29wZWRSdWxlRGF0YSogcnVsZURhdGEgPSBzY29wZWRSdWxlRGF0
YUZvcihlKSkgeworICAgICAgICAgICAgdGFyZ2V0LT5zZXRQYXJlbnRSdWxlRGF0YShydWxlRGF0
YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGUtPmlzU2hh
ZG93Um9vdCgpKSB7CisgICAgICAgICAgICBib29sIGR1bW15OworICAgICAgICAgICAgU2NvcGVk
UnVsZURhdGEqIHJ1bGVEYXRhID0gYWRkU2NvcGVkUnVsZURhdGEoZSwgZmFsc2UsIGR1bW15KTsK
KyAgICAgICAgICAgIHRhcmdldC0+c2V0UGFyZW50UnVsZURhdGEocnVsZURhdGEpOworICAgICAg
ICAgICAgc2V0dXBTY29wZWRSdWxlRGF0YVRyZWUocnVsZURhdGEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCitSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6
OmVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgYm9v
bCBpc05ld0VudHJ5OworICAgIFNjb3BlZFJ1bGVEYXRhKiBydWxlRGF0YSA9IGFkZFNjb3BlZFJ1
bGVEYXRhKHNjb3BlLCB0cnVlLCBpc05ld0VudHJ5KTsKKyAgICBpZiAoaXNOZXdFbnRyeSkKKyAg
ICAgICAgc2V0dXBTY29wZWRSdWxlRGF0YVRyZWUocnVsZURhdGEpOworICAgIHJldHVybiBydWxl
RGF0YS0+cnVsZVNldCgpOworfQorCiB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTdGFj
ayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpCiB7CiAgICAgLy8gVGhlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2Vk
IGFueXdoZXJlLgogICAgIEFTU0VSVCghbV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKTsKIAotICAg
IG1fc3RhY2suc2hyaW5rKDApOwotICAgIGludCBhdXRob3JTdHlsZUJvdW5kc0luZGV4ID0gMDsK
KyAgICBtX3N0YWNrSGVhZCA9IDA7CiAgICAgZm9yIChjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSA9IHBhcmVudDsgc2NvcGU7IHNjb3BlID0gc2NvcGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewot
ICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gcnVsZVNldEZvcihzY29wZSk7Ci0gICAgICAgIGlm
IChydWxlU2V0KQotICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoU3RhY2tGcmFtZShzY29wZSwg
YXV0aG9yU3R5bGVCb3VuZHNJbmRleCwgcnVsZVNldCkpOwotICAgICAgICBpZiAoc2NvcGUtPmlz
U2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygp
KQotICAgICAgICAgICAgLS1hdXRob3JTdHlsZUJvdW5kc0luZGV4OworICAgICAgICBTY29wZWRS
dWxlRGF0YSogcnVsZURhdGEgPSBzY29wZWRSdWxlRGF0YUZvcihzY29wZSk7CisgICAgICAgIGlm
IChydWxlRGF0YSkgeworICAgICAgICAgICAgbV9zdGFja0hlYWQgPSBydWxlRGF0YTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290
KCkpIHsKKyAgICAgICAgICAgIGJvb2wgZHVtbXk7CisgICAgICAgICAgICAvLyBUbyBxdWlja2x5
IHNvbHZlIGFwcGx5LWF1dGhvci1zdHlsZXMgZmxhZywgY3JlYXRlIGFuIGVtcHR5CisgICAgICAg
ICAgICAvLyBTY29wZWRSdWxlRGF0YSBmb3IgYSBTaGFkb3dSb290LiBTbyB3ZSBjYW4gcmVseSBv
biBtX3N0YWNrSGVhZAorICAgICAgICAgICAgLy8gYW5kIHRyYXZlcnNlIG1fcGFyZW50UnVsZURh
dGEgdG8gc29sdmUgYXBwbHktYXV0aG9yLXN0eWxlcy4KKyAgICAgICAgICAgIG1fc3RhY2tIZWFk
ID0gYWRkU2NvcGVkUnVsZURhdGEoc2NvcGUsIGZhbHNlLCBkdW1teSk7CisgICAgICAgICAgICBz
ZXR1cFNjb3BlZFJ1bGVEYXRhVHJlZShtX3N0YWNrSGVhZCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgIH0KLQotICAgIG1fc3RhY2sucmV2ZXJzZSgpOwogICAgIG1fc3RhY2tQ
YXJlbnQgPSBwYXJlbnQ7Ci0gICAgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4ID0gMDsKIH0KIAog
dm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlUGFyZW50KQpAQCAtMTE4LDcgKzE2Nyw2IEBAIHZv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBj
b25zdCBDb250YWluZXJOb2RlKiBzCiAgICAgLy8gU2hvcnRjdXQ6IERvbid0IGJvdGhlciB3aXRo
IHRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBh
bnl3aGVyZS4KICAgICBpZiAobV9hdXRob3JTdHlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFT
U0VSVCghbV9zdGFja1BhcmVudCk7Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyOCwxMyArMTc2LDggQEAgdm9pZCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OnB1c2goY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHMKICAgICAgICAgc2V0dXBTdGFjayhzY29wZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jv
b3Qoc2NvcGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAgICAgICArK21fc3RhY2tQYXJlbnRC
b3VuZHNJbmRleDsKLSAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBwYXJlbnQgb250byB0
aGUgc3RhY2suCi0gICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOwotICAg
IGlmIChydWxlU2V0KQotICAgICAgICBtX3N0YWNrLmFwcGVuZChTdGFja0ZyYW1lKHNjb3BlLCBt
X3N0YWNrUGFyZW50Qm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKKyAgICBpZiAoU2NvcGVkUnVsZURh
dGEqIHJ1bGVEYXRhID0gc2NvcGVkUnVsZURhdGFGb3Ioc2NvcGUpKQorICAgICAgICBtX3N0YWNr
SGVhZCA9IHJ1bGVEYXRhOwogICAgIG1fc3RhY2tQYXJlbnQgPSBzY29wZTsKIH0KIApAQCAtMTQy
LDE4ICsxODUsNDggQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnBvcChjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKIHsKICAgICAvLyBPbmx5IGJvdGhlciB0byB1cGRhdGUgdGhlIHNjb3Bp
bmcgZWxlbWVudCBzdGFjayBpZiBpdCBpcyBjb25zaXN0ZW50LgogICAgIGlmIChzdGFja0lzQ29u
c2lzdGVudChzY29wZSkpIHsKLSAgICAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHkoKSAmJiBtX3N0
YWNrLmxhc3QoKS5tX3Njb3BlID09IHNjb3BlKQotICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkgJiYgIXRvU2hhZG93Um9v
dChzY29wZSktPmFwcGx5QXV0aG9yU3R5bGVzKCkpCi0gICAgICAgICAgICAtLW1fc3RhY2tQYXJl
bnRCb3VuZHNJbmRleDsKKyAgICAgICAgaWYgKG1fc3RhY2tIZWFkICYmIG1fc3RhY2tIZWFkLT5z
Y29wZSgpID09IG1fc3RhY2tQYXJlbnQpCisgICAgICAgICAgICBtX3N0YWNrSGVhZCA9IG1fc3Rh
Y2tIZWFkLT5wYXJlbnRSdWxlRGF0YSgpOwogICAgICAgICBtX3N0YWNrUGFyZW50ID0gc2NvcGUt
PnBhcmVudE9ySG9zdE5vZGUoKTsKICAgICB9CiB9CiAKK2lubGluZSBTY29wZWRSdWxlRGF0YSog
U3R5bGVTY29wZVJlc29sdmVyOjpwYXJlbnRSdWxlRGF0YShTY29wZWRSdWxlRGF0YSogcnVsZURh
dGEpCit7CisgICAgaWYgKCFydWxlRGF0YS0+c2NvcGUoKS0+aXNTaGFkb3dSb290KCkpCisgICAg
ICAgIHJldHVybiBydWxlRGF0YS0+cGFyZW50UnVsZURhdGEoKTsKKyAgICByZXR1cm4gdG9TaGFk
b3dSb290KHJ1bGVEYXRhLT5zY29wZSgpKS0+YXBwbHlBdXRob3JTdHlsZXMoKSA/IHJ1bGVEYXRh
LT5wYXJlbnRSdWxlRGF0YSgpIDogMDsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmZp
bmRNYXRjaGVkU2NvcGVkQXV0aG9yUnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmVjdG9y
PHN0ZDo6cGFpcjxjb25zdCBDb250YWluZXJOb2RlKiwgUnVsZVNldCo+ID4mIG1hdGNoZWRSdWxl
cykKK3sKKyAgICBpZiAoIWhhc1Njb3BlZFN0eWxlcygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCFlbnN1cmVTdGFja0NvbnNpc3RlbmN5KGVsZW1lbnQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5
QXV0aG9yU3R5bGVzKCkgfHwgIWVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgaWYgKGVs
ZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIGZvciAoU2NvcGVkUnVsZURhdGEqIHJ1
bGVEYXRhID0gbV9zdGFja0hlYWQ7IHJ1bGVEYXRhOyBydWxlRGF0YSA9IHBhcmVudFJ1bGVEYXRh
KHJ1bGVEYXRhKSkKKyAgICAgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gcnVsZURhdGEt
PnJ1bGVTZXQoKSkKKyAgICAgICAgICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHBhaXI8Y29u
c3QgQ29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPihydWxlRGF0YS0+c2NvcGUoKSwgcnVsZVNldCkp
OworCisgICAgaWYgKCFhcHBseUF1dGhvclN0eWxlcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
U2NvcGVkUnVsZURhdGEqIHJ1bGVEYXRhID0gbV9zdGFja0hlYWQ7CisgICAgZm9yICg7IHJ1bGVE
YXRhICYmIHJ1bGVEYXRhLT5zY29wZSgpLT5pc0luU2hhZG93VHJlZSgpOyBydWxlRGF0YSA9IHJ1
bGVEYXRhLT5wYXJlbnRSdWxlRGF0YSgpKSB7IH0KKyAgICBmb3IgKDsgcnVsZURhdGE7IHJ1bGVE
YXRhID0gcnVsZURhdGEtPnBhcmVudFJ1bGVEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKHJ1bGVE
YXRhLT5ydWxlU2V0KCkpOworICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHBhaXI8Y29uc3Qg
Q29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPihydWxlRGF0YS0+c2NvcGUoKSwgcnVsZURhdGEtPnJ1
bGVTZXQoKSkpOworICAgIH0KK30KKwogdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RG
ZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcykKIHsKLSAgICBmb3IgKFNjb3BlZFJ1
bGVTZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9h
dXRob3JTdHlsZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGZlYXR1cmVzLmFkZChpdC0+dmFsdWUt
PmZlYXR1cmVzKCkpOworICAgIGZvciAoU2NvcGVkUnVsZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9hdXRob3JTdHlsZXMuYmVnaW4oKTsgaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCk7ICsraXQp
CisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gaXQtPnZhbHVlLT5ydWxlU2V0KCkpCisg
ICAgICAgICAgICBmZWF0dXJlcy5hZGQocnVsZVNldC0+ZmVhdHVyZXMoKSk7CiB9CiAKIGlubGlu
ZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZUF0SG9zdFJ1bGVTZXRGb3IoY29u
c3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKQEAgLTIzOSwxMCArMzEyLDggQEAgdm9pZCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGMKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1iZXIo
bV9hdXRob3JTdHlsZXMpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fYXRIb3N0UnVsZXMpOwogfQogCiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCmluZGV4IDNi
ZTNmZjRmNzBjNzM3NWJkMDE0MjZhMDBiYTQyNDEyODQ2MmNjMGUuLmViZTRhNjE4OTNjNmMyMzcy
NWQwZTNjMDEwMTc0NWEzZjRmM2QyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJl
c29sdmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgU3R5bGVTY29wZVJlc29sdmVyX2gK
ICNkZWZpbmUgU3R5bGVTY29wZVJlc29sdmVyX2gKIAorI2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQ1LDYgKzQ2LDI1IEBAIHN0cnVjdCBSdWxlRmVhdHVy
ZVNldDsKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQog
CitjbGFzcyBTY29wZWRSdWxlRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
U2NvcGVkUnVsZURhdGE+IGNyZWF0ZShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVEYXRhKHNjb3BlKSk7IH0KKyAgICBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSgpIHsgcmV0dXJuIG1fc2NvcGU7IH0KKyAgICBSdWxlU2V0KiBydWxl
U2V0KCkgeyByZXR1cm4gbV9ydWxlU2V0LmdldCgpOyB9CisgICAgdm9pZCBwcmVwYXJlRW1wdHlS
dWxlU2V0KCkgeyBtX3J1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsgfQorCisgICAgdm9pZCBz
ZXRQYXJlbnRSdWxlRGF0YShTY29wZWRSdWxlRGF0YSogbmV3UGFyZW50KSB7IG1fcGFyZW50UnVs
ZURhdGEgPSBuZXdQYXJlbnQ7IH0KKyAgICBTY29wZWRSdWxlRGF0YSogcGFyZW50UnVsZURhdGEo
KSB7IHJldHVybiBtX3BhcmVudFJ1bGVEYXRhOyB9CisKK3ByaXZhdGU6CisgICAgU2NvcGVkUnVs
ZURhdGEoKSA6IG1fc2NvcGUoMCksIG1fcGFyZW50UnVsZURhdGEoMCkgeyB9CisgICAgU2NvcGVk
UnVsZURhdGEoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIDogbV9zY29wZShzY29wZSksIG1f
cGFyZW50UnVsZURhdGEoMCkgeyB9CisKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3Bl
OworICAgIE93blB0cjxSdWxlU2V0PiBtX3J1bGVTZXQ7CisgICAgU2NvcGVkUnVsZURhdGEqIG1f
cGFyZW50UnVsZURhdGE7Cit9OworCiBjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXIgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVT
ZXQ+ID4gU2NvcGVkUnVsZVNldE1hcDsKQEAgLTY5LDEyICs4OSwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwb3AoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwogICAgIGJvb2wgaGFzU2NvcGVk
U3R5bGVzKCkgY29uc3QgeyByZXR1cm4gIW1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKTsgfQogICAg
IFJ1bGVTZXQqIGVuc3VyZVJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOwot
ICAgIGJvb2wgZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShDb250YWluZXJOb2RlKik7Ci0gICAgdW5z
aWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KLSAgICBj
b25zdCBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhY2suYXQoaW5kZXgpOyB9Ci0gICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29u
c3QgU3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVC
b3VuZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KICAgICB2b2lkIGNvbGxl
Y3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CiAKKyAgICB2b2lkIGZpbmRNYXRjaGVkU2Nv
cGVkQXV0aG9yUnVsZXMoY29uc3QgRWxlbWVudCosIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3QgQ29u
dGFpbmVyTm9kZSosIFJ1bGVTZXQqPiA+JiBtYXRjaGVkUnVsZXMpOworCiAgICAgdm9pZCBhZGRI
b3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lkIG1hdGNoSG9zdFJ1
bGVzKGNvbnN0IEVsZW1lbnQqLCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMpOwpAQCAt
ODIsMzEgKzEwMCwzNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IENvbnRhaW5lck5vZGUqLCBPd25QdHI8U2NvcGVkUnVsZURhdGE+ID4gU2NvcGVkUnVsZURh
dGFNYXA7CisgICAgU2NvcGVkUnVsZURhdGFNYXAgbV9hdXRob3JTdHlsZXM7CisKICAgICBSdWxl
U2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdDsKKyAgICBz
dHJ1Y3QgU2NvcGVkUnVsZURhdGEqIHNjb3BlZFJ1bGVEYXRhRm9yKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlKTsKKyAgICBzdHJ1Y3QgU2NvcGVkUnVsZURhdGEqIGFkZFNjb3BlZFJ1bGVEYXRh
KGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBib29sIG5lZWRSdWxlU2V0LCBib29sJiBpc05l
d0VudHJ5KTsKKyAgICB2b2lkIHNldHVwU2NvcGVkUnVsZURhdGFUcmVlKFNjb3BlZFJ1bGVEYXRh
Kik7CisgICAgU2NvcGVkUnVsZURhdGEqIHBhcmVudFJ1bGVEYXRhKFNjb3BlZFJ1bGVEYXRhKik7
CisKKyAgICBib29sIGVuc3VyZVN0YWNrQ29uc2lzdGVuY3koY29uc3QgQ29udGFpbmVyTm9kZSop
OwogICAgIHZvaWQgc2V0dXBTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBz
dGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0
dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9zdGFja1BhcmVudDsgfQorCiAgICAgUnVsZVNldCog
ZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290Kik7CiAgICAgUnVsZVNldCog
YXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KikgY29uc3Q7CiAKLSAgICBTY29wZWRS
dWxlU2V0TWFwIG1fYXV0aG9yU3R5bGVzOwotCi0gICAgLy8gVmVjdG9yICh1c2VkIGFzIHN0YWNr
KSB0aGF0IGtlZXBzIHRyYWNrIG9mIHNjb3BpbmcgZWxlbWVudHMgKGkuZS4sIGVsZW1lbnRzIHdp
dGggYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCkKLSAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgdHJl
ZSBpdGVyYXRpb24gZm9yIHN0eWxlIHJlc29sdXRpb24uCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+
IG1fc3RhY2s7CisgICAgU2NvcGVkUnVsZURhdGEqIG1fc3RhY2tIZWFkOwogICAgIC8vIEVsZW1l
bnQgbGFzdCBzZWVuIGFzIHBhcmVudCBlbGVtZW50IHdoZW4gdXBkYXRpbmcgbV9zY29waW5nRWxl
bWVudFN0YWNrLgogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3Bp
bmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hl
Y2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3N0YWNrUGFy
ZW50OwotICAgIGludCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7CiAKICAgICBTY29wZWRSdWxl
U2V0TWFwIG1fYXRIb3N0UnVsZXM7CiB9OwogCi1pbmxpbmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2
ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFpbmVyTm9kZSogcGFyZW50KQoraW5saW5l
IGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KGNvbnN0IENv
bnRhaW5lck5vZGUqIHBhcmVudCkKIHsKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVz
IGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0
IGdvdCBpbmNvbnNpc3RlbnQpLgogICAgIGlmICghc3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkK
ICAgICAgICAgc2V0dXBTdGFjayhwYXJlbnQpOwotICAgIHJldHVybiAhbV9zdGFjay5pc0VtcHR5
KCk7CisgICAgcmV0dXJuIG1fc3RhY2tIZWFkOwogfQogCiAjZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173538</attachid>
            <date>2012-11-11 19:03:33 -0800</date>
            <delta_ts>2013-01-07 14:06:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101312-20121112120136.patch</filename>
            <type>text/plain</type>
            <size>18219</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTZlNDNjM2ViOTFlM2M3
OWJjMzMwMTk5YjMxMWM0OWFjZGRhYTAyOS4uZjgyN2Y3NGI4NjU1YzkwOTI0MGU1YzdjMTlhY2Yz
MmI3OTQ2YTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTExLTExICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICA8c3R5bGUgc2NvcGVk
PjogcmVmYWN0b3IgU3R5bGVTY29wZVJlc29sdmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgb2xkIGNvZGUgYWx3YXlzIGdvZXMgdXAgYSBET00g
dHJlZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50IHRvCisgICAgICAgIGZpbmQgYWxsIG1hdGNoZWQg
c2NvcGVkIHN0eWxlcy4gSG93ZXZlciBudW1iZXIgb2Ygc2NvcGluZyBub2RlcyBpcworICAgICAg
ICBtdWNoIGZld2VyZXIgdGhhbiBudW1iZXIgb2Ygbm9kZXMuIFNvIGl0IHdvdWxkIGJlIGJldHRl
ciB0byBsb29rIHVwCisgICAgICAgIHNvbWV0aGluZyBsaWtlIGEgc2NvcGVkIHRyZWUgdGhhbiBs
b29raW5nIHVwIGFuY2VzdG9yIG5vZGVzLiBXZSBjYW4KKyAgICAgICAgZXhwZWN0IHRoZSBzY29w
ZWQgdHJlZSBpcyB2ZXJ5IHNwYXJzZSB0cmVlIGNvbXBhcmluZyB3aXRoIGEgRE9NIHRyZWUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMganVzdCBmb3IgcmVm
YWN0b3JpbmcuIE5vIG5ldworICAgICAgICBmZWF0dXJlcyBhcmUgYWRkZWQuCisKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6U3R5bGVTY29w
ZVJlc29sdmVyKToKKyAgICAgICAgU2luY2UgYSB0cmVlIG9mIHN0eWxlIHNjb3BlZCBoYXMgaW5m
b3JtYXRpb24gYWJvdXQgd2hhdCBzdHlsZSBlbGVtZW50CisgICAgICAgIGlzIHRoZSBuZXh0IG9u
ZSB0byBiZSBhcHBsaWVkLCBubyBuZWVkIHRvIGhhdmUgYSBzY29wZSBzdGFjay4gVGhlIHRyZWUK
KyAgICAgICAgYWxzbyBoYXMgaW5mb3JtYXRpb24gZm9yIHNvbHZpbmcgYXBwbHktYXV0aG9yLXN0
eWxlcy4gUmVtb3ZlZCBzdGFjaworICAgICAgICBwYXJlbnQgYm91bmRzIGluZGV4LgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzY29wZWRSdWxlRGF0YUZvcik6CisgICAg
ICAgIFRvIHNvbHZlIGFwcGx5LWF1dGhvci1zdHlsZXMsIG9uZSBTY29wZWRSdWxlRGF0YSBpcyBh
bHdheXMgY3JlYXRlZCBmb3IKKyAgICAgICAgb25lIFNoYWRvd1Jvb3QgaW5kZXBlbmRlbnQgb2Yg
d2hldGhlciB0aGUgU2hhZG93Um9vdCBoYXMgYW55IHN0eWxlcyBvcgorICAgICAgICBub3QuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6
YWRkU2NvcGVkUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVy
OjpzZXR1cFNjb3BlZFJ1bGVEYXRhVHJlZSk6CisgICAgICAgIFNpbmNlIERvY3VtZW50U3R5bGVD
b2xsZWN0aW9uIGhhcyBhbGwgc3R5bGVzIGluIGRvY3VtZW50IG9yZGVyIGFuZAorICAgICAgICBj
cmVhdGVzIFJ1bGVTZXRzIGluIHRoZSBvcmRlciwgdGhpcyBjb2RlIHdvcmtzLiBMZWF2ZXMgb2Yg
c2NvcGVkIHJ1bGUKKyAgICAgICAgZGF0YSBoYXZlIHRoZWlyIHBhcmVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVJ1bGVTZXRGb3IpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzZXR1cFN0YWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNj
b3BlUmVzb2x2ZXI6OnBvcCk6CisgICAgICAgIFNpbmNlIGVhY2ggU2NvcGVkUnVsZURhdGEga25v
d3MgaXRzIHBhcmVudCBydWxlIGRhdGEsIG5lZWQgdG8ga2VlcAorICAgICAgICBvbmx5IHNjb3Bl
IHN0YWNrIGhlYWQuIE5vIG5lZWQgdG8ga2VlcCBlbnRpcmUgc2NvcGUgc3RhY2suIFdoZW4gInBv
cCIsCisgICAgICAgIGNvbXBhcmUgdGhlIHN0YWNrIGhlYWQgKD0gdGhlIHNjb3BlIG9mIHRoZSBj
dXJyZW50IFNjb3BlZFJ1bGVEYXRhKQorICAgICAgICB3aXRoIHRoZSBnaXZlbiBzY29wZSBhbmQg
dXNlIHRoZSBwYXJlbnQgU2NvcGVkUnVsZURhdGEgaWYgdGhlIHNhbWUuCisgICAgICAgIFdoZW4g
InB1c2giLCBsb29rIHVwIHRoZSBzY29wZWQgcnVsZSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTY29wZVJlc29sdmVyOjpwYXJlbnRSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNjb3BlUmVzb2x2ZXI6OmZpbmRNYXRjaGVkU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXNUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAg
ICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6CisgICAgICAgIChTY29wZWRSdWxlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFJ1bGVEYXRhOjpzY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRSdWxlRGF0YTo6cnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlRGF0YTo6
cHJlcGFyZUVtcHR5UnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlRGF0YTo6
c2V0UGFyZW50UnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZURhdGE6OnBh
cmVudFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVEYXRhOjpTY29wZWRS
dWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29u
c2lzdGVuY3kpOgorCiAyMDEyLTExLTExICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBJbnRlcm5hbHM6IE1vY2tQYWdlUG9wdXAgc2hvdWxkIG5vdCB1cGRhdGUg
RE9NIHN0cnVjdHVyZSBkdXJpbmcgZGV0YWNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAppbmRleCA0ZDc4MjJmNTE1NjM4OTA0ZDlkZGE4ZjZhZDU0ZjI5NDc2MWRjMDlhLi42YzY3
OGNiNmMyMzMwNWUxYmRkY2ZiNDg4YWI5ZDY5YTQ5ODNjODgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCkBAIC03NDgsMzIgKzc0OCwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdAogCiAgICAgbWF0Y2hIb3N0UnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAK
LSAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0
aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVu
dCkuCi0gICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9l
bGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9
IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7Ci0gICAgYm9vbCBk
b2N1bWVudFNjb3BlID0gdHJ1ZTsKLSAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3BlUmVz
b2x2ZXItPnN0YWNrU2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNp
emU7ICsraSkgewotICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUm
IGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7Ci0gICAgICAgIGRvY3Vt
ZW50U2NvcGUgPSBkb2N1bWVudFNjb3BlICYmICFmcmFtZS5tX3Njb3BlLT5pc0luU2hhZG93VHJl
ZSgpOwotICAgICAgICBpZiAoZG9jdW1lbnRTY29wZSkgewotICAgICAgICAgICAgaWYgKCFhcHBs
eUF1dGhvclN0eWxlcykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5tYXRjaGVzU3R5bGVCb3VuZHMo
ZnJhbWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgICAg
IAotICAgICAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcywgZnJhbWUu
bV9zY29wZSk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1fcnVsZVNldCwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihmcmFt
ZS5tX3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IENv
bnRhaW5lck5vZGUqLCBSdWxlU2V0Kj4gPiBtYXRjaGVkUnVsZXM7CisgICAgbV9zY29wZVJlc29s
dmVyLT5maW5kTWF0Y2hlZFNjb3BlZEF1dGhvclJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVz
KTsKKyAgICBmb3IgKGludCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRj
aGVkUnVsZXNbaV0uZmlyc3QpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVk
UnVsZXNbaV0uc2Vjb25kLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1hdGNoZWRSdWxlc1tpXS5zZWNvbmQsIHJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKICAgICB9
Ci0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNj
b3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5j
cHAKaW5kZXggNWZmMmIzZTBiMTE1NDk5NDQ3ZTIxYzg2ZjU4ZjY0NjEzMDFjZjBmZC4uNTU2OGQ5
NzE0YjVmY2I1ZTEzNWY1ODBhOTQwNjAxMTYyYTM3ZWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTQ2LDggKzQ2LDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU3R5bGVTY29wZVJlc29sdmVyOjpTdHlsZVNjb3BlUmVzb2x2ZXIoKQotICAgIDog
bV9zdGFja1BhcmVudCgwKQotICAgICwgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4KDApCisgICAg
OiBtX3N0YWNrSGVhZCgwKQorICAgICwgbV9zdGFja1BhcmVudCgwKQogewogfQogCkBAIC03Nyw0
MCArNzcsODIgQEAgY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVTY29wZVJlc29sdmVyOjpzY29w
ZUZvcihjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKICAgICByZXR1cm4gKHBhcmVudC0+aXNF
bGVtZW50Tm9kZSgpIHx8IHBhcmVudC0+aXNTaGFkb3dSb290KCkpID8gcGFyZW50IDogMDsKIH0K
IAotaW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6cnVsZVNldEZvcihjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKK2lubGluZSBTY29wZWRSdWxlRGF0YSogU3R5bGVT
Y29wZVJlc29sdmVyOjpzY29wZWRSdWxlRGF0YUZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSkKIHsKLSAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlm
ICghc2NvcGUtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgJiYgIXNjb3BlLT5pc1NoYWRvd1Jv
b3QoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1cm4gaXQgIT0g
bV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKKyAgICBTY29wZWRS
dWxlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBtX2F1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKKyAg
ICByZXR1cm4gaXQgIT0gbV9hdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAw
OwogfQogCi1SdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVJ1bGVTZXRGb3IoY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCitTY29wZWRSdWxlRGF0YSogU3R5bGVTY29wZVJlc29s
dmVyOjphZGRTY29wZWRSdWxlRGF0YShjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgYm9vbCBu
ZWVkUnVsZVNldCwgYm9vbCYgaXNOZXdFbnRyeSkKIHsKLSAgICBTY29wZWRSdWxlU2V0TWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdXRob3JTdHlsZXMuYWRkKHNjb3BlLCBudWxscHRyKTsK
KyAgICBTY29wZWRSdWxlRGF0YU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXV0aG9yU3R5
bGVzLmFkZChzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTY29wZWRSdWxlRGF0YTo6Y3JlYXRl
KHNjb3BlKTsKKyAgICBpc05ld0VudHJ5ID0gYWRkUmVzdWx0LmlzTmV3RW50cnk7CisKKyAgICBp
ZiAobmVlZFJ1bGVTZXQgJiYgIWFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJ1bGVTZXQoKSkK
KyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+cHJlcGFyZUVtcHR5UnVsZVNldCgp
OwogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCit2b2lk
IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2V0dXBTY29wZWRSdWxlRGF0YVRyZWUoU2NvcGVkUnVsZURh
dGEqIHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICBBU1NFUlQodGFyZ2V0LT5z
Y29wZSgpKTsKKworICAgIC8vIFNpbmNlIFN0eWxlUmVzb2x2ZXIgY3JlYXRlcyBSdWxlU2V0cyBh
Y2NvcmRpbmcgdG8gc3R5bGVzJyBkb2N1bWVudAorICAgIC8vIG9yZGVyLCBhIHBhcmVudCBvZiB0
aGUgZ2l2ZW4gU2NvcGVkUnVsZURhdGEgaGFzIGJlZW4gYWxyZWFkeQorICAgIC8vIHByZXBhcmVk
LgorICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIGUgPSB0YXJnZXQtPnNjb3BlKCktPnBhcmVudE9y
SG9zdE5vZGUoKTsKKyAgICBmb3IgKDsgZTsgZSA9IGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewor
ICAgICAgICBpZiAoU2NvcGVkUnVsZURhdGEqIHJ1bGVEYXRhID0gc2NvcGVkUnVsZURhdGFGb3Io
ZSkpIHsKKyAgICAgICAgICAgIHRhcmdldC0+c2V0UGFyZW50UnVsZURhdGEocnVsZURhdGEpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChlLT5pc1NoYWRvd1Jv
b3QoKSkgeworICAgICAgICAgICAgYm9vbCBkdW1teTsKKyAgICAgICAgICAgIFNjb3BlZFJ1bGVE
YXRhKiBydWxlRGF0YSA9IGFkZFNjb3BlZFJ1bGVEYXRhKGUsIGZhbHNlLCBkdW1teSk7CisgICAg
ICAgICAgICB0YXJnZXQtPnNldFBhcmVudFJ1bGVEYXRhKHJ1bGVEYXRhKTsKKyAgICAgICAgICAg
IHNldHVwU2NvcGVkUnVsZURhdGFUcmVlKHJ1bGVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KK30KKworUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1
cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGJvb2wgaXNO
ZXdFbnRyeTsKKyAgICBTY29wZWRSdWxlRGF0YSogcnVsZURhdGEgPSBhZGRTY29wZWRSdWxlRGF0
YShzY29wZSwgdHJ1ZSwgaXNOZXdFbnRyeSk7CisgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAg
IHNldHVwU2NvcGVkUnVsZURhdGFUcmVlKHJ1bGVEYXRhKTsKKyAgICByZXR1cm4gcnVsZURhdGEt
PnJ1bGVTZXQoKTsKK30KKwogdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNldHVwU3RhY2soY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQogewogICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQg
c3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3
aGVyZS4KICAgICBBU1NFUlQoIW1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKSk7CiAKLSAgICBtX3N0
YWNrLnNocmluaygwKTsKLSAgICBpbnQgYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9IDA7CisgICAg
bV9zdGFja0hlYWQgPSAwOwogICAgIGZvciAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBw
YXJlbnQ7IHNjb3BlOyBzY29wZSA9IHNjb3BlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKLSAgICAg
ICAgUnVsZVNldCogcnVsZVNldCA9IHJ1bGVTZXRGb3Ioc2NvcGUpOwotICAgICAgICBpZiAocnVs
ZVNldCkKLSAgICAgICAgICAgIG1fc3RhY2suYXBwZW5kKFN0YWNrRnJhbWUoc2NvcGUsIGF1dGhv
clN0eWxlQm91bmRzSW5kZXgsIHJ1bGVTZXQpKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc1NoYWRv
d1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNjb3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAg
ICAgICAgICAgIC0tYXV0aG9yU3R5bGVCb3VuZHNJbmRleDsKKyAgICAgICAgU2NvcGVkUnVsZURh
dGEqIHJ1bGVEYXRhID0gc2NvcGVkUnVsZURhdGFGb3Ioc2NvcGUpOworICAgICAgICBpZiAocnVs
ZURhdGEpIHsKKyAgICAgICAgICAgIG1fc3RhY2tIZWFkID0gcnVsZURhdGE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpKSB7
CisgICAgICAgICAgICBib29sIGR1bW15OworICAgICAgICAgICAgLy8gVG8gcXVpY2tseSBzb2x2
ZSBhcHBseS1hdXRob3Itc3R5bGVzIGZsYWcsIGNyZWF0ZSBhbiBlbXB0eQorICAgICAgICAgICAg
Ly8gU2NvcGVkUnVsZURhdGEgZm9yIGEgU2hhZG93Um9vdC4gU28gd2UgY2FuIHJlbHkgb24gbV9z
dGFja0hlYWQKKyAgICAgICAgICAgIC8vIGFuZCB0cmF2ZXJzZSBtX3BhcmVudFJ1bGVEYXRhIHRv
IHNvbHZlIGFwcGx5LWF1dGhvci1zdHlsZXMuCisgICAgICAgICAgICBtX3N0YWNrSGVhZCA9IGFk
ZFNjb3BlZFJ1bGVEYXRhKHNjb3BlLCBmYWxzZSwgZHVtbXkpOworICAgICAgICAgICAgc2V0dXBT
Y29wZWRSdWxlRGF0YVRyZWUobV9zdGFja0hlYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICB9Ci0KLSAgICBtX3N0YWNrLnJldmVyc2UoKTsKICAgICBtX3N0YWNrUGFyZW50
ID0gcGFyZW50OwotICAgIG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleCA9IDA7CiB9CiAKIHZvaWQg
U3R5bGVTY29wZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZVBhcmVudCkKQEAgLTExOCw3ICsxNjAsNiBAQCB2b2lkIFN0
eWxlU2NvcGVSZXNvbHZlcjo6cHVzaChjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogcwogICAgIC8vIFNob3J0Y3V0OiBEb24ndCBib3RoZXIgd2l0aCB0aGUg
c2NvcGluZyBlbGVtZW50IHN0YWNrIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hl
cmUuCiAgICAgaWYgKG1fYXV0aG9yU3R5bGVzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQo
IW1fc3RhY2tQYXJlbnQpOwotICAgICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjgsMTMgKzE2OSw4IEBAIHZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjpwdXNoKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzCiAgICAgICAgIHNldHVwU3RhY2soc2NvcGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSAmJiAhdG9TaGFkb3dSb290KHNj
b3BlKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkKLSAgICAgICAgKyttX3N0YWNrUGFyZW50Qm91bmRz
SW5kZXg7Ci0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgcGFyZW50IG9udG8gdGhlIHN0
YWNrLgotICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBydWxlU2V0Rm9yKHNjb3BlKTsKLSAgICBpZiAo
cnVsZVNldCkKLSAgICAgICAgbV9zdGFjay5hcHBlbmQoU3RhY2tGcmFtZShzY29wZSwgbV9zdGFj
a1BhcmVudEJvdW5kc0luZGV4LCBydWxlU2V0KSk7CisgICAgaWYgKFNjb3BlZFJ1bGVEYXRhKiBy
dWxlRGF0YSA9IHNjb3BlZFJ1bGVEYXRhRm9yKHNjb3BlKSkKKyAgICAgICAgbV9zdGFja0hlYWQg
PSBydWxlRGF0YTsKICAgICBtX3N0YWNrUGFyZW50ID0gc2NvcGU7CiB9CiAKQEAgLTE0MiwxOCAr
MTc4LDQ4IEBAIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpwb3AoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpCiB7CiAgICAgLy8gT25seSBib3RoZXIgdG8gdXBkYXRlIHRoZSBzY29waW5nIGVs
ZW1lbnQgc3RhY2sgaWYgaXQgaXMgY29uc2lzdGVudC4KICAgICBpZiAoc3RhY2tJc0NvbnNpc3Rl
bnQoc2NvcGUpKSB7Ci0gICAgICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkgJiYgbV9zdGFjay5s
YXN0KCkubV9zY29wZSA9PSBzY29wZSkKLSAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgICAgICBpZiAoc2NvcGUtPmlzU2hhZG93Um9vdCgpICYmICF0b1NoYWRvd1Jvb3Qoc2Nv
cGUpLT5hcHBseUF1dGhvclN0eWxlcygpKQotICAgICAgICAgICAgLS1tX3N0YWNrUGFyZW50Qm91
bmRzSW5kZXg7CisgICAgICAgIGlmIChtX3N0YWNrSGVhZCAmJiBtX3N0YWNrSGVhZC0+c2NvcGUo
KSA9PSBtX3N0YWNrUGFyZW50KQorICAgICAgICAgICAgbV9zdGFja0hlYWQgPSBtX3N0YWNrSGVh
ZC0+cGFyZW50UnVsZURhdGEoKTsKICAgICAgICAgbV9zdGFja1BhcmVudCA9IHNjb3BlLT5wYXJl
bnRPckhvc3ROb2RlKCk7CiAgICAgfQogfQogCitpbmxpbmUgU2NvcGVkUnVsZURhdGEqIFN0eWxl
U2NvcGVSZXNvbHZlcjo6cGFyZW50UnVsZURhdGEoU2NvcGVkUnVsZURhdGEqIHJ1bGVEYXRhKQor
eworICAgIGlmICghcnVsZURhdGEtPnNjb3BlKCktPmlzU2hhZG93Um9vdCgpKQorICAgICAgICBy
ZXR1cm4gcnVsZURhdGEtPnBhcmVudFJ1bGVEYXRhKCk7CisgICAgcmV0dXJuIHRvU2hhZG93Um9v
dChydWxlRGF0YS0+c2NvcGUoKSktPmFwcGx5QXV0aG9yU3R5bGVzKCkgPyBydWxlRGF0YS0+cGFy
ZW50UnVsZURhdGEoKSA6IDA7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpmaW5kTWF0
Y2hlZFNjb3BlZEF1dGhvclJ1bGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZlY3RvcjxzdGQ6
OnBhaXI8Y29uc3QgQ29udGFpbmVyTm9kZSosIFJ1bGVTZXQqPiA+JiBtYXRjaGVkUnVsZXMpCit7
CisgICAgaWYgKCFoYXNTY29wZWRTdHlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ym9vbCBhcHBseUF1dGhvclN0eWxlcyA9IGVsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhv
clN0eWxlcygpIHx8ICFlbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOworICAgIGlmIChlbGVtZW50
LT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICBmb3IgKFNjb3BlZFJ1bGVEYXRhKiBydWxlRGF0
YSA9IG1fc3RhY2tIZWFkOyBydWxlRGF0YTsgcnVsZURhdGEgPSBwYXJlbnRSdWxlRGF0YShydWxl
RGF0YSkpCisgICAgICAgICAgICBpZiAoUnVsZVNldCogcnVsZVNldCA9IHJ1bGVEYXRhLT5ydWxl
U2V0KCkpCisgICAgICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChwYWlyPGNvbnN0IENv
bnRhaW5lck5vZGUqLCBSdWxlU2V0Kj4ocnVsZURhdGEtPnNjb3BlKCksIHJ1bGVTZXQpKTsKKwor
ICAgIGlmICghYXBwbHlBdXRob3JTdHlsZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFNjb3Bl
ZFJ1bGVEYXRhKiBydWxlRGF0YSA9IG1fc3RhY2tIZWFkOworICAgIGZvciAoOyBydWxlRGF0YSAm
JiBydWxlRGF0YS0+c2NvcGUoKS0+aXNJblNoYWRvd1RyZWUoKTsgcnVsZURhdGEgPSBydWxlRGF0
YS0+cGFyZW50UnVsZURhdGEoKSkgeyB9CisgICAgZm9yICg7IHJ1bGVEYXRhOyBydWxlRGF0YSA9
IHJ1bGVEYXRhLT5wYXJlbnRSdWxlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChydWxlRGF0YS0+
cnVsZVNldCgpKTsKKyAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChwYWlyPGNvbnN0IENvbnRh
aW5lck5vZGUqLCBSdWxlU2V0Kj4ocnVsZURhdGEtPnNjb3BlKCksIHJ1bGVEYXRhLT5ydWxlU2V0
KCkpKTsKKyAgICB9Cit9CisKIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVy
ZXNUbyhSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMpCiB7Ci0gICAgZm9yIChTY29wZWRSdWxlU2V0
TWFwOjppdGVyYXRvciBpdCA9IG1fYXV0aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fYXV0aG9y
U3R5bGVzLmVuZCgpOyArK2l0KQotICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5mZWF0
dXJlcygpKTsKKyAgICBmb3IgKFNjb3BlZFJ1bGVEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1fYXV0
aG9yU3R5bGVzLmJlZ2luKCk7IGl0ICE9IG1fYXV0aG9yU3R5bGVzLmVuZCgpOyArK2l0KQorICAg
ICAgICBpZiAoUnVsZVNldCogcnVsZVNldCA9IGl0LT52YWx1ZS0+cnVsZVNldCgpKQorICAgICAg
ICAgICAgZmVhdHVyZXMuYWRkKHJ1bGVTZXQtPmZlYXR1cmVzKCkpOwogfQogCiBpbmxpbmUgUnVs
ZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVBdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCkBAIC0yMzksMTAgKzMwNSw4IEBAIHZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjCiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0
aG9yU3R5bGVzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0YWNrKTsKICAgICBpbmZvLmFkZE1l
bWJlcihtX2F0SG9zdFJ1bGVzKTsKIH0KIAogfQotCiAjZW5kaWYgLy8gRU5BQkxFKFNUWUxFX1ND
T1BFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCAzYmUzZmY0
ZjcwYzczNzViZDAxNDI2YTAwYmE0MjQxMjg0NjJjYzBlLi5lZTE3YjEyODE1NThjNmVkYTc3YjZh
MzU3MDEyMjk3ZjBkOTMzYTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
Y29wZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIFN0eWxlU2NvcGVSZXNvbHZlcl9oCiAjZGVm
aW5lIFN0eWxlU2NvcGVSZXNvbHZlcl9oCiAKKyNpbmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CkBAIC00NSw2ICs0NiwyNSBAQCBzdHJ1Y3QgUnVsZUZlYXR1cmVTZXQ7
CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIAorY2xh
c3MgU2NvcGVkUnVsZURhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjb3Bl
ZFJ1bGVEYXRhPiBjcmVhdGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBTY29wZWRSdWxlRGF0YShzY29wZSkpOyB9CisgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlOyB9CisgICAgUnVsZVNldCogcnVsZVNldCgp
IHsgcmV0dXJuIG1fcnVsZVNldC5nZXQoKTsgfQorICAgIHZvaWQgcHJlcGFyZUVtcHR5UnVsZVNl
dCgpIHsgbV9ydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7IH0KKworICAgIHZvaWQgc2V0UGFy
ZW50UnVsZURhdGEoU2NvcGVkUnVsZURhdGEqIG5ld1BhcmVudCkgeyBtX3BhcmVudFJ1bGVEYXRh
ID0gbmV3UGFyZW50OyB9CisgICAgU2NvcGVkUnVsZURhdGEqIHBhcmVudFJ1bGVEYXRhKCkgeyBy
ZXR1cm4gbV9wYXJlbnRSdWxlRGF0YTsgfQorCitwcml2YXRlOgorICAgIFNjb3BlZFJ1bGVEYXRh
KCkgOiBtX3Njb3BlKDApLCBtX3BhcmVudFJ1bGVEYXRhKDApIHsgfQorICAgIFNjb3BlZFJ1bGVE
YXRhKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSA6IG1fc2NvcGUoc2NvcGUpLCBtX3BhcmVu
dFJ1bGVEYXRhKDApIHsgfQorCisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZTsKKyAg
ICBPd25QdHI8UnVsZVNldD4gbV9ydWxlU2V0OworICAgIFNjb3BlZFJ1bGVEYXRhKiBtX3BhcmVu
dFJ1bGVEYXRhOworfTsKKwogY2xhc3MgU3R5bGVTY29wZVJlc29sdmVyIHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+
IFNjb3BlZFJ1bGVTZXRNYXA7CkBAIC02OSwxMiArODksMTAgQEAgcHVibGljOgogICAgIHZvaWQg
cG9wKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKICAgICBib29sIGhhc1Njb3BlZFN0eWxl
cygpIGNvbnN0IHsgcmV0dXJuICFtX2F1dGhvclN0eWxlcy5pc0VtcHR5KCk7IH0KICAgICBSdWxl
U2V0KiBlbnN1cmVSdWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKLSAgICBi
b29sIGVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFpbmVyTm9kZSopOwotICAgIHVuc2lnbmVk
IHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9Ci0gICAgY29uc3Qg
U3RhY2tGcmFtZSYgc3RhY2tGcmFtZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3N0YWNrLmF0KGluZGV4KTsgfQotICAgIGJvb2wgbWF0Y2hlc1N0eWxlQm91bmRzKGNvbnN0IFN0
YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhvclN0eWxlQm91bmRz
SW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CiAgICAgdm9pZCBjb2xsZWN0RmVh
dHVyZXNUbyhSdWxlRmVhdHVyZVNldCYpOwogCisgICAgdm9pZCBmaW5kTWF0Y2hlZFNjb3BlZEF1
dGhvclJ1bGVzKGNvbnN0IEVsZW1lbnQqLCBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IENvbnRhaW5l
ck5vZGUqLCBSdWxlU2V0Kj4gPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAgIHZvaWQgYWRkSG9zdFJ1
bGUoU3R5bGVSdWxlSG9zdCosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpOwogICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc0hvc3RSdWxlcyhjb25zdCBFbGVtZW50Kik7CiAgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhj
b25zdCBFbGVtZW50KiwgVmVjdG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKQEAgLTgyLDMx
ICsxMDAsMzUgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3IoY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0OworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBDb250YWluZXJOb2RlKiwgT3duUHRyPFNjb3BlZFJ1bGVEYXRhPiA+IFNjb3BlZFJ1bGVEYXRh
TWFwOworICAgIFNjb3BlZFJ1bGVEYXRhTWFwIG1fYXV0aG9yU3R5bGVzOworCisgICAgc3RydWN0
IFNjb3BlZFJ1bGVEYXRhKiBzY29wZWRSdWxlRGF0YUZvcihjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSk7CisgICAgc3RydWN0IFNjb3BlZFJ1bGVEYXRhKiBhZGRTY29wZWRSdWxlRGF0YShjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSwgYm9vbCBuZWVkUnVsZVNldCwgYm9vbCYgaXNOZXdFbnRy
eSk7CisgICAgdm9pZCBzZXR1cFNjb3BlZFJ1bGVEYXRhVHJlZShTY29wZWRSdWxlRGF0YSopOwor
ICAgIFNjb3BlZFJ1bGVEYXRhKiBwYXJlbnRSdWxlRGF0YShTY29wZWRSdWxlRGF0YSopOworCisg
ICAgYm9vbCBlbnN1cmVTdGFja0NvbnNpc3RlbmN5KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKICAg
ICB2b2lkIHNldHVwU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOwogICAgIGJvb2wgc3RhY2tJ
c0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBw
YXJlbnQgJiYgcGFyZW50ID09IG1fc3RhY2tQYXJlbnQ7IH0KKwogICAgIFJ1bGVTZXQqIGVuc3Vy
ZUF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCopOwogICAgIFJ1bGVTZXQqIGF0SG9z
dFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCopIGNvbnN0OwogCi0gICAgU2NvcGVkUnVsZVNl
dE1hcCBtX2F1dGhvclN0eWxlczsKLQotICAgIC8vIFZlY3RvciAodXNlZCBhcyBzdGFjaykgdGhh
dCBrZWVwcyB0cmFjayBvZiBzY29waW5nIGVsZW1lbnRzIChpLmUuLCBlbGVtZW50cyB3aXRoIGEg
PHN0eWxlIHNjb3BlZD4gY2hpbGQpCi0gICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIHRyZWUgaXRl
cmF0aW9uIGZvciBzdHlsZSByZXNvbHV0aW9uLgotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBtX3N0
YWNrOworICAgIFNjb3BlZFJ1bGVEYXRhKiBtX3N0YWNrSGVhZDsKICAgICAvLyBFbGVtZW50IGxh
c3Qgc2VlbiBhcyBwYXJlbnQgZWxlbWVudCB3aGVuIHVwZGF0aW5nIG1fc2NvcGluZ0VsZW1lbnRT
dGFjay4KICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxl
bWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6
Om1fcGFyZW50U3RhY2suCiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsK
LSAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OwogCiAgICAgU2NvcGVkUnVsZVNldE1h
cCBtX2F0SG9zdFJ1bGVzOwogfTsKIAotaW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjpl
bnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVudCkKK2lubGluZSBib29s
IFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShjb25zdCBDb250YWlu
ZXJOb2RlKiBwYXJlbnQpCiB7CiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0
cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3Qg
aW5jb25zaXN0ZW50KS4KICAgICBpZiAoIXN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpCiAgICAg
ICAgIHNldHVwU3RhY2socGFyZW50KTsKLSAgICByZXR1cm4gIW1fc3RhY2suaXNFbXB0eSgpOwor
ICAgIHJldHVybiBtX3N0YWNrSGVhZDsKIH0KIAogI2Vsc2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>