<?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>69100</bug_id>
          
          <creation_ts>2011-09-29 12:43:00 -0700</creation_ts>
          <short_desc>Add logic to collect dirty objects as roots</short_desc>
          <delta_ts>2011-09-29 15:54:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475611</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 12:43:00 -0700</bug_when>
    <thetext>Add logic to collect dirty objects as roots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475615</commentid>
    <comment_count>1</comment_count>
      <attachid>109190</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 12:45:10 -0700</bug_when>
    <thetext>Created attachment 109190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475646</commentid>
    <comment_count>2</comment_count>
      <attachid>109190</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-29 13:33:12 -0700</bug_when>
    <thetext>Comment on attachment 109190
Patch

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

Not sure I’m expert enough in the code to say review+, but it looks good.

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1209
&gt; +    jit.andPtr(TrustedImm32(MarkedBlock::cardCount - 1), scratch2);

Relies on cardCount being a power of 2. The guarantee of that is far away from here. I’d suggest having a mask constant as well as a count so you can use the mask directly here.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:167
&gt; +void MarkedBlock::gatherDirtyObjects(Vector&lt;JSCell*&gt;&amp; dirtyObjects)

Don’t you have to repeat “inline” here for it to be effective?

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:179
&gt; +    const size_t metaOffset = firstAtom() * atomSize % objectSize;

What does the const on this line mean? Is this really a compile-time constant?

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:197
&gt; +            if (i == m_cards.cardCount - 1 &amp;&amp; ((ptr + objectSize) &gt; end))

Seems like there are extra parentheses on this line. I would find it easier to read without any.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:206
&gt; +class TakeIfDirty {

This class should be marked non-copyable.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:210
&gt; +    TakeIfDirty(Vector&lt;JSCell*&gt;*);

This constructor should be explicit.

&gt; Source/JavaScriptCore/heap/Heap.cpp:476
&gt; +    // Perform young gen sweep 90% of the time

This is a perfect example of a “what” comment. What we need here is a “why” comment. Also please use a period and don’t abbreviate generation to “gen”.

&gt; Source/JavaScriptCore/heap/Heap.cpp:493
&gt; +    if (size_t dirtyObjectCount = dirtyObjects.size()) {
&gt; +        for (size_t i = 0; i &lt; dirtyObjectCount; i++) {
&gt; +            visitor.visitChildren(dirtyObjects[i]);
&gt; +            visitor.drain();
&gt; +        }
&gt; +    }

Outer if seems redundant. Loop already does noting if count is zero.

&gt; Source/JavaScriptCore/heap/SlotVisitor.h:34
&gt; +    friend class Heap;

Unpleasant to have to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475659</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-29 13:46:44 -0700</bug_when>
    <thetext>&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1209
&gt; +    jit.andPtr(TrustedImm32(MarkedBlock::cardCount - 1), scratch2);

You should make MarkedBlock::cardMask and MarkedBlock::cardShift constants for this.

Would be good to comment this bug fix in your ChangeLog.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:31
&gt; +#include &quot;JSObject.h&quot;

It would be really nice for the Heap not to have to know about JSObject. What is this header used for? I don&apos;t see any direct use of JSObject below.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:167
&gt; +void MarkedBlock::gatherDirtyObjects(Vector&lt;JSCell*&gt;&amp; dirtyObjects)

I prefer to use the word &quot;cell&quot; in heap code, to emphasize that these are not JSObjects.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:170
&gt; +    if (m_state == New || m_state == FreeListed)
&gt; +        return;

You should ASSERT you&apos;re not in these states.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:173
&gt; +    if (m_state == Allocated)
&gt; +        m_state = Marked;

m_state == Marked means &quot;all unmarked objects in this block are dead&quot;. But I don&apos;t think that&apos;s true after visiting dirty objects. It&apos;s possible for the block to contain a newly allocated cell, which is unmarked and not dead. I think this state change is incorrect. (Why are you doing it?)

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:178
&gt; +    size_t objectSize = cellSize();

This should be &quot;size_t cellSize = this-&gt;cellSize()&quot;, to avoid giving two names to one thing.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:179
&gt; +    const size_t metaOffset = firstAtom() * atomSize % objectSize;

I&apos;d call this firstCellOffset.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:186
&gt; +            ptr += metaOffset + objectSize * ((i * bytesPerCard + objectSize - 1 - metaOffset) / objectSize);

I&apos;m afraid of this expression. I hope it&apos;s right.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:194
&gt; +            if (isMarked(cell) &amp;&amp; cell-&gt;structure() &amp;&amp; cell-&gt;structure()-&gt;typeInfo().type() &gt;= CompoundType)

How can cell-&gt;structure() be NULL at this point?

Why do a special test for objects without children? (Is it common for old strings to get marked dirty?)

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:198
&gt; +            if (i == m_cards.cardCount - 1 &amp;&amp; ((ptr + objectSize) &gt; end))
&gt; +                break;

If you start out by setting end to min(end, this + m_endAtom * atomSize), you can avoid these two branches each time through the loop.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:203
&gt; +    m_state = Marked;

Ditto about setting m_state to Marked.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:206
&gt; +class TakeIfDirty {

Let&apos;s not call this &quot;Take&quot;, since it doesn&apos;t remove blocks from the heap. How about &quot;GatherDirtyCells&quot;.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:212
&gt; +    ReturnType returnValue() { return 0; }

Another OK option here is to return PassOwnPtr&lt;Vector&gt;, instead of having the calling pass in the Vector.

&gt; Source/JavaScriptCore/heap/Heap.cpp:475
&gt; +    Vector&lt;JSCell*&gt; dirtyObjects;

Inline capacity of 32, please.

&gt; Source/JavaScriptCore/heap/Heap.cpp:478
&gt; +    // Perform young gen sweep 90% of the time
&gt; +    if (WTF::randomNumber() &gt; 0.1)
&gt; +        m_objectSpace.gatherDirtyObjects(dirtyObjects);

This is pretty bad, but I guess it&apos;s OK since it&apos;s #ifdefed out for now.

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:54
&gt; -inline void SlotVisitor::visitChildren(JSCell* cell)
&gt; +void SlotVisitor::visitChildren(JSCell* cell)

Is this OK for performance? You should perf test with GGC off.

&gt; Source/JavaScriptCore/heap/SlotVisitor.h:34
&gt; +    friend class Heap;

A slightly better solution than making all Heap code a friend is to make HeapRootVisitor a friend (as it already is for MarkStack), and give it a visitChildren function. HeapRootVisitor is our abstraction for &quot;I know I&apos;m doing abnormal marking, but it&apos;s OK&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475660</commentid>
    <comment_count>4</comment_count>
      <attachid>109190</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-29 13:47:32 -0700</bug_when>
    <thetext>Comment on attachment 109190
Patch

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

I think there&apos;s enough reworking here for an r-.

&gt;&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1209
&gt;&gt; +    jit.andPtr(TrustedImm32(MarkedBlock::cardCount - 1), scratch2);
&gt; 
&gt; Relies on cardCount being a power of 2. The guarantee of that is far away from here. I’d suggest having a mask constant as well as a count so you can use the mask directly here.

You should make MarkedBlock::cardMask and MarkedBlock::cardShift constants for this.

Would be good to comment this bug fix in your ChangeLog.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:31
&gt; +#include &quot;JSObject.h&quot;

It would be really nice for the Heap not to have to know about JSObject. What is this header used for? I don&apos;t see any direct use of JSObject below.

&gt;&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:167
&gt;&gt; +void MarkedBlock::gatherDirtyObjects(Vector&lt;JSCell*&gt;&amp; dirtyObjects)
&gt; 
&gt; Don’t you have to repeat “inline” here for it to be effective?

I prefer to use the word &quot;cell&quot; in heap code, to emphasize that these are not JSObjects.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:170
&gt; +    if (m_state == New || m_state == FreeListed)
&gt; +        return;

You should ASSERT you&apos;re not in these states.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:173
&gt; +    if (m_state == Allocated)
&gt; +        m_state = Marked;

m_state == Marked means &quot;all unmarked objects in this block are dead&quot;. But I don&apos;t think that&apos;s true after visiting dirty objects. It&apos;s possible for the block to contain a newly allocated cell, which is unmarked and not dead. I think this state change is incorrect. (Why are you doing it?)

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:178
&gt; +    size_t objectSize = cellSize();

This should be &quot;size_t cellSize = this-&gt;cellSize()&quot;, to avoid giving two names to one thing.

&gt;&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:179
&gt;&gt; +    const size_t metaOffset = firstAtom() * atomSize % objectSize;
&gt; 
&gt; What does the const on this line mean? Is this really a compile-time constant?

I&apos;d call this firstCellOffset.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:186
&gt; +            ptr += metaOffset + objectSize * ((i * bytesPerCard + objectSize - 1 - metaOffset) / objectSize);

I&apos;m afraid of this expression. I hope it&apos;s right.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:194
&gt; +            if (isMarked(cell) &amp;&amp; cell-&gt;structure() &amp;&amp; cell-&gt;structure()-&gt;typeInfo().type() &gt;= CompoundType)

How can cell-&gt;structure() be NULL at this point?

Why do a special test for objects without children? (Is it common for old strings to get marked dirty?)

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:198
&gt; +            if (i == m_cards.cardCount - 1 &amp;&amp; ((ptr + objectSize) &gt; end))
&gt; +                break;

If you start out by setting end to min(end, this + m_endAtom * atomSize), you can avoid these two branches each time through the loop.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:203
&gt; +    m_state = Marked;

Ditto about setting m_state to Marked.

&gt;&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:206
&gt;&gt; +class TakeIfDirty {
&gt; 
&gt; This class should be marked non-copyable.

Let&apos;s not call this &quot;Take&quot;, since it doesn&apos;t remove blocks from the heap. How about &quot;GatherDirtyCells&quot;.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:212
&gt; +    ReturnType returnValue() { return 0; }

Another OK option here is to return PassOwnPtr&lt;Vector&gt;, instead of having the calling pass in the Vector.

&gt; Source/JavaScriptCore/heap/Heap.cpp:475
&gt; +    Vector&lt;JSCell*&gt; dirtyObjects;

Inline capacity of 32, please.

&gt; Source/JavaScriptCore/heap/Heap.cpp:478
&gt; +    // Perform young gen sweep 90% of the time
&gt; +    if (WTF::randomNumber() &gt; 0.1)
&gt; +        m_objectSpace.gatherDirtyObjects(dirtyObjects);

This is pretty bad, but I guess it&apos;s OK since it&apos;s #ifdefed out for now.

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:54
&gt; -inline void SlotVisitor::visitChildren(JSCell* cell)
&gt; +void SlotVisitor::visitChildren(JSCell* cell)

Is this OK for performance? You should perf test with GGC off.

&gt;&gt; Source/JavaScriptCore/heap/SlotVisitor.h:34
&gt;&gt; +    friend class Heap;
&gt; 
&gt; Unpleasant to have to do this.

A slightly better solution than making all Heap code a friend is to make HeapRootVisitor a friend (as it already is for MarkStack), and give it a visitChildren function. HeapRootVisitor is our abstraction for &quot;I know I&apos;m doing abnormal marking, but it&apos;s OK&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475696</commentid>
    <comment_count>5</comment_count>
      <attachid>109207</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 14:55:36 -0700</bug_when>
    <thetext>Created attachment 109207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475701</commentid>
    <comment_count>6</comment_count>
      <attachid>109207</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-29 15:00:04 -0700</bug_when>
    <thetext>Comment on attachment 109207
Patch

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

Looks like you didn’t see my comments. Or disagreed.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:166
&gt; +class GatherDirtyCells {

Normally class names would be nouns, not verbs. Even if it is a function object. Like maybe DirtyCellGatherer.

This class needs to be marked non-copyable.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:170
&gt; +    GatherDirtyCells(MarkedBlock::DirtyCellVector*);

This constructor should be marked explicit.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:190
&gt; +    GatherDirtyCells GatherDirtyCells(&amp;dirtyCells);

The local variable’s first letter should be lowercase.

&gt; Source/JavaScriptCore/heap/Heap.cpp:476
&gt; +    // Perform young gen sweep 90% of the time

Still a “what” comment where we need a “why” comment. Still missing a period. Still abbreviating generation as “gen”.

&gt; Source/JavaScriptCore/heap/Heap.cpp:489
&gt; +    if (size_t dirtyObjectCount = dirtyCells.size()) {
&gt; +        for (size_t i = 0; i &lt; dirtyObjectCount; i++) {

Still unneeded if statement where the loop already deals fine with a count of 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475710</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 15:05:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109207 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109207&amp;action=review
&gt; 
&gt; Looks like you didn’t see my comments. Or disagreed.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:166
&gt; &gt; +class GatherDirtyCells {
&gt; 
&gt; Normally class names would be nouns, not verbs. Even if it is a function object. Like maybe DirtyCellGatherer.
&gt; 
&gt; This class needs to be marked non-copyable.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:170
&gt; &gt; +    GatherDirtyCells(MarkedBlock::DirtyCellVector*);
&gt; 

I was using Geoff&apos;s suggestion for the name

&gt; This constructor should be marked explicit.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:190
&gt; &gt; +    GatherDirtyCells GatherDirtyCells(&amp;dirtyCells);
&gt; 
&gt; The local variable’s first letter should be lowercase.

Indeed it should be -- i would have expected the style checker to see that (bad search/repalce action)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475711</commentid>
    <comment_count>8</comment_count>
      <attachid>109211</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 15:08:13 -0700</bug_when>
    <thetext>Created attachment 109211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475720</commentid>
    <comment_count>9</comment_count>
      <attachid>109211</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-29 15:25:22 -0700</bug_when>
    <thetext>Comment on attachment 109211
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1208
&gt;      jit.rshift32(TrustedImm32(MarkedBlock::log2CardSize), scratch2);

This should use MarkedBlock::cardShift.

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:1209
&gt; +    jit.andPtr(TrustedImm32(MarkedBlock::cardMask), scratch2);

Still think you should call out this bug fix in your ChangeLog.

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator32_64.cpp:1258
&gt;      jit.rshift32(TrustedImm32(MarkedBlock::log2CardSize), scratch2);

This should use MarkedBlock::cardShift.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:166
&gt; +class GatherDirtyCells {

Should be non-copyable, as Darin mentioned.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:170
&gt; +    GatherDirtyCells(MarkedBlock::DirtyCellVector*);

Should be explicit, as Darin mentioned.

&gt; Source/JavaScriptCore/heap/Heap.cpp:476
&gt; +    // Perform young gen sweep 90% of the time

Should explain why this is the policy, as Darin mentioned.

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:76
&gt; +        static const int log2CardSize = 10; // ~0.1% overhead

Please rename log2CardSize to cardShift, and add a comment specifying this is log2 of cardSize. I think that&apos;s a better way to have the name reflect what it&apos;s used for, with a comment explaining why it works. (Also, I worry that having a cardMask without a cardShift constant might confuse people into thinking that you can apply just the cardMask to get the card.)

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:319
&gt; +    if (m_state == Allocated)
&gt; +        m_state = Marked;

Now that I understand what this is for:

You have to do this unconditionally, not just for allocated blocks.

I think you should just put this in the GatherDirtyCells functor, with a comment explaining that it&apos;s there as an optimization to avoid walking the heap twice.

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:344
&gt; +        end = ptr;

I think this is a dead store. Did you mean to do something with end here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475724</commentid>
    <comment_count>10</comment_count>
      <attachid>109213</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 15:42:20 -0700</bug_when>
    <thetext>Created attachment 109213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475725</commentid>
    <comment_count>11</comment_count>
      <attachid>109213</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-29 15:49:31 -0700</bug_when>
    <thetext>Comment on attachment 109213
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:39
&gt; +           Tidy the write barrier a bit.

&quot;I rearranged the order of these instructions because it makes them smaller on some platforms with some card sizes&quot;.

&gt; Source/JavaScriptCore/heap/AllocationSpace.cpp:171
&gt; +    GatherDirtyCells(MarkedBlock::DirtyCellVector*);

I award you zero points, and may god have mercy on your soul.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475728</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-29 15:54:59 -0700</bug_when>
    <thetext>Committed r96372</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109190</attachid>
            <date>2011-09-29 12:45:10 -0700</date>
            <delta_ts>2011-09-29 14:55:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69100-20110929124509.patch</filename>
            <type>text/plain</type>
            <size>14180</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDM4
NjdlNzJiMjllMzVkZjAzMzU5YzdmYjliZjFmMDgyOWQ5YmQ3N2QuLmM2ZjllNzlmNDFmZGE0NWI2
OTZkMDBhOWFmOGQxOWEzMjI5YjYwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA5LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGxvZ2ljIHRvIGNvbGxlY3QgZGlydHkgb2JqZWN0cyBhcyByb290cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGdpdmVzIHVz
IHRoZSBhYmlsaXR5IHRvIHdhbGsgYWxsIHRoZSBNYXJrZWRCbG9ja3MgaW4gYW4KKyAgICAgICAg
QWxsb2NhdGlvblNwYWNlIGFuZCBjb2xsZWN0IHRoZSBkaXJ0eSBvYmplY3RzLCBhbmQgdGhlbiB1
c2UKKyAgICAgICAgdGhlbSBhcyBHQyByb290cy4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjptYXJr
Q2VsbENhcmQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxsQ2FyZCk6CisgICAg
ICAgICogaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwOgorICAgICAgICAgICBUaWR5IHVwIHRoZSB3
cml0ZSBiYXJyaWVyIGxvZ2ljIGEgYml0CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpnYXRo
ZXJEaXJ0eU9iamVjdHMpOgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6cmV0dXJuVmFsdWUp
OgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6VGFrZUlmRGlydHkpOgorICAgICAgICAoSlND
OjpUYWtlSWZEaXJ0eTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkFsbG9jYXRpb25TcGFj
ZTo6Z2F0aGVyRGlydHlPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRpb25TcGFjZS5o
OgorICAgICAgICAqIGhlYXAvQ2FyZFNldC5oOgorICAgICAgICAoSlNDOjo6OmlzQ2FyZE1hcmtl
ZCk6CisgICAgICAgIChKU0M6Ojo6Y2xlYXJDYXJkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnNldERpcnR5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFkZHJlc3NPZkNh
cmRGb3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIp
OgorICAgICAgICAgICBUaWR5IHRoZSB3cml0ZSBiYXJyaWVyIGEgYml0CisKIDIwMTEtMDktMjkg
IFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CiAKICAgICAgICAgQnVnIGZp
eGVzIGZvciBDcmVhdGVUaGlzLCBOZXdPYmplY3QgYW5kIEdldEJ5T2Zmc2V0IGluIEpTVkFMVUUz
Ml82NCBERkcgSklUCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAppbmRleCBlOGY2MGVlMGMxOGYxNDc2YWU0YWJiMzIxYWFjNTE5ZTQzMDRh
MDlkLi5hNWMwZmYxYmJjZWQ4ZDUxNDZkNjhmNjdiNmUyYTNjZDJiZGY3OWFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKQEAgLTEy
MDUsOCArMTIwNSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxDYXJkKE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjCiAgICAgaml0Lm1vdmUob3du
ZXIsIHNjcmF0Y2gxKTsKICAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKICAgICBqaXQubW92
ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gyKTsKICAgICBq
aXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cyQ2FyZFNpemUpLCBzY3Jh
dGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRDb3Vu
dCAtIDEpLCBzY3JhdGNoMik7CiAgICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIoMSksIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkNhcmRzKCkpKTsKICNlbmRpZgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJf
NjQuY3BwCmluZGV4IDZmYjM0YmZlMWY2NzlmODJjM2VjZWI2MmIzN2E2NDcwYTIxYTIyYzMuLjUx
YTVhNjBhOWZiNDU1Y2Q4YzJjZTAwZTIyOTY3ZGI1YmI4ZDA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKQEAg
LTEyNTUsOCArMTI1NSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxDYXJkKE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjCiAgICAgaml0Lm1vdmUo
b3duZXIsIHNjcmF0Y2gxKTsKICAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKICAgICBqaXQu
bW92ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gyKTsKICAg
ICBqaXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cyQ2FyZFNpemUpLCBz
Y3JhdGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRD
b3VudCAtIDEpLCBzY3JhdGNoMik7CiAgICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIoMSksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZkNhcmRzKCkpKTsKICNlbmRpZgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKaW5kZXgg
YjU0OGU0OWRmMjkxNWYxOTRmMjkxNTU5ZTc5ODg0N2ZiMDc0NWQzZS4uYTFlNmZlYmIxNTZlMTJh
Yjc0NDg2OTcyMTNiZTdjMDYzOGQwN2Q3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQWxs
b2NhdGlvblNwYWNlLmgiCiAKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKIAogI2RlZmluZSBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04gMAogCkBAIC0xNjIsNCAr
MTYzLDczIEBAIHZvaWQgQWxsb2NhdGlvblNwYWNlOjpzaHJpbmsoKQogICAgIGZyZWVCbG9ja3Mo
Zm9yRWFjaEJsb2NrKHRha2VJZlVubWFya2VkKSk7CiB9CiAKKyNpZiBFTkFCTEUoR0dDKQordm9p
ZCBNYXJrZWRCbG9jazo6Z2F0aGVyRGlydHlPYmplY3RzKFZlY3RvcjxKU0NlbGwqPiYgZGlydHlP
YmplY3RzKQoreworICAgIGlmIChtX3N0YXRlID09IE5ldyB8fCBtX3N0YXRlID09IEZyZWVMaXN0
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zdGF0ZSA9PSBBbGxvY2F0ZWQp
CisgICAgICAgIG1fc3RhdGUgPSBNYXJrZWQ7CisKKyAgICBpZiAobWFya0NvdW50SXNaZXJvKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IGNlbGxTaXpl
KCk7CisgICAgY29uc3Qgc2l6ZV90IG1ldGFPZmZzZXQgPSBmaXJzdEF0b20oKSAqIGF0b21TaXpl
ICUgb2JqZWN0U2l6ZTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FyZHMu
Y2FyZENvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKCFtX2NhcmRzLmlzQ2FyZE1hcmtlZChpKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjaGFyKiBwdHIgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKTsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBwdHIgKz0gbWV0
YU9mZnNldCArIG9iamVjdFNpemUgKiAoKGkgKiBieXRlc1BlckNhcmQgKyBvYmplY3RTaXplIC0g
MSAtIG1ldGFPZmZzZXQpIC8gb2JqZWN0U2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHB0ciArPSBmaXJzdEF0b20oKSAqIGF0b21TaXplOworICAgICAgICBjaGFyKiBlbmQgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIChpICsgMSkgKiBieXRlc1BlckNhcmQ7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICBKU0NlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHB0cik7CisgICAgICAgICAgICBBU1NFUlQo
KmFkZHJlc3NPZkNhcmRGb3IoY2VsbCkpOworICAgICAgICAgICAgaWYgKGlzTWFya2VkKGNlbGwp
ICYmIGNlbGwtPnN0cnVjdHVyZSgpICYmIGNlbGwtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5
cGUoKSA+PSBDb21wb3VuZFR5cGUpCisgICAgICAgICAgICAgICAgZGlydHlPYmplY3RzLmFwcGVu
ZChjZWxsKTsKKyAgICAgICAgICAgIHB0ciArPSBvYmplY3RTaXplOworICAgICAgICAgICAgaWYg
KGkgPT0gbV9jYXJkcy5jYXJkQ291bnQgLSAxICYmICgocHRyICsgb2JqZWN0U2l6ZSkgPiBlbmQp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVuZCA9IHB0cjsK
KyAgICAgICAgbV9jYXJkcy5jbGVhckNhcmQoaSk7CisgICAgfQorICAgIG1fc3RhdGUgPSBNYXJr
ZWQ7Cit9CisgICAgCitjbGFzcyBUYWtlSWZEaXJ0eSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkKiBSZXR1cm5UeXBlOworICAgIAorICAgIFRha2VJZkRpcnR5KFZlY3RvcjxKU0NlbGwqPiop
OworICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayopOworICAgIFJldHVyblR5cGUgcmV0
dXJuVmFsdWUoKSB7IHJldHVybiAwOyB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxKU0Nl
bGwqPiogbV9kaXJ0eU9iamVjdHM7Cit9OworCitpbmxpbmUgVGFrZUlmRGlydHk6OlRha2VJZkRp
cnR5KFZlY3RvcjxKU0NlbGwqPiogZGlydHlPYmplY3RzKQorICAgIDogbV9kaXJ0eU9iamVjdHMo
ZGlydHlPYmplY3RzKQoreworfQorCitpbmxpbmUgdm9pZCBUYWtlSWZEaXJ0eTo6b3BlcmF0b3Io
KShNYXJrZWRCbG9jayogYmxvY2spCit7CisgICAgYmxvY2stPmdhdGhlckRpcnR5T2JqZWN0cygq
bV9kaXJ0eU9iamVjdHMpOworfQorCit2b2lkIEFsbG9jYXRpb25TcGFjZTo6Z2F0aGVyRGlydHlP
YmplY3RzKFZlY3RvcjxKU0NlbGwqPiYgZGlydHlPYmplY3RzKQoreworICAgIFRha2VJZkRpcnR5
IHRha2VJZkRpcnR5KCZkaXJ0eU9iamVjdHMpOworICAgIGZvckVhY2hCbG9jayh0YWtlSWZEaXJ0
eSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdGlvblNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
aW9uU3BhY2UuaAppbmRleCAyMjcwZWUwNjdiNjhjODAzZDAyY2JhMzVkNDliNjJjZDYyZjA5Mjhm
Li41YzllYTA1NzhmYzc1NzBkYWVhNGEzNjgyN2FjYTdiNjllMDQ2OTQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuaApAQCAtNTAsNyArNTAsOSBAQCBw
dWJsaWM6CiAgICAgTWFya2VkU3BhY2U6OlNpemVDbGFzcyYgc2l6ZUNsYXNzRm9yKHNpemVfdCBi
eXRlcykgeyByZXR1cm4gbV9tYXJrZWRTcGFjZS5zaXplQ2xhc3NGb3IoYnl0ZXMpOyB9CiAgICAg
dm9pZCBzZXRIaWdoV2F0ZXJNYXJrKHNpemVfdCBieXRlcykgeyBtX21hcmtlZFNwYWNlLnNldEhp
Z2hXYXRlck1hcmsoYnl0ZXMpOyB9CiAgICAgc2l6ZV90IGhpZ2hXYXRlck1hcmsoKSB7IHJldHVy
biBtX21hcmtlZFNwYWNlLmhpZ2hXYXRlck1hcmsoKTsgfQotICAgIAorCisgICAgdm9pZCBnYXRo
ZXJEaXJ0eU9iamVjdHMoVmVjdG9yPEpTQ2VsbCo+Jik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hDZWxsKEZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpS
ZXR1cm5UeXBlIGZvckVhY2hDZWxsKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoQmxvY2soRnVuY3RvciYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oCmluZGV4IGYwMzA5N2Q2YTFjYTFjMDAyOWU2MTM3
NGNkZTlkOGRiNTEzM2QxMDguLjk5NTFlOTk2MGM5YjQ2N2M3MWMxZTc2ZDA5N2FjZmEyMjA2YjNm
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKQEAgLTM0LDkgKzM0LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8c2l6ZV90IGNhcmRTaXplLCBzaXplX3QgYmxv
Y2tTaXplPiBjbGFzcyBDYXJkU2V0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYXJkU2V0
KTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNhcmRDb3VudCA9IChibG9ja1NpemUgKyBjYXJk
U2l6ZSAtIDEpIC8gY2FyZFNpemU7CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNhcmRDb3VudCA9IChibG9ja1NpemUgKyBjYXJkU2l6ZSAtIDEpIC8gY2FyZFNpemU7CisKICAg
ICBDYXJkU2V0KCkKICAgICB7CiAgICAgICAgIG1lbXNldChtX2NhcmRzLCAwLCBjYXJkQ291bnQp
OwpAQCAtNDUsNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NhcmRNYXJrZWRGb3JBdG9t
KGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIG1hcmtDYXJkRm9yQXRvbShjb25zdCB2b2lkKik7CiAg
ICAgdWludDhfdCYgY2FyZEZvckF0b20oY29uc3Qgdm9pZCopOworICAgIGJvb2wgaXNDYXJkTWFy
a2VkKHNpemVfdCk7CisgICAgdm9pZCBjbGVhckNhcmQoc2l6ZV90KTsKIAogcHJpdmF0ZToKICAg
ICB1aW50OF90IG1fY2FyZHNbY2FyZENvdW50XTsKQEAgLTY5LDYgKzcyLDE4IEBAIHRlbXBsYXRl
IDxzaXplX3QgY2FyZFNpemUsIHNpemVfdCBibG9ja1NpemU+IHZvaWQgQ2FyZFNldDxjYXJkU2l6
ZSwgYmxvY2tTaXplPjo6CiAgICAgY2FyZEZvckF0b20ocHRyKSA9IDE7CiB9CiAKK3RlbXBsYXRl
IDxzaXplX3QgY2FyZFNpemUsIHNpemVfdCBibG9ja1NpemU+IGJvb2wgQ2FyZFNldDxjYXJkU2l6
ZSwgYmxvY2tTaXplPjo6aXNDYXJkTWFya2VkKHNpemVfdCBpKQoreworICAgIEFTU0VSVChpIDwg
Y2FyZENvdW50KTsKKyAgICByZXR1cm4gbV9jYXJkc1tpXTsKK30KKwordGVtcGxhdGUgPHNpemVf
dCBjYXJkU2l6ZSwgc2l6ZV90IGJsb2NrU2l6ZT4gdm9pZCBDYXJkU2V0PGNhcmRTaXplLCBibG9j
a1NpemU+OjpjbGVhckNhcmQoc2l6ZV90IGkpCit7CisgICAgQVNTRVJUKGkgPCBjYXJkQ291bnQp
OworICAgIG1fY2FyZHNbaV0gPSAwOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAppbmRleCBmMGIzYzA5NTYzZDQ0MWYxYzE3MzIxZDE0NTU0YTg0MmFiMDgw
MDhhLi43YTMwZmQzZTg5OTAwNTQ0Nzk4NDQwNGEzMWE3ZGZhNjQwZWZkNjhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNDcxLDEyICs0NzEsMjggQEAgdm9pZCBIZWFwOjpt
YXJrUm9vdHMoKQogICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwogICAg
IHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3Rz
LCBtX2pldHRpc29uZWRDb2RlQmxvY2tzKTsKICAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmRl
bGV0ZVVubWFya2VkQ29kZUJsb2NrcygpOworI2lmIEVOQUJMRShHR0MpCisgICAgVmVjdG9yPEpT
Q2VsbCo+IGRpcnR5T2JqZWN0czsKKyAgICAvLyBQZXJmb3JtIHlvdW5nIGdlbiBzd2VlcCA5MCUg
b2YgdGhlIHRpbWUKKyAgICBpZiAoV1RGOjpyYW5kb21OdW1iZXIoKSA+IDAuMSkKKyAgICAgICAg
bV9vYmplY3RTcGFjZS5nYXRoZXJEaXJ0eU9iamVjdHMoZGlydHlPYmplY3RzKTsKKyAgICBlbHNl
CisjZW5kaWYKKyAgICAgICAgY2xlYXJNYXJrcygpOwogCi0gICAgY2xlYXJNYXJrcygpOwogCiAg
ICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IgPSBtX3Nsb3RWaXNpdG9yOwogICAgIEhlYXBSb290Vmlz
aXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7Ci0gICAgCisKKyNpZiBFTkFCTEUoR0dDKQor
ICAgIGlmIChzaXplX3QgZGlydHlPYmplY3RDb3VudCA9IGRpcnR5T2JqZWN0cy5zaXplKCkpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJ0eU9iamVjdENvdW50OyBpKyspIHsK
KyAgICAgICAgICAgIHZpc2l0b3IudmlzaXRDaGlsZHJlbihkaXJ0eU9iamVjdHNbaV0pOworICAg
ICAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAg
ICB2aXNpdG9yLmFwcGVuZChtYWNoaW5lVGhyZWFkUm9vdHMpOwogICAgIHZpc2l0b3IuZHJhaW4o
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IDkyNWE5ZDZlYjIzZjY3NmU1NWQ0
YjU3MDdlZmVkOTQwZGZhMGVlNmQuLjJkOTNiY2RkNjdkN2Q5ODQ3NGQ2YWI2ZmUwZmQzZTIyMmNj
NjU3ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTI0MCw3ICsyNDAsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiBvd25lciwgSlNDZWxsKikKICAgICB7CiAgICAgICAgIFdyaXRlQmFycmllckNvdW50
ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwotICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
b3duZXIpLT5zZXREaXJ0eU9iamVjdChvd25lcik7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgICAgIGlmIChibG9jay0+aXNN
YXJrZWQob3duZXIpKQorICAgICAgICAgICAgYmxvY2stPnNldERpcnR5T2JqZWN0KG93bmVyKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suY3BwCmluZGV4IGMzOWM1N2ZjNGRkZDMwMjYzYzcwNzE1NDBlNTA4ZGNhYTEwZDhmY2MuLjdj
Y2Y4YjNlMDQxNDkwNzI2ODE1YmJlMTQ4MjRiNGI4NzI2YWZhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE1hcmtTdGFj
azo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKICAgICAgICAg
aW50ZXJuYWxBcHBlbmQocm9vdHNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwpCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCkKIHsKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQog
ICAgIG1fdmlzaXRlZFR5cGVDb3VudHMuY291bnQoY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAppbmRleCBiM2UyNDFmZjk2MTMyODY3MmI2N2RmZDc4OWQxZjM2
OTA2MmQxZDA0Li5mMzdlN2FiOWIyOGYwNDRkNGIwYWU2MTIyOTA2ZDYxNDVkNGQ1YTEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiAvLyBTZXQgdG8gbG9nIHN0YXRlIHRyYW5zaXRpb25zIG9mIGJsb2Nr
cy4KICNkZWZpbmUgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTlMgMApAQCAtNzIsOCAr
NzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9j
a01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9m
IHR3by4KIAogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21zUGVyQmxvY2sgPSBibG9j
a1NpemUgLyBhdG9tU2l6ZTsgLy8gfjAuNCUgb3ZlcmhlYWQKLSAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBieXRlc1BlckNhcmQgPSA1MTI7IC8vIDEuNiUgb3ZlcmhlYWQKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBsb2cyQ2FyZFNpemUgPSA5OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGxvZzJDYXJkU2l6ZSA9IDEwOyAvLyB+MC4xJSBvdmVyaGVhZAorICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGJ5dGVzUGVyQ2FyZCA9IDEgPDwgbG9nMkNhcmRTaXplOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGNhcmRDb3VudCA9IGJsb2NrU2l6ZSAvIGJ5dGVzUGVyQ2FyZDsKIAogICAg
ICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQ7CkBAIC0x
MjMsMTEgKzEyNSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoR0dDKQogICAgICAg
ICB2b2lkIHNldERpcnR5T2JqZWN0KGNvbnN0IHZvaWQqIGF0b20pCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChNYXJrZWRCbG9jazo6YmxvY2tGb3IoYXRvbSkgPT0gdGhpcyk7CiAgICAg
ICAgICAgICBtX2NhcmRzLm1hcmtDYXJkRm9yQXRvbShhdG9tKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoY29uc3Qgdm9pZCogYXRvbSkKICAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihhdG9tKSA9PSB0aGlz
KTsKICAgICAgICAgICAgIHJldHVybiAmbV9jYXJkcy5jYXJkRm9yQXRvbShhdG9tKTsKICAgICAg
ICAgfQogCkBAIC0xMzUsNiArMTM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ssIG1fY2FyZHMpOwog
ICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIHZvaWQgZ2F0aGVyRGlydHlPYmplY3RzKFZlY3Rv
cjxKU0NlbGwqPiYpOwogI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaENlbGwoRnVuY3RvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgKaW5kZXggOTE0M2IwMmYxMzNhMGZjZmQ3MDBmYWY2ODcwMGMwOTg4MWJl
ZjU3Mi4uYjMzMjU4OGY5NDhmMGIwMmEwYzU0MzY4MDk5MDczZWYwMmQwOTg2MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgU2xvdFZpc2l0b3IgOiBwdWJsaWMgTWFya1N0YWNrIHsKKyAg
ICBmcmllbmQgY2xhc3MgSGVhcDsKIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcih2b2lkKiBqc0Fy
cmF5VlB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKaW5kZXggMTBlZWE0YjlhY2QyNjcxMDVkMzY0YjE2ZGZmN2U1MzkxYzE2MmJiYy4u
MmRhMWM4YWNkY2ExNGEwMTQ4OGIxZDcwOTQ3ZTBkNTVlOGRlZmZhZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTEwNDQsOCArMTA0
NCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lz
dGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjCiAgICAgbW92ZShvd25lciwgc2NyYXRjaCk7
CiAgICAgYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihNYXJrZWRCbG9j
azo6YmxvY2tNYXNrKSksIHNjcmF0Y2gpOwogICAgIG1vdmUob3duZXIsIHNjcmF0Y2gyKTsKLSAg
ICBhbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6
YmxvY2tNYXNrKSksIHNjcmF0Y2gyKTsKICAgICByc2hpZnQzMihUcnVzdGVkSW1tMzIoTWFya2Vk
QmxvY2s6OmxvZzJDYXJkU2l6ZSksIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoVHJ1c3RlZEltbTMy
KE1hcmtlZEJsb2NrOjpjYXJkQ291bnQgLSAxKSwgc2NyYXRjaDIpOwogICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksIEJhc2VJbmRleChzY3JhdGNoLCBzY3JhdGNoMiwgVGltZXNPbmUsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZkNhcmRzKCkpKTsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJ
bW1lZGlhdGVzKQogICAgICAgICBmaWx0ZXJDZWxscy5saW5rKHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109207</attachid>
            <date>2011-09-29 14:55:36 -0700</date>
            <delta_ts>2011-09-29 15:08:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69100-20110929145535.patch</filename>
            <type>text/plain</type>
            <size>15098</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRj
ZjJlZWJiYjYwNmVhMGI3YTMyOTcxZTgzMTI5YjdkY2NkM2E4ODIuLmQwN2RkMzYyNDY3YWFkYjNi
YTU4NTliNmZkYjJhZmNlNjFmMjVjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA5LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGxvZ2ljIHRvIGNvbGxlY3QgZGlydHkgb2JqZWN0cyBhcyByb290cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGdpdmVzIHVz
IHRoZSBhYmlsaXR5IHRvIHdhbGsgYWxsIHRoZSBNYXJrZWRCbG9ja3MgaW4gYW4KKyAgICAgICAg
QWxsb2NhdGlvblNwYWNlIGFuZCBjb2xsZWN0IHRoZSBkaXJ0eSBvYmplY3RzLCBhbmQgdGhlbiB1
c2UKKyAgICAgICAgdGhlbSBhcyBHQyByb290cy4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjptYXJr
Q2VsbENhcmQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxsQ2FyZCk6CisgICAg
ICAgICogaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwOgorICAgICAgICAgICBUaWR5IHVwIHRoZSB3
cml0ZSBiYXJyaWVyIGxvZ2ljIGEgYml0CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpnYXRo
ZXJEaXJ0eU9iamVjdHMpOgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6cmV0dXJuVmFsdWUp
OgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6VGFrZUlmRGlydHkpOgorICAgICAgICAoSlND
OjpUYWtlSWZEaXJ0eTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkFsbG9jYXRpb25TcGFj
ZTo6Z2F0aGVyRGlydHlPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRpb25TcGFjZS5o
OgorICAgICAgICAqIGhlYXAvQ2FyZFNldC5oOgorICAgICAgICAoSlNDOjo6OmlzQ2FyZE1hcmtl
ZCk6CisgICAgICAgIChKU0M6Ojo6Y2xlYXJDYXJkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnNldERpcnR5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFkZHJlc3NPZkNh
cmRGb3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIp
OgorICAgICAgICAgICBUaWR5IHRoZSB3cml0ZSBiYXJyaWVyIGEgYml0CisKIDIwMTEtMDktMjkg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgaW52b2x2aW5nIG1hbnkgKD4gNjQpIHByb3BlcnRpZXMgc29tZXRpbWVzIGNhdXNl
IHN0cnVjdHVyZSBjb3JydXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAppbmRleCBlOGY2MGVlMGMxOGYxNDc2YWU0YWJiMzIxYWFj
NTE5ZTQzMDRhMDlkLi5iMDg4ZjgyNzhhM2JlMzJkMzFhODk1ZjViYTEyMjQzMDYyNzU1OGZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHAKQEAgLTEyMDUsOCArMTIwNSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxD
YXJkKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjCiAgICAgaml0
Lm1vdmUob3duZXIsIHNjcmF0Y2gxKTsKICAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKICAg
ICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gy
KTsKICAgICBqaXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cyQ2FyZFNp
emUpLCBzY3JhdGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6
OmNhcmRNYXNrKSwgc2NyYXRjaDIpOwogICAgIGppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcygpKSk7CiAjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
cjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
cjMyXzY0LmNwcAppbmRleCA2ZmIzNGJmZTFmNjc5ZjgyYzNlY2ViNjJiMzdhNjQ3MGEyMWEyMmMz
Li4yMTIyMmYyZWY4M2M3M2UyZjJiYTI2NDc3MjVlZmMzOWE2MmRiZGYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3Bw
CkBAIC0xMjU1LDggKzEyNTUsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxsQ2Fy
ZChNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzYwogICAgIGppdC5t
b3ZlKG93bmVyLCBzY3JhdGNoMSk7CiAgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oTWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMSk7CiAgICAg
aml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKLSAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMik7
CiAgICAgaml0LnJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6bG9nMkNhcmRTaXpl
KSwgc2NyYXRjaDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpj
YXJkTWFzayksIHNjcmF0Y2gyKTsKICAgICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mQ2FyZHMoKSkpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcAppbmRleCBi
NTQ4ZTQ5ZGYyOTE1ZjE5NGYyOTE1NTllNzk4ODQ3ZmIwNzQ1ZDNlLi44NjJjMzJmNjcxOGYxOWQ1
YjEzNzYwYTNhYmZmMDM4MmZlYTI0MTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKQEAgLTE2Miw0ICsxNjIsMzQgQEAgdm9pZCBBbGxvY2F0
aW9uU3BhY2U6OnNocmluaygpCiAgICAgZnJlZUJsb2Nrcyhmb3JFYWNoQmxvY2sodGFrZUlmVW5t
YXJrZWQpKTsKIH0KIAorI2lmIEVOQUJMRShHR0MpCitjbGFzcyBHYXRoZXJEaXJ0eUNlbGxzIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQqIFJldHVyblR5cGU7CisgICAgCisgICAgR2F0aGVy
RGlydHlDZWxscyhNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9yKik7CisgICAgdm9pZCBvcGVy
YXRvcigpKE1hcmtlZEJsb2NrKik7CisgICAgUmV0dXJuVHlwZSByZXR1cm5WYWx1ZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3Rv
ciogbV9kaXJ0eUNlbGxzOworfTsKKworaW5saW5lIEdhdGhlckRpcnR5Q2VsbHM6OkdhdGhlckRp
cnR5Q2VsbHMoTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciogZGlydHlDZWxscykKKyAgICA6
IG1fZGlydHlDZWxscyhkaXJ0eUNlbGxzKQoreworfQorCitpbmxpbmUgdm9pZCBHYXRoZXJEaXJ0
eUNlbGxzOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+Z2F0
aGVyRGlydHlDZWxscygqbV9kaXJ0eUNlbGxzKTsKK30KKwordm9pZCBBbGxvY2F0aW9uU3BhY2U6
OmdhdGhlckRpcnR5Q2VsbHMoTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciYgZGlydHlDZWxs
cykKK3sKKyAgICBHYXRoZXJEaXJ0eUNlbGxzIEdhdGhlckRpcnR5Q2VsbHMoJmRpcnR5Q2VsbHMp
OworICAgIGZvckVhY2hCbG9jayhHYXRoZXJEaXJ0eUNlbGxzKTsKK30KKyNlbmRpZgorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25TcGFjZS5oCmluZGV4IDIyNzBl
ZTA2N2I2OGM4MDNkMDJjYmEzNWQ0OWI2MmNkNjJmMDkyOGYuLmNjNTFkMWQ1YWExMWFjZTgxMWVk
NDQ5Yjg2ZGUzNDQxNGVlM2M3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25TcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
bG9jYXRpb25TcGFjZS5oCkBAIC01MCw3ICs1MCw5IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFj
ZTo6U2l6ZUNsYXNzJiBzaXplQ2xhc3NGb3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX21hcmtl
ZFNwYWNlLnNpemVDbGFzc0ZvcihieXRlcyk7IH0KICAgICB2b2lkIHNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IGJ5dGVzKSB7IG1fbWFya2VkU3BhY2Uuc2V0SGlnaFdhdGVyTWFyayhieXRlcyk7IH0K
ICAgICBzaXplX3QgaGlnaFdhdGVyTWFyaygpIHsgcmV0dXJuIG1fbWFya2VkU3BhY2UuaGlnaFdh
dGVyTWFyaygpOyB9Ci0gICAgCisKKyAgICB2b2lkIGdhdGhlckRpcnR5Q2VsbHMoTWFya2VkQmxv
Y2s6OkRpcnR5Q2VsbFZlY3RvciYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoQ2VsbChGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBm
b3JFYWNoQ2VsbCgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1
bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaEJsb2NrKEZ1bmN0b3ImKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NhcmRTZXQuaAppbmRleCBmMDMwOTdkNmExY2ExYzAwMjllNjEzNzRjZGU5ZDhkYjUx
MzNkMTA4Li45OTUxZTk5NjBjOWI0NjdjNzFjMWU3NmQwOTdhY2ZhMjIwNmIzZjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oCkBAIC0zNCw5ICszNCwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdGVtcGxhdGUgPHNpemVfdCBjYXJkU2l6ZSwgc2l6ZV90IGJsb2NrU2l6ZT4gY2xh
c3MgQ2FyZFNldCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FyZFNldCk7Ci0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjYXJkQ291bnQgPSAoYmxvY2tTaXplICsgY2FyZFNpemUgLSAxKSAv
IGNhcmRTaXplOwogCiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjYXJkQ291bnQg
PSAoYmxvY2tTaXplICsgY2FyZFNpemUgLSAxKSAvIGNhcmRTaXplOworCiAgICAgQ2FyZFNldCgp
CiAgICAgewogICAgICAgICBtZW1zZXQobV9jYXJkcywgMCwgY2FyZENvdW50KTsKQEAgLTQ1LDYg
KzQ2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJkTWFya2VkRm9yQXRvbShjb25zdCB2b2lk
Kik7CiAgICAgdm9pZCBtYXJrQ2FyZEZvckF0b20oY29uc3Qgdm9pZCopOwogICAgIHVpbnQ4X3Qm
IGNhcmRGb3JBdG9tKGNvbnN0IHZvaWQqKTsKKyAgICBib29sIGlzQ2FyZE1hcmtlZChzaXplX3Qp
OworICAgIHZvaWQgY2xlYXJDYXJkKHNpemVfdCk7CiAKIHByaXZhdGU6CiAgICAgdWludDhfdCBt
X2NhcmRzW2NhcmRDb3VudF07CkBAIC02OSw2ICs3MiwxOCBAQCB0ZW1wbGF0ZSA8c2l6ZV90IGNh
cmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiB2b2lkIENhcmRTZXQ8Y2FyZFNpemUsIGJsb2NrU2l6
ZT46OgogICAgIGNhcmRGb3JBdG9tKHB0cikgPSAxOwogfQogCit0ZW1wbGF0ZSA8c2l6ZV90IGNh
cmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiBib29sIENhcmRTZXQ8Y2FyZFNpemUsIGJsb2NrU2l6
ZT46OmlzQ2FyZE1hcmtlZChzaXplX3QgaSkKK3sKKyAgICBBU1NFUlQoaSA8IGNhcmRDb3VudCk7
CisgICAgcmV0dXJuIG1fY2FyZHNbaV07Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgY2FyZFNpemUs
IHNpemVfdCBibG9ja1NpemU+IHZvaWQgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXplPjo6Y2xl
YXJDYXJkKHNpemVfdCBpKQoreworICAgIEFTU0VSVChpIDwgY2FyZENvdW50KTsKKyAgICBtX2Nh
cmRzW2ldID0gMDsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKaW5kZXggZjBiM2MwOTU2M2Q0NDFmMWMxNzMyMWQxNDU1NGE4NDJhYjA4MDA4YS4uYjNiYjYx
MTU5NGNlYWI1NDUxZmM0YTA3Yjk5NzAwYjQxNzlmN2E4NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKQEAgLTQ3MSwxMiArNDcxLDI4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkK
ICAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKICAgICByZWdpc3RlckZp
bGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290cywgbV9qZXR0aXNv
bmVkQ29kZUJsb2Nrcyk7CiAgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5kZWxldGVVbm1hcmtl
ZENvZGVCbG9ja3MoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIE1hcmtlZEJsb2NrOjpEaXJ0eUNl
bGxWZWN0b3IgZGlydHlDZWxsczsKKyAgICAvLyBQZXJmb3JtIHlvdW5nIGdlbiBzd2VlcCA5MCUg
b2YgdGhlIHRpbWUKKyAgICBpZiAoV1RGOjpyYW5kb21OdW1iZXIoKSA+IDAuMSkKKyAgICAgICAg
bV9vYmplY3RTcGFjZS5nYXRoZXJEaXJ0eUNlbGxzKGRpcnR5Q2VsbHMpOworICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBjbGVhck1hcmtzKCk7CiAKICAgICBT
bG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9y
IGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLSAgICAKKworI2lmIEVOQUJMRShHR0MpCisgICAg
aWYgKHNpemVfdCBkaXJ0eU9iamVjdENvdW50ID0gZGlydHlDZWxscy5zaXplKCkpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJ0eU9iamVjdENvdW50OyBpKyspIHsKKyAgICAg
ICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdENoaWxkcmVuKGRpcnR5Q2VsbHNbaV0pOworICAg
ICAgICAgICAgdmlzaXRvci5kcmFpbigpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAg
ICB2aXNpdG9yLmFwcGVuZChtYWNoaW5lVGhyZWFkUm9vdHMpOwogICAgIHZpc2l0b3IuZHJhaW4o
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IDkyNWE5ZDZlYjIzZjY3NmU1NWQ0
YjU3MDdlZmVkOTQwZGZhMGVlNmQuLjJkOTNiY2RkNjdkN2Q5ODQ3NGQ2YWI2ZmUwZmQzZTIyMmNj
NjU3ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTI0MCw3ICsyNDAsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiBvd25lciwgSlNDZWxsKikKICAgICB7CiAgICAgICAgIFdyaXRlQmFycmllckNvdW50
ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwotICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
b3duZXIpLT5zZXREaXJ0eU9iamVjdChvd25lcik7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgICAgIGlmIChibG9jay0+aXNN
YXJrZWQob3duZXIpKQorICAgICAgICAgICAgYmxvY2stPnNldERpcnR5T2JqZWN0KG93bmVyKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBSb290VmlzaXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFJvb3RWaXNpdG9yLmgKaW5kZXggMTY1ZmEzOTFlZDE3NTE4MjFhYTZmNDM4YWQ1YTIzYzk1NDg0
ZWMzYy4uNmI2Nzk5MDRmNWE1ZDdjYzc5ZDM3MzA1OGYwZjZjYjE1OGE0NWI4YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgKQEAgLTQzLDcgKzQzLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdmlzaXQoSlNWYWx1ZSosIHNpemVfdCk7
CiAgICAgICAgIHZvaWQgdmlzaXQoSlNTdHJpbmcqKik7CiAgICAgICAgIHZvaWQgdmlzaXQoSlND
ZWxsKiopOwotICAgICAgICAKKyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCopOwor
CiAgICAgICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yKCk7CiAKICAgICBwcml2YXRlOgpAQCAtNzUs
NiArNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1fdmlzaXRvci5hcHBlbmQoc2xv
dCk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSGVhcFJvb3RWaXNpdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIG1fdmlzaXRvci52aXNpdENoaWxkcmVu
KGNlbGwpOworICAgIH0KKwogICAgIGlubGluZSBTbG90VmlzaXRvciYgSGVhcFJvb3RWaXNpdG9y
Ojp2aXNpdG9yKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Zpc2l0b3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAppbmRleCBlNTM5YzQxZDkzZjAyNGVmZDYxZDZl
NGIwY2EyMTJkYTcxN2NlNDNjLi5iZjc0YWJiYjIwZjMxZTY5MDYxYTkwN2Y1ZDVkZGVjMDE5MTli
NjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKQEAgLTUxLDcg
KzUxLDcgQEAgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMpCiAgICAgICAgIGludGVybmFsQXBwZW5kKHJvb3RzW2ldKTsKIH0KIAotaW5s
aW5lIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsKQordm9pZCBT
bG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwpCiB7CiAjaWYgRU5BQkxFKFNJ
TVBMRV9IRUFQX1BST0ZJTElORykKICAgICBtX3Zpc2l0ZWRUeXBlQ291bnRzLmNvdW50KGNlbGwp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKaW5kZXggYjNlMjQxZmY5
NjEzMjg2NzJiNjdkZmQ3ODlkMWYzNjkwNjJkMWQwNC4uZTdmMGE2YmMwZTY1ZDUwY2M5NmJlNzE4
NTYzOWIxMGFiYjk1OWMxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogLy8gU2V0IHRvIGxvZyBzdGF0
ZSB0cmFuc2l0aW9ucyBvZiBibG9ja3MuCiAjZGVmaW5lIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RS
QU5TSVRJT05TIDAKQEAgLTcyLDggKzczLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrTWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2Nr
U2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6ZSAvIGF0b21TaXplOyAvLyB+MC40JSBvdmVyaGVh
ZAotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJ5dGVzUGVyQ2FyZCA9IDUxMjsgLy8gMS42
JSBvdmVyaGVhZAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGxvZzJDYXJkU2l6ZSA9IDk7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbG9nMkNhcmRTaXplID0gMTA7IC8vIH4wLjElIG92ZXJo
ZWFkCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYnl0ZXNQZXJDYXJkID0gMSA8PCBsb2cy
Q2FyZFNpemU7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgY2FyZENvdW50ID0gYmxvY2tTaXpl
IC8gYnl0ZXNQZXJDYXJkOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGNhcmRNYXNrID0gY2Fy
ZENvdW50IC0gMTsKIAogICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAgICAgICAgRnJl
ZUNlbGwqIG5leHQ7CkBAIC0xMjMsMTEgKzEyNiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBF
TkFCTEUoR0dDKQogICAgICAgICB2b2lkIHNldERpcnR5T2JqZWN0KGNvbnN0IHZvaWQqIGF0b20p
CiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChNYXJrZWRCbG9jazo6YmxvY2tGb3IoYXRv
bSkgPT0gdGhpcyk7CiAgICAgICAgICAgICBtX2NhcmRzLm1hcmtDYXJkRm9yQXRvbShhdG9tKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoY29uc3Qgdm9p
ZCogYXRvbSkKICAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihhdG9tKSA9PSB0aGlzKTsKICAgICAgICAgICAgIHJldHVybiAmbV9jYXJkcy5jYXJkRm9y
QXRvbShhdG9tKTsKICAgICAgICAgfQogCkBAIC0xMzUsNiArMTQwLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFya2Vk
QmxvY2ssIG1fY2FyZHMpOwogICAgICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8SlND
ZWxsKiwgMzI+IERpcnR5Q2VsbFZlY3RvcjsKKyAgICAgICAgaW5saW5lIHZvaWQgZ2F0aGVyRGly
dHlDZWxscyhEaXJ0eUNlbGxWZWN0b3ImKTsKICNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDZWxsKEZ1bmN0b3ImKTsKQEAgLTMwMCw2ICsz
MDgsNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9CiAKKyNpZiBFTkFCTEUo
R0dDKQordm9pZCBNYXJrZWRCbG9jazo6Z2F0aGVyRGlydHlDZWxscyhEaXJ0eUNlbGxWZWN0b3Im
IGRpcnR5Q2VsbHMpCit7CisgICAgQ09NUElMRV9BU1NFUlQobV9jYXJkcy5jYXJkQ291bnQgPT0g
Y2FyZENvdW50LCBNYXJrZWRCbG9ja0NhcmRDb3VudHNNYXRjaCk7CisKKyAgICBBU1NFUlQobV9z
dGF0ZSAhPSBOZXcgJiYgbV9zdGF0ZSAhPSBGcmVlTGlzdGVkKTsKKyAgICAKKyAgICBpZiAobV9z
dGF0ZSA9PSBBbGxvY2F0ZWQpCisgICAgICAgIG1fc3RhdGUgPSBNYXJrZWQ7CisgICAgCisgICAg
aWYgKG1hcmtDb3VudElzWmVybygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc2l6ZV90
IGNlbGxTaXplID0gdGhpcy0+Y2VsbFNpemUoKTsKKyAgICBjb25zdCBzaXplX3QgZmlyc3RDZWxs
T2Zmc2V0ID0gZmlyc3RBdG9tKCkgKiBhdG9tU2l6ZSAlIGNlbGxTaXplOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYXJkcy5jYXJkQ291bnQ7IGkrKykgeworICAgICAgICBp
ZiAoIW1fY2FyZHMuaXNDYXJkTWFya2VkKGkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOworICAgICAgICBp
ZiAoaSkKKyAgICAgICAgICAgIHB0ciArPSBmaXJzdENlbGxPZmZzZXQgKyBjZWxsU2l6ZSAqICgo
aSAqIGJ5dGVzUGVyQ2FyZCArIGNlbGxTaXplIC0gMSAtIGZpcnN0Q2VsbE9mZnNldCkgLyBjZWxs
U2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHB0ciArPSBmaXJzdEF0b20oKSAqIGF0
b21TaXplOworICAgICAgICBjaGFyKiBlbmQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSArIHN0ZDo6bWluKChpICsgMSkgKiBieXRlc1BlckNhcmQsIG1fZW5kQXRvbSAqIGF0b21TaXpl
KTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIEpT
Q2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4ocHRyKTsKKyAgICAgICAgICAg
IEFTU0VSVCgqYWRkcmVzc09mQ2FyZEZvcihjZWxsKSk7CisgICAgICAgICAgICBpZiAoaXNNYXJr
ZWQoY2VsbCkpCisgICAgICAgICAgICAgICAgZGlydHlDZWxscy5hcHBlbmQoY2VsbCk7CisgICAg
ICAgICAgICBwdHIgKz0gY2VsbFNpemU7CisgICAgICAgIH0KKyAgICAgICAgZW5kID0gcHRyOwor
ICAgICAgICBtX2NhcmRzLmNsZWFyQ2FyZChpKTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgKaW5kZXggOTE0M2IwMmYxMzNhMGZjZmQ3MDBmYWY2ODcwMGMwOTg4MWJl
ZjU3Mi4uZmRkMDliZjViMDU2ODhjYTMxNzY4MGZmMWZkM2E2NDA3ZjBkODAwZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgU2xvdFZpc2l0b3IgOiBwdWJsaWMgTWFya1N0YWNrIHsKKyAg
ICBmcmllbmQgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwogcHVibGljOgogICAgIFNsb3RWaXNpdG9y
KHZvaWQqIGpzQXJyYXlWUHRyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCAxMGVlYTRiOWFjZDI2NzEwNWQzNjRiMTZkZmY3ZTUz
OTFjMTYyYmJjLi5iZmZmODcwMmZmZGM1M2ZlMmEwYWVhOGI3ODQ1MzExYmU4NjYxNDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAt
MTA0NCw4ICsxMDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBv
d25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGMKICAgICBtb3ZlKG93bmVy
LCBzY3JhdGNoKTsKICAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KE1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaCk7CiAgICAgbW92ZShvd25lciwgc2Ny
YXRjaDIpOwotICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofk1h
cmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDIpOwogICAgIHJzaGlmdDMyKFRydXN0ZWRJ
bW0zMihNYXJrZWRCbG9jazo6bG9nMkNhcmRTaXplKSwgc2NyYXRjaDIpOworICAgIGFuZFB0cihU
cnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRNYXNrKSwgc2NyYXRjaDIpOwogICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksIEJhc2VJbmRleChzY3JhdGNoLCBzY3JhdGNoMiwgVGltZXNPbmUs
IE1hcmtlZEJsb2NrOjpvZmZzZXRPZkNhcmRzKCkpKTsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzKQogICAgICAgICBmaWx0ZXJDZWxscy5saW5rKHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109211</attachid>
            <date>2011-09-29 15:08:13 -0700</date>
            <delta_ts>2011-09-29 15:42:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69100-20110929150812.patch</filename>
            <type>text/plain</type>
            <size>15019</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRj
ZjJlZWJiYjYwNmVhMGI3YTMyOTcxZTgzMTI5YjdkY2NkM2E4ODIuLmQwN2RkMzYyNDY3YWFkYjNi
YTU4NTliNmZkYjJhZmNlNjFmMjVjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA5LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGxvZ2ljIHRvIGNvbGxlY3QgZGlydHkgb2JqZWN0cyBhcyByb290cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGdpdmVzIHVz
IHRoZSBhYmlsaXR5IHRvIHdhbGsgYWxsIHRoZSBNYXJrZWRCbG9ja3MgaW4gYW4KKyAgICAgICAg
QWxsb2NhdGlvblNwYWNlIGFuZCBjb2xsZWN0IHRoZSBkaXJ0eSBvYmplY3RzLCBhbmQgdGhlbiB1
c2UKKyAgICAgICAgdGhlbSBhcyBHQyByb290cy4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjptYXJr
Q2VsbENhcmQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxsQ2FyZCk6CisgICAg
ICAgICogaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwOgorICAgICAgICAgICBUaWR5IHVwIHRoZSB3
cml0ZSBiYXJyaWVyIGxvZ2ljIGEgYml0CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpnYXRo
ZXJEaXJ0eU9iamVjdHMpOgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6cmV0dXJuVmFsdWUp
OgorICAgICAgICAoSlNDOjpUYWtlSWZEaXJ0eTo6VGFrZUlmRGlydHkpOgorICAgICAgICAoSlND
OjpUYWtlSWZEaXJ0eTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkFsbG9jYXRpb25TcGFj
ZTo6Z2F0aGVyRGlydHlPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRpb25TcGFjZS5o
OgorICAgICAgICAqIGhlYXAvQ2FyZFNldC5oOgorICAgICAgICAoSlNDOjo6OmlzQ2FyZE1hcmtl
ZCk6CisgICAgICAgIChKU0M6Ojo6Y2xlYXJDYXJkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OnNldERpcnR5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFkZHJlc3NPZkNh
cmRGb3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIp
OgorICAgICAgICAgICBUaWR5IHRoZSB3cml0ZSBiYXJyaWVyIGEgYml0CisKIDIwMTEtMDktMjkg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgaW52b2x2aW5nIG1hbnkgKD4gNjQpIHByb3BlcnRpZXMgc29tZXRpbWVzIGNhdXNl
IHN0cnVjdHVyZSBjb3JydXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAppbmRleCBlOGY2MGVlMGMxOGYxNDc2YWU0YWJiMzIxYWFj
NTE5ZTQzMDRhMDlkLi5iMDg4ZjgyNzhhM2JlMzJkMzFhODk1ZjViYTEyMjQzMDYyNzU1OGZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHAKQEAgLTEyMDUsOCArMTIwNSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxD
YXJkKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjCiAgICAgaml0
Lm1vdmUob3duZXIsIHNjcmF0Y2gxKTsKICAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKICAg
ICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gy
KTsKICAgICBqaXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cyQ2FyZFNp
emUpLCBzY3JhdGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6
OmNhcmRNYXNrKSwgc2NyYXRjaDIpOwogICAgIGppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcygpKSk7CiAjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
cjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
cjMyXzY0LmNwcAppbmRleCA2ZmIzNGJmZTFmNjc5ZjgyYzNlY2ViNjJiMzdhNjQ3MGEyMWEyMmMz
Li4yMTIyMmYyZWY4M2M3M2UyZjJiYTI2NDc3MjVlZmMzOWE2MmRiZGYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3Bw
CkBAIC0xMjU1LDggKzEyNTUsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxsQ2Fy
ZChNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzYwogICAgIGppdC5t
b3ZlKG93bmVyLCBzY3JhdGNoMSk7CiAgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oTWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMSk7CiAgICAg
aml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKLSAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMik7
CiAgICAgaml0LnJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6bG9nMkNhcmRTaXpl
KSwgc2NyYXRjaDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpj
YXJkTWFzayksIHNjcmF0Y2gyKTsKICAgICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mQ2FyZHMoKSkpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcAppbmRleCBi
NTQ4ZTQ5ZGYyOTE1ZjE5NGYyOTE1NTllNzk4ODQ3ZmIwNzQ1ZDNlLi42YWYxY2YxZDIwN2IxMmU3
MWQ4MzEzZGFiMmRhMTk3MWY0NDI1ZTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKQEAgLTE2Miw0ICsxNjIsMzQgQEAgdm9pZCBBbGxvY2F0
aW9uU3BhY2U6OnNocmluaygpCiAgICAgZnJlZUJsb2Nrcyhmb3JFYWNoQmxvY2sodGFrZUlmVW5t
YXJrZWQpKTsKIH0KIAorI2lmIEVOQUJMRShHR0MpCitjbGFzcyBHYXRoZXJEaXJ0eUNlbGxzIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQqIFJldHVyblR5cGU7CisgICAgCisgICAgR2F0aGVy
RGlydHlDZWxscyhNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9yKik7CisgICAgdm9pZCBvcGVy
YXRvcigpKE1hcmtlZEJsb2NrKik7CisgICAgUmV0dXJuVHlwZSByZXR1cm5WYWx1ZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3Rv
ciogbV9kaXJ0eUNlbGxzOworfTsKKworaW5saW5lIEdhdGhlckRpcnR5Q2VsbHM6OkdhdGhlckRp
cnR5Q2VsbHMoTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciogZGlydHlDZWxscykKKyAgICA6
IG1fZGlydHlDZWxscyhkaXJ0eUNlbGxzKQoreworfQorCitpbmxpbmUgdm9pZCBHYXRoZXJEaXJ0
eUNlbGxzOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+Z2F0
aGVyRGlydHlDZWxscygqbV9kaXJ0eUNlbGxzKTsKK30KKwordm9pZCBBbGxvY2F0aW9uU3BhY2U6
OmdhdGhlckRpcnR5Q2VsbHMoTWFya2VkQmxvY2s6OkRpcnR5Q2VsbFZlY3RvciYgZGlydHlDZWxs
cykKK3sKKyAgICBHYXRoZXJEaXJ0eUNlbGxzIGdhdGhlckRpcnR5Q2VsbHMoJmRpcnR5Q2VsbHMp
OworICAgIGZvckVhY2hCbG9jayhnYXRoZXJEaXJ0eUNlbGxzKTsKK30KKyNlbmRpZgorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25TcGFjZS5oCmluZGV4IDIyNzBl
ZTA2N2I2OGM4MDNkMDJjYmEzNWQ0OWI2MmNkNjJmMDkyOGYuLmNjNTFkMWQ1YWExMWFjZTgxMWVk
NDQ5Yjg2ZGUzNDQxNGVlM2M3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25TcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
bG9jYXRpb25TcGFjZS5oCkBAIC01MCw3ICs1MCw5IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFj
ZTo6U2l6ZUNsYXNzJiBzaXplQ2xhc3NGb3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX21hcmtl
ZFNwYWNlLnNpemVDbGFzc0ZvcihieXRlcyk7IH0KICAgICB2b2lkIHNldEhpZ2hXYXRlck1hcmso
c2l6ZV90IGJ5dGVzKSB7IG1fbWFya2VkU3BhY2Uuc2V0SGlnaFdhdGVyTWFyayhieXRlcyk7IH0K
ICAgICBzaXplX3QgaGlnaFdhdGVyTWFyaygpIHsgcmV0dXJuIG1fbWFya2VkU3BhY2UuaGlnaFdh
dGVyTWFyaygpOyB9Ci0gICAgCisKKyAgICB2b2lkIGdhdGhlckRpcnR5Q2VsbHMoTWFya2VkQmxv
Y2s6OkRpcnR5Q2VsbFZlY3RvciYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoQ2VsbChGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBm
b3JFYWNoQ2VsbCgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1
bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaEJsb2NrKEZ1bmN0b3ImKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NhcmRTZXQuaAppbmRleCBmMDMwOTdkNmExY2ExYzAwMjllNjEzNzRjZGU5ZDhkYjUx
MzNkMTA4Li45OTUxZTk5NjBjOWI0NjdjNzFjMWU3NmQwOTdhY2ZhMjIwNmIzZjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oCkBAIC0zNCw5ICszNCwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdGVtcGxhdGUgPHNpemVfdCBjYXJkU2l6ZSwgc2l6ZV90IGJsb2NrU2l6ZT4gY2xh
c3MgQ2FyZFNldCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FyZFNldCk7Ci0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjYXJkQ291bnQgPSAoYmxvY2tTaXplICsgY2FyZFNpemUgLSAxKSAv
IGNhcmRTaXplOwogCiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjYXJkQ291bnQg
PSAoYmxvY2tTaXplICsgY2FyZFNpemUgLSAxKSAvIGNhcmRTaXplOworCiAgICAgQ2FyZFNldCgp
CiAgICAgewogICAgICAgICBtZW1zZXQobV9jYXJkcywgMCwgY2FyZENvdW50KTsKQEAgLTQ1LDYg
KzQ2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJkTWFya2VkRm9yQXRvbShjb25zdCB2b2lk
Kik7CiAgICAgdm9pZCBtYXJrQ2FyZEZvckF0b20oY29uc3Qgdm9pZCopOwogICAgIHVpbnQ4X3Qm
IGNhcmRGb3JBdG9tKGNvbnN0IHZvaWQqKTsKKyAgICBib29sIGlzQ2FyZE1hcmtlZChzaXplX3Qp
OworICAgIHZvaWQgY2xlYXJDYXJkKHNpemVfdCk7CiAKIHByaXZhdGU6CiAgICAgdWludDhfdCBt
X2NhcmRzW2NhcmRDb3VudF07CkBAIC02OSw2ICs3MiwxOCBAQCB0ZW1wbGF0ZSA8c2l6ZV90IGNh
cmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiB2b2lkIENhcmRTZXQ8Y2FyZFNpemUsIGJsb2NrU2l6
ZT46OgogICAgIGNhcmRGb3JBdG9tKHB0cikgPSAxOwogfQogCit0ZW1wbGF0ZSA8c2l6ZV90IGNh
cmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiBib29sIENhcmRTZXQ8Y2FyZFNpemUsIGJsb2NrU2l6
ZT46OmlzQ2FyZE1hcmtlZChzaXplX3QgaSkKK3sKKyAgICBBU1NFUlQoaSA8IGNhcmRDb3VudCk7
CisgICAgcmV0dXJuIG1fY2FyZHNbaV07Cit9CisKK3RlbXBsYXRlIDxzaXplX3QgY2FyZFNpemUs
IHNpemVfdCBibG9ja1NpemU+IHZvaWQgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXplPjo6Y2xl
YXJDYXJkKHNpemVfdCBpKQoreworICAgIEFTU0VSVChpIDwgY2FyZENvdW50KTsKKyAgICBtX2Nh
cmRzW2ldID0gMDsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKaW5kZXggZjBiM2MwOTU2M2Q0NDFmMWMxNzMyMWQxNDU1NGE4NDJhYjA4MDA4YS4uYzIzOWFm
MmY5Njk1NmVlYzZjYjFkNDQ5ODJlNzQwMTQ3MzM1MTczYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKQEAgLTQ3MSwxMiArNDcxLDI2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkK
ICAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKICAgICByZWdpc3RlckZp
bGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290cywgbV9qZXR0aXNv
bmVkQ29kZUJsb2Nrcyk7CiAgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5kZWxldGVVbm1hcmtl
ZENvZGVCbG9ja3MoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIE1hcmtlZEJsb2NrOjpEaXJ0eUNl
bGxWZWN0b3IgZGlydHlDZWxsczsKKyAgICAvLyBQZXJmb3JtIHlvdW5nIGdlbiBzd2VlcCA5MCUg
b2YgdGhlIHRpbWUKKyAgICBpZiAoV1RGOjpyYW5kb21OdW1iZXIoKSA+IDAuMSkKKyAgICAgICAg
bV9vYmplY3RTcGFjZS5nYXRoZXJEaXJ0eUNlbGxzKGRpcnR5Q2VsbHMpOworICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBjbGVhck1hcmtzKCk7CiAKICAgICBT
bG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9y
IGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLSAgICAKKworI2lmIEVOQUJMRShHR0MpCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJ0eU9iamVjdENvdW50OyBpKyspIHsKKyAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0Q2hpbGRyZW4oZGlydHlDZWxsc1tpXSk7CisgICAgICAgIHZp
c2l0b3IuZHJhaW4oKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hp
bmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKaW5kZXggOTI1YTlkNmViMjNmNjc2ZTU1ZDRiNTcwN2VmZWQ5NDBkZmEwZWU2ZC4u
MmQ5M2JjZGQ2N2Q3ZDk4NDc0ZDZhYjZmZTBmZDNlMjIyY2M2NTdmNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaApAQCAtMjQwLDcgKzI0MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlu
bGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwq
KQogICAgIHsKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVy
KCk7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lciktPnNldERpcnR5T2JqZWN0
KG93bmVyKTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2Nr
Rm9yKG93bmVyKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc01hcmtlZChvd25lcikpCisgICAgICAg
ICAgICBibG9jay0+c2V0RGlydHlPYmplY3Qob3duZXIpOwogICAgIH0KIAogICAgIGlubGluZSB2
b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaAppbmRleCAx
NjVmYTM5MWVkMTc1MTgyMWFhNmY0MzhhZDVhMjNjOTU0ODRlYzNjLi42YjY3OTkwNGY1YTVkN2Nj
NzlkMzczMDU4ZjBmNmNiMTU4YTQ1YjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwUm9vdFZpc2l0b3IuaApAQCAtNDMsNyArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCB2aXNpdChKU1ZhbHVlKiwgc2l6ZV90KTsKICAgICAgICAgdm9pZCB2aXNpdChK
U1N0cmluZyoqKTsKICAgICAgICAgdm9pZCB2aXNpdChKU0NlbGwqKik7Ci0gICAgICAgIAorICAg
ICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKik7CisKICAgICAgICAgU2xvdFZpc2l0b3Im
IHZpc2l0b3IoKTsKIAogICAgIHByaXZhdGU6CkBAIC03NSw2ICs3NiwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgbV92aXNpdG9yLmFwcGVuZChzbG90KTsKICAgICB9CiAKKyAgICBpbmxp
bmUgdm9pZCBIZWFwUm9vdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsKQorICAg
IHsKKyAgICAgICAgbV92aXNpdG9yLnZpc2l0Q2hpbGRyZW4oY2VsbCk7CisgICAgfQorCiAgICAg
aW5saW5lIFNsb3RWaXNpdG9yJiBIZWFwUm9vdFZpc2l0b3I6OnZpc2l0b3IoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fdmlzaXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suY3BwCmluZGV4IGU1MzljNDFkOTNmMDI0ZWZkNjFkNmU0YjBjYTIxMmRhNzE3Y2U0M2MuLmJm
NzRhYmJiMjBmMzFlNjkwNjFhOTA3ZjVkNWRkZWMwMTkxOWI2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIE1hcmtTdGFj
azo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKICAgICAgICAg
aW50ZXJuYWxBcHBlbmQocm9vdHNbaV0pOwogfQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwpCit2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCkKIHsKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQog
ICAgIG1fdmlzaXRlZFR5cGVDb3VudHMuY291bnQoY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAppbmRleCBiM2UyNDFmZjk2MTMyODY3MmI2N2RmZDc4OWQxZjM2
OTA2MmQxZDA0Li5lN2YwYTZiYzBlNjVkNTBjYzk2YmU3MTg1NjM5YjEwYWJiOTU5YzExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbkFsaWduZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiAvLyBTZXQgdG8gbG9nIHN0YXRlIHRyYW5zaXRpb25zIG9mIGJsb2Nr
cy4KICNkZWZpbmUgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTlMgMApAQCAtNzIsOCAr
NzMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxv
Y2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uCiAKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tc1BlckJsb2NrID0gYmxv
Y2tTaXplIC8gYXRvbVNpemU7IC8vIH4wLjQlIG92ZXJoZWFkCi0gICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYnl0ZXNQZXJDYXJkID0gNTEyOyAvLyAxLjYlIG92ZXJoZWFkCi0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbG9nMkNhcmRTaXplID0gOTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBsb2cyQ2FyZFNpemUgPSAxMDsgLy8gfjAuMSUgb3ZlcmhlYWQKKyAgICAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBieXRlc1BlckNhcmQgPSAxIDw8IGxvZzJDYXJkU2l6ZTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBjYXJkQ291bnQgPSBibG9ja1NpemUgLyBieXRlc1BlckNhcmQ7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgY2FyZE1hc2sgPSBjYXJkQ291bnQgLSAxOwogCiAgICAgICAg
IHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dDsKQEAgLTEyMywx
MSArMTI2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShHR0MpCiAgICAgICAgIHZv
aWQgc2V0RGlydHlPYmplY3QoY29uc3Qgdm9pZCogYXRvbSkKICAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpibG9ja0ZvcihhdG9tKSA9PSB0aGlzKTsKICAgICAgICAg
ICAgIG1fY2FyZHMubWFya0NhcmRGb3JBdG9tKGF0b20pOwogICAgICAgICB9CiAKICAgICAgICAg
dWludDhfdCogYWRkcmVzc09mQ2FyZEZvcihjb25zdCB2b2lkKiBhdG9tKQogICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGF0b20pID09IHRoaXMpOwog
ICAgICAgICAgICAgcmV0dXJuICZtX2NhcmRzLmNhcmRGb3JBdG9tKGF0b20pOwogICAgICAgICB9
CiAKQEAgLTEzNSw2ICsxNDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRCbG9jaywgbV9jYXJkcyk7CiAgICAg
ICAgIH0KKworICAgICAgICB0eXBlZGVmIFZlY3RvcjxKU0NlbGwqLCAzMj4gRGlydHlDZWxsVmVj
dG9yOworICAgICAgICBpbmxpbmUgdm9pZCBnYXRoZXJEaXJ0eUNlbGxzKERpcnR5Q2VsbFZlY3Rv
ciYpOwogI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaENlbGwoRnVuY3RvciYpOwpAQCAtMzAwLDYgKzMwOCw0NSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgIH0KIAorI2lmIEVOQUJMRShHR0MpCit2b2lkIE1hcmtlZEJsb2Nr
OjpnYXRoZXJEaXJ0eUNlbGxzKERpcnR5Q2VsbFZlY3RvciYgZGlydHlDZWxscykKK3sKKyAgICBD
T01QSUxFX0FTU0VSVChtX2NhcmRzLmNhcmRDb3VudCA9PSBjYXJkQ291bnQsIE1hcmtlZEJsb2Nr
Q2FyZENvdW50c01hdGNoKTsKKworICAgIEFTU0VSVChtX3N0YXRlICE9IE5ldyAmJiBtX3N0YXRl
ICE9IEZyZWVMaXN0ZWQpOworICAgIAorICAgIGlmIChtX3N0YXRlID09IEFsbG9jYXRlZCkKKyAg
ICAgICAgbV9zdGF0ZSA9IE1hcmtlZDsKKyAgICAKKyAgICBpZiAobWFya0NvdW50SXNaZXJvKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3QgY2VsbFNpemUgPSB0aGlzLT5jZWxs
U2l6ZSgpOworICAgIGNvbnN0IHNpemVfdCBmaXJzdENlbGxPZmZzZXQgPSBmaXJzdEF0b20oKSAq
IGF0b21TaXplICUgY2VsbFNpemU7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NhcmRzLmNhcmRDb3VudDsgaSsrKSB7CisgICAgICAgIGlmICghbV9jYXJkcy5pc0NhcmRNYXJr
ZWQoaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciogcHRyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcyk7CisgICAgICAgIGlmIChpKQorICAgICAgICAgICAgcHRy
ICs9IGZpcnN0Q2VsbE9mZnNldCArIGNlbGxTaXplICogKChpICogYnl0ZXNQZXJDYXJkICsgY2Vs
bFNpemUgLSAxIC0gZmlyc3RDZWxsT2Zmc2V0KSAvIGNlbGxTaXplKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcHRyICs9IGZpcnN0QXRvbSgpICogYXRvbVNpemU7CisgICAgICAgIGNoYXIq
IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc3RkOjptaW4oKGkgKyAxKSAq
IGJ5dGVzUGVyQ2FyZCwgbV9lbmRBdG9tICogYXRvbVNpemUpOworICAgICAgICAKKyAgICAgICAg
d2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnBy
ZXRfY2FzdDxKU0NlbGwqPihwdHIpOworICAgICAgICAgICAgQVNTRVJUKCphZGRyZXNzT2ZDYXJk
Rm9yKGNlbGwpKTsKKyAgICAgICAgICAgIGlmIChpc01hcmtlZChjZWxsKSkKKyAgICAgICAgICAg
ICAgICBkaXJ0eUNlbGxzLmFwcGVuZChjZWxsKTsKKyAgICAgICAgICAgIHB0ciArPSBjZWxsU2l6
ZTsKKyAgICAgICAgfQorICAgICAgICBlbmQgPSBwdHI7CisgICAgICAgIG1fY2FyZHMuY2xlYXJD
YXJkKGkpOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCA5
MTQzYjAyZjEzM2EwZmNmZDcwMGZhZjY4NzAwYzA5ODgxYmVmNTcyLi5mZGQwOWJmNWIwNTY4OGNh
MzE3NjgwZmYxZmQzYTY0MDdmMGQ4MDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBT
bG90VmlzaXRvciA6IHB1YmxpYyBNYXJrU3RhY2sgeworICAgIGZyaWVuZCBjbGFzcyBIZWFwUm9v
dFZpc2l0b3I7CiBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3Iodm9pZCoganNBcnJheVZQdHIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmlu
ZGV4IDEwZWVhNGI5YWNkMjY3MTA1ZDM2NGIxNmRmZjdlNTM5MWMxNjJiYmMuLmJmZmY4NzAyZmZk
YzUzZmUyYTBhZWE4Yjc4NDUzMTFiZTg2NjE0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xMDQ0LDggKzEwNDQsOCBAQCB2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVl
LCBSZWdpc3RlcklEIHNjcmF0YwogICAgIG1vdmUob3duZXIsIHNjcmF0Y2gpOwogICAgIGFuZFB0
cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oTWFya2VkQmxvY2s6OmJsb2NrTWFz
aykpLCBzY3JhdGNoKTsKICAgICBtb3ZlKG93bmVyLCBzY3JhdGNoMik7Ci0gICAgYW5kUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykp
LCBzY3JhdGNoMik7CiAgICAgcnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cy
Q2FyZFNpemUpLCBzY3JhdGNoMik7CisgICAgYW5kUHRyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9j
azo6Y2FyZE1hc2spLCBzY3JhdGNoMik7CiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgQmFz
ZUluZGV4KHNjcmF0Y2gsIHNjcmF0Y2gyLCBUaW1lc09uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9m
Q2FyZHMoKSkpOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpCiAgICAg
ICAgIGZpbHRlckNlbGxzLmxpbmsodGhpcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109213</attachid>
            <date>2011-09-29 15:42:20 -0700</date>
            <delta_ts>2011-09-29 15:49:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69100-20110929154219.patch</filename>
            <type>text/plain</type>
            <size>15450</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRj
ZjJlZWJiYjYwNmVhMGI3YTMyOTcxZTgzMTI5YjdkY2NkM2E4ODIuLjM2YjA1ZjFkYjZjNzIzMGRk
ZDAxNzM4NGFhZTUxYzBiMDc5MGJiMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA5LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGxvZ2ljIHRvIGNvbGxlY3QgZGlydHkgb2JqZWN0cyBhcyByb290cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGdpdmVzIHVz
IHRoZSBhYmlsaXR5IHRvIHdhbGsgYWxsIHRoZSBNYXJrZWRCbG9ja3MgaW4gYW4KKyAgICAgICAg
QWxsb2NhdGlvblNwYWNlIGFuZCBjb2xsZWN0IHRoZSBkaXJ0eSBvYmplY3RzLCBhbmQgdGhlbiB1
c2UKKyAgICAgICAgdGhlbSBhcyBHQyByb290cy4gIEFsc28gdGlkaWVzIHVwIHRoZSBjYXJkIG1h
cmtpbmcgbG9naWMgYSBiaXQuCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxDYXJkKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjptYXJrQ2VsbENhcmQpOgorICAgICAgICAqIGhlYXAv
QWxsb2NhdGlvblNwYWNlLmNwcDoKKyAgICAgICAgICAgVGlkeSB1cCB0aGUgd3JpdGUgYmFycmll
ciBsb2dpYyBhIGJpdC4KKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmdhdGhlckRpcnR5T2Jq
ZWN0cyk6CisgICAgICAgIChKU0M6OlRha2VJZkRpcnR5OjpyZXR1cm5WYWx1ZSk6CisgICAgICAg
IChKU0M6OlRha2VJZkRpcnR5OjpUYWtlSWZEaXJ0eSk6CisgICAgICAgIChKU0M6OlRha2VJZkRp
cnR5OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6QWxsb2NhdGlvblNwYWNlOjpnYXRoZXJE
aXJ0eU9iamVjdHMpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdGlvblNwYWNlLmg6CisgICAgICAg
ICogaGVhcC9DYXJkU2V0Lmg6CisgICAgICAgIChKU0M6Ojo6aXNDYXJkTWFya2VkKToKKyAgICAg
ICAgKEpTQzo6OjpjbGVhckNhcmQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3Bw
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICog
aGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c2V0RGlydHlP
YmplY3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWRkcmVzc09mQ2FyZEZvcik6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAg
ICAgIFRpZHkgdGhlIHdyaXRlIGJhcnJpZXIgYSBiaXQuCisKIDIwMTEtMDktMjkgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJ1Y3R1cmUgdHJhbnNpdGlvbnMg
aW52b2x2aW5nIG1hbnkgKD4gNjQpIHByb3BlcnRpZXMgc29tZXRpbWVzIGNhdXNlIHN0cnVjdHVy
ZSBjb3JydXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAppbmRleCBlOGY2MGVlMGMxOGYxNDc2YWU0YWJiMzIxYWFjNTE5ZTQzMDRh
MDlkLi5kNDJiNDNjNjg3MjIwMjViMWUwN2U4NTgwYjIyNjUzMjYyNDM3ZmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKQEAgLTEy
MDUsOCArMTIwNSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bWFya0NlbGxDYXJkKE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjCiAgICAgaml0Lm1vdmUob3du
ZXIsIHNjcmF0Y2gxKTsKICAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKICAgICBqaXQubW92
ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gyKTsKLSAgICBq
aXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpsb2cyQ2FyZFNpemUpLCBzY3Jh
dGNoMik7CisgICAgaml0LnJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6Y2FyZFNo
aWZ0KSwgc2NyYXRjaDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2Nr
OjpjYXJkTWFzayksIHNjcmF0Y2gyKTsKICAgICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mQ2FyZHMoKSkpOwogI2VuZGlmCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IzMl82NC5jcHAKaW5kZXggNmZiMzRiZmUxZjY3OWY4MmMzZWNlYjYyYjM3YTY0NzBhMjFhMjJj
My4uODZmOTAzODE5YTYzNzI1NWYyMWQyODE0ZGQ0ZTRjYzU1Y2Y0NmFlMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cApAQCAtMTI1NSw4ICsxMjU1LDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjptYXJrQ2VsbENh
cmQoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2MKICAgICBqaXQu
bW92ZShvd25lciwgc2NyYXRjaDEpOwogICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KE1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDEpOwogICAg
IGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7Ci0gICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofk1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDIp
OwotICAgIGppdC5yc2hpZnQzMihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmxvZzJDYXJkU2l6
ZSksIHNjcmF0Y2gyKTsKKyAgICBqaXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2Nr
OjpjYXJkU2hpZnQpLCBzY3JhdGNoMik7CisgICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFy
a2VkQmxvY2s6OmNhcmRNYXNrKSwgc2NyYXRjaDIpOwogICAgIGppdC5zdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcygpKSk7CiAj
ZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRp
b25TcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uU3BhY2Uu
Y3BwCmluZGV4IGI1NDhlNDlkZjI5MTVmMTk0ZjI5MTU1OWU3OTg4NDdmYjA3NDVkM2UuLmM2NmY0
ZWNlYjhiNWJiMzY1MTI5NzQ2MGNkZjZiNmJmNjNiNTUwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25TcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcApAQCAtMTYyLDQgKzE2MiwzNSBAQCB2
b2lkIEFsbG9jYXRpb25TcGFjZTo6c2hyaW5rKCkKICAgICBmcmVlQmxvY2tzKGZvckVhY2hCbG9j
ayh0YWtlSWZVbm1hcmtlZCkpOwogfQogCisjaWYgRU5BQkxFKEdHQykKK2NsYXNzIEdhdGhlckRp
cnR5Q2VsbHMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdhdGhlckRpcnR5Q2VsbHMpOwor
cHVibGljOgorICAgIHR5cGVkZWYgdm9pZCogUmV0dXJuVHlwZTsKKyAgICAKKyAgICBHYXRoZXJE
aXJ0eUNlbGxzKE1hcmtlZEJsb2NrOjpEaXJ0eUNlbGxWZWN0b3IqKTsKKyAgICB2b2lkIG9wZXJh
dG9yKCkoTWFya2VkQmxvY2sqKTsKKyAgICBSZXR1cm5UeXBlIHJldHVyblZhbHVlKCkgeyByZXR1
cm4gMDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9y
KiBtX2RpcnR5Q2VsbHM7Cit9OworCitpbmxpbmUgR2F0aGVyRGlydHlDZWxsczo6R2F0aGVyRGly
dHlDZWxscyhNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9yKiBkaXJ0eUNlbGxzKQorICAgIDog
bV9kaXJ0eUNlbGxzKGRpcnR5Q2VsbHMpCit7Cit9CisKK2lubGluZSB2b2lkIEdhdGhlckRpcnR5
Q2VsbHM6Om9wZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQoreworICAgIGJsb2NrLT5nYXRo
ZXJEaXJ0eUNlbGxzKCptX2RpcnR5Q2VsbHMpOworfQorCit2b2lkIEFsbG9jYXRpb25TcGFjZTo6
Z2F0aGVyRGlydHlDZWxscyhNYXJrZWRCbG9jazo6RGlydHlDZWxsVmVjdG9yJiBkaXJ0eUNlbGxz
KQoreworICAgIEdhdGhlckRpcnR5Q2VsbHMgZ2F0aGVyRGlydHlDZWxscygmZGlydHlDZWxscyk7
CisgICAgZm9yRWFjaEJsb2NrKGdhdGhlckRpcnR5Q2VsbHMpOworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25TcGFjZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmgKaW5kZXggMjI3MGVl
MDY3YjY4YzgwM2QwMmNiYTM1ZDQ5YjYyY2Q2MmYwOTI4Zi4uY2M1MWQxZDVhYTExYWNlODExZWQ0
NDliODZkZTM0NDE0ZWUzYzcyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdGlvblNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdGlvblNwYWNlLmgKQEAgLTUwLDcgKzUwLDkgQEAgcHVibGljOgogICAgIE1hcmtlZFNwYWNl
OjpTaXplQ2xhc3MmIHNpemVDbGFzc0ZvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fbWFya2Vk
U3BhY2Uuc2l6ZUNsYXNzRm9yKGJ5dGVzKTsgfQogICAgIHZvaWQgc2V0SGlnaFdhdGVyTWFyayhz
aXplX3QgYnl0ZXMpIHsgbV9tYXJrZWRTcGFjZS5zZXRIaWdoV2F0ZXJNYXJrKGJ5dGVzKTsgfQog
ICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCkgeyByZXR1cm4gbV9tYXJrZWRTcGFjZS5oaWdoV2F0
ZXJNYXJrKCk7IH0KLSAgICAKKworICAgIHZvaWQgZ2F0aGVyRGlydHlDZWxscyhNYXJrZWRCbG9j
azo6RGlydHlDZWxsVmVjdG9yJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0
eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hDZWxsKEZ1bmN0b3ImKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZv
ckVhY2hDZWxsKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVu
Y3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoQmxvY2soRnVuY3RvciYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ2FyZFNldC5oCmluZGV4IGYwMzA5N2Q2YTFjYTFjMDAyOWU2MTM3NGNkZTlkOGRiNTEz
M2QxMDguLjk5NTFlOTk2MGM5YjQ2N2M3MWMxZTc2ZDA5N2FjZmEyMjA2YjNmMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmgKQEAgLTM0LDkgKzM0LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiB0ZW1wbGF0ZSA8c2l6ZV90IGNhcmRTaXplLCBzaXplX3QgYmxvY2tTaXplPiBjbGFz
cyBDYXJkU2V0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYXJkU2V0KTsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNhcmRDb3VudCA9IChibG9ja1NpemUgKyBjYXJkU2l6ZSAtIDEpIC8g
Y2FyZFNpemU7CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNhcmRDb3VudCA9
IChibG9ja1NpemUgKyBjYXJkU2l6ZSAtIDEpIC8gY2FyZFNpemU7CisKICAgICBDYXJkU2V0KCkK
ICAgICB7CiAgICAgICAgIG1lbXNldChtX2NhcmRzLCAwLCBjYXJkQ291bnQpOwpAQCAtNDUsNiAr
NDYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NhcmRNYXJrZWRGb3JBdG9tKGNvbnN0IHZvaWQq
KTsKICAgICB2b2lkIG1hcmtDYXJkRm9yQXRvbShjb25zdCB2b2lkKik7CiAgICAgdWludDhfdCYg
Y2FyZEZvckF0b20oY29uc3Qgdm9pZCopOworICAgIGJvb2wgaXNDYXJkTWFya2VkKHNpemVfdCk7
CisgICAgdm9pZCBjbGVhckNhcmQoc2l6ZV90KTsKIAogcHJpdmF0ZToKICAgICB1aW50OF90IG1f
Y2FyZHNbY2FyZENvdW50XTsKQEAgLTY5LDYgKzcyLDE4IEBAIHRlbXBsYXRlIDxzaXplX3QgY2Fy
ZFNpemUsIHNpemVfdCBibG9ja1NpemU+IHZvaWQgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXpl
Pjo6CiAgICAgY2FyZEZvckF0b20ocHRyKSA9IDE7CiB9CiAKK3RlbXBsYXRlIDxzaXplX3QgY2Fy
ZFNpemUsIHNpemVfdCBibG9ja1NpemU+IGJvb2wgQ2FyZFNldDxjYXJkU2l6ZSwgYmxvY2tTaXpl
Pjo6aXNDYXJkTWFya2VkKHNpemVfdCBpKQoreworICAgIEFTU0VSVChpIDwgY2FyZENvdW50KTsK
KyAgICByZXR1cm4gbV9jYXJkc1tpXTsKK30KKwordGVtcGxhdGUgPHNpemVfdCBjYXJkU2l6ZSwg
c2l6ZV90IGJsb2NrU2l6ZT4gdm9pZCBDYXJkU2V0PGNhcmRTaXplLCBibG9ja1NpemU+OjpjbGVh
ckNhcmQoc2l6ZV90IGkpCit7CisgICAgQVNTRVJUKGkgPCBjYXJkQ291bnQpOworICAgIG1fY2Fy
ZHNbaV0gPSAwOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAppbmRleCBmMGIzYzA5NTYzZDQ0MWYxYzE3MzIxZDE0NTU0YTg0MmFiMDgwMDhhLi4zN2NmMTY0
ZGFiZDQyNGNjNzBmOTAzMTZmOWYzMDdkNjBlN2U1ZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcApAQCAtNDcxLDEyICs0NzEsMjcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQog
ICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwogICAgIHJlZ2lzdGVyRmls
ZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3RzLCBtX2pldHRpc29u
ZWRDb2RlQmxvY2tzKTsKICAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
Q29kZUJsb2NrcygpOworI2lmIEVOQUJMRShHR0MpCisgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2Vs
bFZlY3RvciBkaXJ0eUNlbGxzOworICAgIC8vIFVudGlsIHdlIGhhdmUgYSBzZW5zaWJsZSBwb2xp
Y3kgd2UganVzdCByYW5kb20gY2hvb3NlIHRvIHBlcmZvcm0KKyAgICAvLyB5b3VuZyBnZW5lcmF0
aW9uIGNvbGxlY3Rpb25zIDkwJSBvZiB0aGUgdGltZS4KKyAgICBpZiAoV1RGOjpyYW5kb21OdW1i
ZXIoKSA+IDAuMSkKKyAgICAgICAgbV9vYmplY3RTcGFjZS5nYXRoZXJEaXJ0eUNlbGxzKGRpcnR5
Q2VsbHMpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBjbGVhck1hcmtzKCk7CiAKLSAgICBj
bGVhck1hcmtzKCk7CiAKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7
CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLSAgICAKKwor
I2lmIEVOQUJMRShHR0MpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJ0eU9iamVjdENv
dW50OyBpKyspIHsKKyAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0Q2hpbGRyZW4oZGlydHlD
ZWxsc1tpXSk7CisgICAgICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICB9CisjZW5kaWYKKwogICAg
IHZpc2l0b3IuYXBwZW5kKG1hY2hpbmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggOTI1YTlkNmViMjNmNjc2ZTU1ZDRi
NTcwN2VmZWQ5NDBkZmEwZWU2ZC4uMmQ5M2JjZGQ2N2Q3ZDk4NDc0ZDZhYjZmZTBmZDNlMjIyY2M2
NTdmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMjQwLDcgKzI0MCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqIG93bmVyLCBKU0NlbGwqKQogICAgIHsKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRl
cnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihv
d25lciktPnNldERpcnR5T2JqZWN0KG93bmVyKTsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2Nr
ID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc01h
cmtlZChvd25lcikpCisgICAgICAgICAgICBibG9jay0+c2V0RGlydHlPYmplY3Qob3duZXIpOwog
ICAgIH0KIAogICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
IG93bmVyLCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFJvb3RWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
Um9vdFZpc2l0b3IuaAppbmRleCAxNjVmYTM5MWVkMTc1MTgyMWFhNmY0MzhhZDVhMjNjOTU0ODRl
YzNjLi42YjY3OTkwNGY1YTVkN2NjNzlkMzczMDU4ZjBmNmNiMTU4YTQ1YjhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaApAQCAtNDMsNyArNDMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB2aXNpdChKU1ZhbHVlKiwgc2l6ZV90KTsK
ICAgICAgICAgdm9pZCB2aXNpdChKU1N0cmluZyoqKTsKICAgICAgICAgdm9pZCB2aXNpdChKU0Nl
bGwqKik7Ci0gICAgICAgIAorICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKik7CisK
ICAgICAgICAgU2xvdFZpc2l0b3ImIHZpc2l0b3IoKTsKIAogICAgIHByaXZhdGU6CkBAIC03NSw2
ICs3NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV92aXNpdG9yLmFwcGVuZChzbG90
KTsKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBIZWFwUm9vdFZpc2l0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgbV92aXNpdG9yLnZpc2l0Q2hpbGRyZW4o
Y2VsbCk7CisgICAgfQorCiAgICAgaW5saW5lIFNsb3RWaXNpdG9yJiBIZWFwUm9vdFZpc2l0b3I6
OnZpc2l0b3IoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmlzaXRvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCmluZGV4IGU1MzljNDFkOTNmMDI0ZWZkNjFkNmU0
YjBjYTIxMmRhNzE3Y2U0M2MuLmJmNzRhYmJiMjBmMzFlNjkwNjFhOTA3ZjVkNWRkZWMwMTkxOWI2
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2
YXRpdmVSb290cykKICAgICAgICAgaW50ZXJuYWxBcHBlbmQocm9vdHNbaV0pOwogfQogCi1pbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwpCit2b2lkIFNs
b3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCkKIHsKICNpZiBFTkFCTEUoU0lN
UExFX0hFQVBfUFJPRklMSU5HKQogICAgIG1fdmlzaXRlZFR5cGVDb3VudHMuY291bnQoY2VsbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAppbmRleCBiM2UyNDFmZjk2
MTMyODY3MmI2N2RmZDc4OWQxZjM2OTA2MmQxZDA0Li40YzYxYWY2YmZmYjg1Y2VhMGM3Y2FjZjE3
YmRlZDFjMDNjNmIxNDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAvLyBTZXQgdG8gbG9nIHN0YXRl
IHRyYW5zaXRpb25zIG9mIGJsb2Nrcy4KICNkZWZpbmUgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJB
TlNJVElPTlMgMApAQCAtNzIsOCArNzMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tT
aXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCiAKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7IC8vIH4wLjQlIG92ZXJoZWFk
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYnl0ZXNQZXJDYXJkID0gNTEyOyAvLyAxLjYl
IG92ZXJoZWFkCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbG9nMkNhcmRTaXplID0gOTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBjYXJkU2hpZnQgPSAxMDsgLy8gVGhpcyBpcyBsb2cyIG9m
IGJ5dGVzIHBlciBjYXJkLgorICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJ5dGVzUGVyQ2Fy
ZCA9IDEgPDwgY2FyZFNoaWZ0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGNhcmRDb3VudCA9
IGJsb2NrU2l6ZSAvIGJ5dGVzUGVyQ2FyZDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBjYXJk
TWFzayA9IGNhcmRDb3VudCAtIDE7CiAKICAgICAgICAgc3RydWN0IEZyZWVDZWxsIHsKICAgICAg
ICAgICAgIEZyZWVDZWxsKiBuZXh0OwpAQCAtMTIzLDExICsxMjYsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjaWYgRU5BQkxFKEdHQykKICAgICAgICAgdm9pZCBzZXREaXJ0eU9iamVjdChjb25zdCB2
b2lkKiBhdG9tKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJs
b2NrRm9yKGF0b20pID09IHRoaXMpOwogICAgICAgICAgICAgbV9jYXJkcy5tYXJrQ2FyZEZvckF0
b20oYXRvbSk7CiAgICAgICAgIH0KIAogICAgICAgICB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9y
KGNvbnN0IHZvaWQqIGF0b20pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChNYXJrZWRC
bG9jazo6YmxvY2tGb3IoYXRvbSkgPT0gdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gJm1fY2Fy
ZHMuY2FyZEZvckF0b20oYXRvbSk7CiAgICAgICAgIH0KIApAQCAtMTM1LDYgKzE0MCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1hcmtlZEJsb2NrLCBtX2NhcmRzKTsKICAgICAgICAgfQorCisgICAgICAgIHR5cGVkZWYg
VmVjdG9yPEpTQ2VsbCosIDMyPiBEaXJ0eUNlbGxWZWN0b3I7CisgICAgICAgIGlubGluZSB2b2lk
IGdhdGhlckRpcnR5Q2VsbHMoRGlydHlDZWxsVmVjdG9yJik7CiAjZW5kaWYKIAogICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ2VsbChGdW5jdG9yJik7CkBA
IC0zMDAsNiArMzA4LDQ1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfQogCisj
aWYgRU5BQkxFKEdHQykKK3ZvaWQgTWFya2VkQmxvY2s6OmdhdGhlckRpcnR5Q2VsbHMoRGlydHlD
ZWxsVmVjdG9yJiBkaXJ0eUNlbGxzKQoreworICAgIENPTVBJTEVfQVNTRVJUKG1fY2FyZHMuY2Fy
ZENvdW50ID09IGNhcmRDb3VudCwgTWFya2VkQmxvY2tDYXJkQ291bnRzTWF0Y2gpOworCisgICAg
QVNTRVJUKG1fc3RhdGUgIT0gTmV3ICYmIG1fc3RhdGUgIT0gRnJlZUxpc3RlZCk7CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhbiBvcHRpbWlzYXRpb24gdG8gYXZvaWQgaGF2aW5nIHRvIHdhbGsgdGhl
IHNldCBvZiBtYXJrZWQKKyAgICAvLyBibG9ja3MgdHdpY2UgZHVyaW5nIEdDLgorICAgIG1fc3Rh
dGUgPSBNYXJrZWQ7CisgICAgCisgICAgaWYgKG1hcmtDb3VudElzWmVybygpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgc2l6ZV90IGNlbGxTaXplID0gdGhpcy0+Y2VsbFNpemUoKTsKKyAg
ICBjb25zdCBzaXplX3QgZmlyc3RDZWxsT2Zmc2V0ID0gZmlyc3RBdG9tKCkgKiBhdG9tU2l6ZSAl
IGNlbGxTaXplOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYXJkcy5jYXJk
Q291bnQ7IGkrKykgeworICAgICAgICBpZiAoIW1fY2FyZHMuaXNDYXJkTWFya2VkKGkpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpOworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIHB0ciArPSBmaXJzdENl
bGxPZmZzZXQgKyBjZWxsU2l6ZSAqICgoaSAqIGJ5dGVzUGVyQ2FyZCArIGNlbGxTaXplIC0gMSAt
IGZpcnN0Q2VsbE9mZnNldCkgLyBjZWxsU2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHB0ciArPSBmaXJzdEF0b20oKSAqIGF0b21TaXplOworICAgICAgICBjaGFyKiBlbmQgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHN0ZDo6bWluKChpICsgMSkgKiBieXRlc1BlckNh
cmQsIG1fZW5kQXRvbSAqIGF0b21TaXplKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChwdHIg
PCBlbmQpIHsKKyAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlND
ZWxsKj4ocHRyKTsKKyAgICAgICAgICAgIEFTU0VSVCgqYWRkcmVzc09mQ2FyZEZvcihjZWxsKSk7
CisgICAgICAgICAgICBpZiAoaXNNYXJrZWQoY2VsbCkpCisgICAgICAgICAgICAgICAgZGlydHlD
ZWxscy5hcHBlbmQoY2VsbCk7CisgICAgICAgICAgICBwdHIgKz0gY2VsbFNpemU7CisgICAgICAg
IH0KKyAgICAgICAgbV9jYXJkcy5jbGVhckNhcmQoaSk7CisgICAgfQorfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCmluZGV4IDkxNDNiMDJmMTMzYTBmY2ZkNzAwZmFmNjg3MDBjMDk4
ODFiZWY1NzIuLmZkZDA5YmY1YjA1Njg4Y2EzMTc2ODBmZjFmZDNhNjQwN2YwZDgwMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaApAQCAtMzEsNiArMzEsNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFNsb3RWaXNpdG9yIDogcHVibGljIE1hcmtTdGFjayB7
CisgICAgZnJpZW5kIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKIHB1YmxpYzoKICAgICBTbG90Vmlz
aXRvcih2b2lkKiBqc0FycmF5VlB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTBlZWE0YjlhY2QyNjcxMDVkMzY0YjE2ZGZm
N2U1MzkxYzE2MmJiYy4uZDZlNWRhYWM2YmQ0NWNhNGMzOGE3YmJmMWRjZGNiMzFhOTI4ZjY2MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
QEAgLTEwNDQsOCArMTA0NCw4IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVy
SUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjCiAgICAgbW92ZShv
d25lciwgc2NyYXRjaCk7CiAgICAgYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gpOwogICAgIG1vdmUob3duZXIs
IHNjcmF0Y2gyKTsKLSAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gyKTsKLSAgICByc2hpZnQzMihUcnVz
dGVkSW1tMzIoTWFya2VkQmxvY2s6OmxvZzJDYXJkU2l6ZSksIHNjcmF0Y2gyKTsKKyAgICByc2hp
ZnQzMihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRTaGlmdCksIHNjcmF0Y2gyKTsKKyAg
ICBhbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpjYXJkTWFzayksIHNjcmF0Y2gyKTsK
ICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBCYXNlSW5kZXgoc2NyYXRjaCwgc2NyYXRjaDIs
IFRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcygpKSk7CiAgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykKICAgICAgICAgZmlsdGVyQ2VsbHMubGluayh0aGlz
KTsK
</data>
<flag name="review"
          id="106404"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>