<?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>73712</bug_id>
          
          <creation_ts>2011-12-02 15:56:31 -0800</creation_ts>
          <short_desc>PODIntervalTree takes 1.7MB memory on www.nytimes.com</short_desc>
          <delta_ts>2011-12-16 14:45:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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="Yongjun Zhang">yongjun_zhang</reporter>
          <assigned_to name="Yongjun Zhang">yongjun_zhang</assigned_to>
          <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hyatt</cc>
    
    <cc>joepeck</cc>
    
    <cc>kbr</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>514247</commentid>
    <comment_count>0</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-02 15:56:31 -0800</bug_when>
    <thetext>PODIntervalTree instances take large amount of memory, e.g., in nytime.com, its total heap consumption is 1.7MB; in cnn.com, 2.2MB.

Looks like each RenderBlock containing floating objects owns a PODIntervalTree, which owns an PODArena with at least on 16KB chunk.  Nytime.com has over 100 RenderBlocks with floating objects, hence 1.7MB altogether.  One idea is to have one PODArena per document and having all PODIntervalTrees share it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514250</commentid>
    <comment_count>1</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-02 16:02:15 -0800</bug_when>
    <thetext>In addition, 16KB chunk seems to be over generous.  I tested on Alexa top 100 sites, the largest PODIntervalTree has 25 nodes and they take less than 1KB in the chunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514252</commentid>
    <comment_count>2</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-02 16:04:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/10507353&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514316</commentid>
    <comment_count>3</comment_count>
      <attachid>117721</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-02 17:56:59 -0800</bug_when>
    <thetext>Created attachment 117721
Use a shared PODArena for all PODIntervalTrees inside a document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514319</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 17:59:59 -0800</bug_when>
    <thetext>Attachment 117721 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/dom/Document.h:43:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514357</commentid>
    <comment_count>5</comment_count>
      <attachid>117731</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-02 18:37:11 -0800</bug_when>
    <thetext>Created attachment 117731
Fix style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517880</commentid>
    <comment_count>6</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-08 16:13:37 -0800</bug_when>
    <thetext>Darin, Kenneth, would any of you mind review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517957</commentid>
    <comment_count>7</comment_count>
      <attachid>117731</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 17:18:16 -0800</bug_when>
    <thetext>Comment on attachment 117731
Fix style issue.

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

&gt; Source/WebCore/platform/PODArena.h:110
&gt; +        ChunkVector::const_iterator it = m_chunks.begin();
&gt; +        while (it != end) {
&gt; +            if ((*it)-&gt;contains(ptr)) {
&gt; +                (*it)-&gt;free(ptr);
&gt; +                break;
&gt; +            }
&gt; +            ++it;
&gt; +        }

We normally use a for loop for something like this rather than a while loop.

&gt; Source/WebCore/platform/PODArena.h:170
&gt; +                ChunkVector::const_iterator it = m_chunks.begin();
&gt; +                while (it &lt; end) {
&gt; +                    if ((*it)-&gt;hasFreeList()) {
&gt; +                        ptr = (*it)-&gt;allocate(roundedSize);
&gt; +                        break;
&gt; +                    }
&gt; +                    ++it;
&gt; +                }

Same comment about for loop rather than while loop. Also better to use != rather than &lt; for the end check.

If the allocation fails, don’t we want to keep iterating to use the free space in a different chunk? I think it should be if (ptr) break; rather than just break;

&gt; Source/WebCore/platform/PODArena.h:225
&gt; +                void* p = m_freeList;
&gt; +                m_freeList = m_freeList-&gt;m_next;
&gt; +                return p;

We normally prefer to use a word rather than a letter for a local variable like “p”.

&gt; Source/WebCore/platform/PODArena.h:244
&gt; +            FreeCell* cell = (FreeCell*)ptr;

This should be static_cast rather than a C-style cast.

&gt; Source/WebCore/platform/PODArena.h:251
&gt; +            return (ptr &gt;= m_base &amp;&amp; ptr &lt; m_base + m_size);

No need for the parentheses here.

&gt; Source/WebCore/platform/PODRedBlackTree.h:171
&gt; +    void initIfNeeded(PassRefPtr&lt;PODArena&gt; arena)
&gt; +    {
&gt; +        if (!m_arena)
&gt; +            m_arena = arena;
&gt; +    }

It would be slightly more efficient if this took a raw pointer instead of PassRefPtr because this does not always take ownership of the passed in arena, and when it does not, the PassRefPtr produces unnecessary reference count churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517965</commentid>
    <comment_count>8</comment_count>
      <attachid>117731</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-08 17:25:09 -0800</bug_when>
    <thetext>Comment on attachment 117731
Fix style issue.

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

First, nice work tracking down this issue and proposing a fix.

I&apos;m not qualified to review the renderer code; hyatt or darin should.

However, I am concerned about the overall strategy of adding a free list to the PODArena. As indicated above, the currently proposed changes violate invariants, so they will either have to be fixed or a different approach will need to be taken. Now, it&apos;s possible to fix the free list code, but a solution that would be more in line with the design of the arena, red/black and interval trees would be to just clear out the arena wholesale at certain points in time. I don&apos;t know whether there&apos;s a good point in the layout algorithm to do this, but if there is, I would lean toward a solution of that form. That could introduce the possibility of dangling pointers from existing red/black and interval tree instances, and that might be a worse side-effect than the additional complexity of free list maintenance, so the tradeoffs would have to be carefully considered.

I&apos;m marking this patch r- for a couple of style issues as well as the correctness problem with the free list. Will be glad to review future iterations, though again one of the other reviewers will have to give the final r+.

&gt; Source/WebCore/ChangeLog:3
&gt; +        PODInervalTree takes 1.7MB memory on www.nytimes.com.

Typo: PODInervalTree

&gt; Source/WebCore/dom/Document.h:578
&gt; +    PODArena* PODIntervalArena() const { return m_PODIntervalArena.get(); }

Capitalization doesn&apos;t match WebKit&apos;s style. When the interval tree and arena classes were originally added, there were objections to the use of the &quot;POD&quot; prefix, since it isn&apos;t quite accurate, and I still intend at some point to generalize these classes to fix this -- so I would suggest naming this just &quot;intervalArena()&quot; and the member &quot;m_intervalArena&quot;.

&gt;&gt; Source/WebCore/platform/PODArena.h:110
&gt;&gt; +        }
&gt; 
&gt; We normally use a for loop for something like this rather than a while loop.

Are you sure it is a good idea to introduce a search into this critical point of the algorithm? Would it be possible to map from a pointer to its containing Chunk in constant time? One way to do this would be to always allocate space for the Chunk backpointer before the start of the object, though this would waste space.

&gt; Source/WebCore/platform/PODArena.h:167
&gt; +                        break;

If you&apos;re iterating through the chunks already, why not generalize the code and write &quot;if (ptr) break;&quot; instead?

&gt; Source/WebCore/platform/PODArena.h:197
&gt; +        };

For correctness as this class is currently written, each entry on the free list would have to keep track of its size.

&gt; Source/WebCore/platform/PODArena.h:221
&gt; +            if (m_freeList) {

You&apos;d better ASSERT that size &gt;= sizeof(FreeCell), or later frees of the returned pointer will blow up.

&gt; Source/WebCore/platform/PODArena.h:223
&gt; +                void* p = m_freeList;

This code violates invariants of the class. The PODArena as written has to handle allocations of multiple sizes. You aren&apos;t keeping track of the size of the block of memory pointed to by the freed pointer, so you don&apos;t know whether each entry on the free list can satisfy the allocation. Now, the current usage of PODArena in the handling of floating objects happens to make this code work, but you can&apos;t rely on that. If you go down the route of adding a free list then either the free list needs to be generalized, or the PODArena has to be specialized to only support allocating one data type per arena instance.

&gt;&gt; Source/WebCore/platform/PODArena.h:244
&gt;&gt; +            FreeCell* cell = (FreeCell*)ptr;
&gt; 
&gt; This should be static_cast rather than a C-style cast.

Use a C++-style cast here, either static_cast or reinterpret_cast.

&gt; Source/WebCore/platform/PODArena.h:246
&gt; +            m_freeList = cell;

As mentioned above, this doesn&apos;t work in the general case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517966</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-08 17:26:51 -0800</bug_when>
    <thetext>(darin, sorry to contradict your r+, but I really think the correctness problem should be solved before committing this.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517969</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-08 17:27:33 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (darin, sorry to contradict your r+, but I really think the correctness problem should be solved before committing this.)

No need to apologize. Glad you caught it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518000</commentid>
    <comment_count>11</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-08 18:06:34 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 117731 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117731&amp;action=review
&gt; 
&gt; First, nice work tracking down this issue and proposing a fix.
&gt; 

Thanks for the comments!

&gt; I&apos;m not qualified to review the renderer code; hyatt or darin should.
&gt; 
&gt; However, I am concerned about the overall strategy of adding a free list to the PODArena. As indicated above, the currently proposed changes violate invariants, so they will either have to be fixed or a different approach will need to be taken. Now, it&apos;s possible to fix the free list code, but a solution that would be more in line with the design of the arena, red/black and interval trees would be to just clear out the arena wholesale at certain points in time. I don&apos;t know whether there&apos;s a good point in the layout algorithm to do this, but if there is, I would lean toward a solution of that form. That could introduce the possibility of dangling pointers from existing red/black and interval tree instances, and that might be a worse side-effect than the additional complexity of free list maintenance, so the tradeoffs would have to be carefully considered.

That was also my concern when first looking at the code.  However, it seems like a PODBlackRedTree only allocates fixed size objects from its PODArena, and PODArena is so far only used by PODBlackRedTree.  So this patch makes the assumption that each object allocated from the same arena has the same size, which simplifies the freelist implementation and we don&apos;t need to track the size of each cell from a chunk.   I agree it is not future proof if we are to use PODArena with different sized cells.

&gt; 
&gt; I&apos;m marking this patch r- for a couple of style issues as well as the correctness problem with the free list. Will be glad to review future iterations, though again one of the other reviewers will have to give the final r+.
&gt; 

Sure, I will keep working on it.

&gt; &gt;&gt; Source/WebCore/platform/PODArena.h:110
&gt; &gt;&gt; +        }
&gt; &gt; 
&gt; &gt; We normally use a for loop for something like this rather than a while loop.
&gt; 
&gt; Are you sure it is a good idea to introduce a search into this critical point of the algorithm? Would it be possible to map from a pointer to its containing Chunk in constant time? One way to do this would be to always allocate space for the Chunk backpointer before the start of the object, though this would waste space.

From my test, it doesn&apos;t look like we will have lots of chunks in real sites.  And we can reduce the search if we set the chunk size big enough (4K seems to be reasonable,).

&gt; 
&gt; &gt; Source/WebCore/platform/PODArena.h:167
&gt; &gt; +                        break;
&gt; 
&gt; If you&apos;re iterating through the chunks already, why not generalize the code and write &quot;if (ptr) break;&quot; instead?

Good point!

&gt; 
&gt; &gt; Source/WebCore/platform/PODArena.h:197
&gt; &gt; +        };
&gt; 
&gt; For correctness as this class is currently written, each entry on the free list would have to keep track of its size.
&gt; 

Again, the assumption is each entry in the free list has the same size.

&gt; &gt; Source/WebCore/platform/PODArena.h:221
&gt; &gt; +            if (m_freeList) {
&gt; 
&gt; You&apos;d better ASSERT that size &gt;= sizeof(FreeCell), or later frees of the returned pointer will blow up.
&gt; 
&gt; &gt; Source/WebCore/platform/PODArena.h:223
&gt; &gt; +                void* p = m_freeList;
&gt; 
&gt; This code violates invariants of the class. The PODArena as written has to handle allocations of multiple sizes. You aren&apos;t keeping track of the size of the block of memory pointed to by the freed pointer, so you don&apos;t know whether each entry on the free list can satisfy the allocation. Now, the current usage of PODArena in the handling of floating objects happens to make this code work, but you can&apos;t rely on that. If you go down the route of adding a free list then either the free list needs to be generalized, or the PODArena has to be specialized to only support allocating one data type per arena instance.

I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518036</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-08 19:22:06 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 117731 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117731&amp;action=review
&gt; &gt; 
&gt; &gt; First, nice work tracking down this issue and proposing a fix.
&gt; &gt; 
&gt; 
&gt; Thanks for the comments!
&gt; 
&gt; &gt; I&apos;m not qualified to review the renderer code; hyatt or darin should.
&gt; &gt; 
&gt; &gt; However, I am concerned about the overall strategy of adding a free list to the PODArena. As indicated above, the currently proposed changes violate invariants, so they will either have to be fixed or a different approach will need to be taken. Now, it&apos;s possible to fix the free list code, but a solution that would be more in line with the design of the arena, red/black and interval trees would be to just clear out the arena wholesale at certain points in time. I don&apos;t know whether there&apos;s a good point in the layout algorithm to do this, but if there is, I would lean toward a solution of that form. That could introduce the possibility of dangling pointers from existing red/black and interval tree instances, and that might be a worse side-effect than the additional complexity of free list maintenance, so the tradeoffs would have to be carefully considered.
&gt; 
&gt; That was also my concern when first looking at the code.  However, it seems like a PODBlackRedTree only allocates fixed size objects from its PODArena, and PODArena is so far only used by PODBlackRedTree.  So this patch makes the assumption that each object allocated from the same arena has the same size, which simplifies the freelist implementation and we don&apos;t need to track the size of each cell from a chunk.   I agree it is not future proof if we are to use PODArena with different sized cells.

Again, that&apos;s true for its current usage but not true in the general case. See Source/WebCore/platform/graphics/gpu/LoopBlinnPathProcessor.cpp (which is not in use and which is going away) for an example of more general usage.

&gt; I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.

Yes, you could subclass PODArena into PODFreeListArena&lt;T&gt; which only supports allocations and frees of a particular type. But would you give my suggestion about clearing out the arena some thought?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518053</commentid>
    <comment_count>13</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-08 19:47:16 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.
&gt; 
&gt; Yes, you could subclass PODArena into PODFreeListArena&lt;T&gt; which only supports allocations and frees of a particular type. But would you give my suggestion about clearing out the arena some thought?

I was thinking to have Document hold up to a shared PODFreeListArena&lt;T&gt; and the arena will get cleared when the document is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518153</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-09 00:16:23 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; &gt; I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.
&gt; &gt; 
&gt; &gt; Yes, you could subclass PODArena into PODFreeListArena&lt;T&gt; which only supports allocations and frees of a particular type. But would you give my suggestion about clearing out the arena some thought?
&gt; 
&gt; I was thinking to have Document hold up to a shared PODFreeListArena&lt;T&gt; and the arena will get cleared when the document is destroyed.

That wasn&apos;t my point -- I&apos;m suggesting to not add the free list functionality at all, keep the arena class simple, and at opportune times, clear out the shared arena. The question is whether there is a good point during layout to clear the arena because we know that we are going to clear out and recompute all of the floating object sets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518311</commentid>
    <comment_count>15</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-09 10:00:10 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, you could subclass PODArena into PODFreeListArena&lt;T&gt; which only supports allocations and frees of a particular type. But would you give my suggestion about clearing out the arena some thought?
&gt; &gt; 
&gt; &gt; I was thinking to have Document hold up to a shared PODFreeListArena&lt;T&gt; and the arena will get cleared when the document is destroyed.
&gt; 
&gt; That wasn&apos;t my point -- I&apos;m suggesting to not add the free list functionality at all, keep the arena class simple, and at opportune times, clear out the shared arena. The question is whether there is a good point during layout to clear the arena because we know that we are going to clear out and recompute all of the floating object sets.

If the shared arena is per document, looks like it is hard to find such a point that we could clear the arena before tearing down the entire render tree.  m_placedFloatsTree is needed for layout involved with its owning renderblock and we can only reliably clear this tree when its owning renderblock is destroyed.  That means we have to wait all PODIntervalTree&apos;s get destroyed before we can clear the shared arena, and probably also means we are going to throw away the whole render tree anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519815</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-12 19:47:19 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; &gt; I agree.  How about we make a special cased PODArena for the PODIntervalTree that we know for sure each entry will have the same size, and keep the generalize case as it is?  That way we fix the memory issue without violating the invariants of PODArena.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, you could subclass PODArena into PODFreeListArena&lt;T&gt; which only supports allocations and frees of a particular type. But would you give my suggestion about clearing out the arena some thought?
&gt; &gt; &gt; 
&gt; &gt; &gt; I was thinking to have Document hold up to a shared PODFreeListArena&lt;T&gt; and the arena will get cleared when the document is destroyed.
&gt; &gt; 
&gt; &gt; That wasn&apos;t my point -- I&apos;m suggesting to not add the free list functionality at all, keep the arena class simple, and at opportune times, clear out the shared arena. The question is whether there is a good point during layout to clear the arena because we know that we are going to clear out and recompute all of the floating object sets.
&gt; 
&gt; If the shared arena is per document, looks like it is hard to find such a point that we could clear the arena before tearing down the entire render tree.  m_placedFloatsTree is needed for layout involved with its owning renderblock and we can only reliably clear this tree when its owning renderblock is destroyed.  That means we have to wait all PODIntervalTree&apos;s get destroyed before we can clear the shared arena, and probably also means we are going to throw away the whole render tree anyway.

OK, thanks for giving this some thought. In that case let&apos;s go with your suggested approach of adding a new PODFreeListArena.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520591</commentid>
    <comment_count>17</comment_count>
      <attachid>119134</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-13 18:41:30 -0800</bug_when>
    <thetext>Created attachment 119134
Create a separate class PODFreeListArena which allocates objects of the same size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521521</commentid>
    <comment_count>18</comment_count>
      <attachid>119134</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-14 17:35:19 -0800</bug_when>
    <thetext>Comment on attachment 119134
Create a separate class PODFreeListArena which allocates objects of the same size.

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

&gt; Source/WebCore/platform/PODFreeListArena.h:33
&gt; +class PODFreeListArena : public PODArena {

This is a step in the right direction but doesn&apos;t address the basic problem in the last review. This class still allows allocation and freeing of different sizes.

My thought was to parameterize PODFreeListArena on the one type of object it knows how to allocate. I would use private inheritance from PODArena. The PODFreeListArena&apos;s allocateObject() methods shouldn&apos;t take the first &quot;class T&quot; template argument. Change PODRedBlackTree to accept a PODFreeListArena&lt;T&gt; rather than a PODArena.

The challenge will be to figure out how to describe the type parameter. It will be a Node&lt;T&gt; where T is the type parameter of the RedBlackTree. Currently Node is an internal concept to RedBlackTree. Perhaps you can expose it with a public typedef.

The solution I&apos;m outlining will also allow getting rid of the virtual allocate and free functions, which are undesirable.

Another solution could be to configure PODFreeListArena so that it can only allocate objects of a certain size, and sprinkle assertions throughout the code. This is gross though and I would rather find a solution that uses the type system to enforce correct usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521572</commentid>
    <comment_count>19</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-14 18:51:13 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 119134 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119134&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/PODFreeListArena.h:33
&gt; &gt; +class PODFreeListArena : public PODArena {
&gt; 
&gt; This is a step in the right direction but doesn&apos;t address the basic problem in the last review. This class still allows allocation and freeing of different sizes.
&gt; 
&gt; My thought was to parameterize PODFreeListArena on the one type of object it knows how to allocate. I would use private inheritance from PODArena. The PODFreeListArena&apos;s allocateObject() methods shouldn&apos;t take the first &quot;class T&quot; template argument. Change PODRedBlackTree to accept a PODFreeListArena&lt;T&gt; rather than a PODArena.
&gt; 

thanks,  this should work!  I was trying to keep the change in PODRedBlackTree small, but I didn&apos;t realize a PODRedBlackTree will always ask its arena to allocate objects of the same size.

&gt; The challenge will be to figure out how to describe the type parameter. It will be a Node&lt;T&gt; where T is the type parameter of the RedBlackTree. Currently Node is an internal concept to RedBlackTree. Perhaps you can expose it with a public typedef.
&gt; 

Yeah, it would be a bit awkward to declare the interval arena in Document as something like:

PODFreeListArena&lt;PODRedBlackTree&lt;int, FloatingObject*&gt;::Node&gt;

&gt; The solution I&apos;m outlining will also allow getting rid of the virtual allocate and free functions, which are undesirable.
&gt; 

true, and we can also avoid the overhead of virtual function calls.

&gt; Another solution could be to configure PODFreeListArena so that it can only allocate objects of a certain size, and sprinkle assertions throughout the code. This is gross though and I would rather find a solution that uses the type system to enforce correct usage.

This is essential what the current patch is doing (without assertions though).  Anyway, I will try the approach you suggested and see how it goes.  thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522117</commentid>
    <comment_count>20</comment_count>
      <attachid>119477</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-15 11:50:30 -0800</bug_when>
    <thetext>Created attachment 119477
Take 3: use PODFreeListArena&lt;T&gt; to ensure the objects allocated from the arena having the same size.

In addition to changing PODFreeListArena to a templated class, the patch also moves the shared interval arena from Document to RenderView, since Document doesn&apos;t have visibility to PODInteval&lt;int, FloatingObject*&gt; which is defined in RenderBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522155</commentid>
    <comment_count>21</comment_count>
      <attachid>119477</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 12:44:22 -0800</bug_when>
    <thetext>Comment on attachment 119477
Take 3: use PODFreeListArena&lt;T&gt; to ensure the objects allocated from the arena having the same size.

Attachment 119477 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10914341</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522212</commentid>
    <comment_count>22</comment_count>
      <attachid>119495</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-15 13:39:51 -0800</bug_when>
    <thetext>Created attachment 119495
fix build break in chromium&apos;s test code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522469</commentid>
    <comment_count>23</comment_count>
      <attachid>119495</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-15 20:05:13 -0800</bug_when>
    <thetext>Comment on attachment 119495
fix build break in chromium&apos;s test code.

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

This looks great. Thanks for persisting and reaching this solution. A couple of comments which I&apos;d appreciate it if you&apos;d address, but don&apos;t want to hold you back from committing. r=me

&gt; Source/WebCore/platform/PODArena.h:115
&gt; +    virtual ~PODArena() { }

virtual is unnecessary here. The user deals explicitly with instances of PODFreeListArena and never downcasts to PODArena.

&gt; Source/WebCore/platform/PODArena.h:175
&gt; +        virtual ~Chunk()

Good call on this though.

&gt; Source/WebCore/platform/PODFreeListArena.h:34
&gt; +class PODFreeListArena : public PODArena {

Can you use private inheritance here (&quot; : private PODArena&quot;)? That way you can use the implementation details of PODArena without exposing its interface. Conceptually PODFreeListArena is completely distinct from PODArena. I don&apos;t know how that would play with the RefCounted machinery though. If it&apos;s at all possible to make this change I would strongly recommend doing it.

&gt; Source/WebCore/platform/PODRedBlackTree.h:178
&gt; +        Node* node = m_arena-&gt;template allocateObject&lt;T&gt;(data);

I&apos;ve never seen this construct before. However, I think that using private inheritance as mentioned above will let you get rid of the &quot;template&quot; here, since then only PODFreeListArena&apos;s allocateObject method would be visible.

&gt; Source/WebCore/platform/PODRedBlackTree.h:-238
&gt; -protected:

Do you think it&apos;s possible to keep the Node class hidden? For example,
protected:
  class Node { ... };
public:
  typedef Node NodeType;
protected:
  // ...

It&apos;s OK as is, but it would be nicer to not have to expose the internal class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522551</commentid>
    <comment_count>24</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2011-12-15 22:47:28 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 119495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119495&amp;action=review
&gt; 
&gt; This looks great. Thanks for persisting and reaching this solution. A couple of comments which I&apos;d appreciate it if you&apos;d address, but don&apos;t want to hold you back from committing. r=me

thank you for the help!

&gt; 
&gt; &gt; Source/WebCore/platform/PODArena.h:115
&gt; &gt; +    virtual ~PODArena() { }
&gt; 
&gt; virtual is unnecessary here. The user deals explicitly with instances of PODFreeListArena and never downcasts to PODArena.
&gt; 
&gt; &gt; Source/WebCore/platform/PODArena.h:175
&gt; &gt; +        virtual ~Chunk()
&gt; 
&gt; Good call on this though.
&gt; 
&gt; &gt; Source/WebCore/platform/PODFreeListArena.h:34
&gt; &gt; +class PODFreeListArena : public PODArena {
&gt; 
&gt; Can you use private inheritance here (&quot; : private PODArena&quot;)? That way you can use the implementation details of PODArena without exposing its interface. Conceptually PODFreeListArena is completely distinct from PODArena. I don&apos;t know how that would play with the RefCounted machinery though. If it&apos;s at all possible to make this change I would strongly recommend doing it.
&gt; 

I tried with private inheritance but it failed compiling because RefCounted needs to be public inheritance.

&gt; &gt; Source/WebCore/platform/PODRedBlackTree.h:178
&gt; &gt; +        Node* node = m_arena-&gt;template allocateObject&lt;T&gt;(data);
&gt; 
&gt; I&apos;ve never seen this construct before. However, I think that using private inheritance as mentioned above will let you get rid of the &quot;template&quot; here, since then only PODFreeListArena&apos;s allocateObject method would be visible.

yeah, private inheritance would be ideal but we have RefCounted issue.

&gt; 
&gt; &gt; Source/WebCore/platform/PODRedBlackTree.h:-238
&gt; &gt; -protected:
&gt; 
&gt; Do you think it&apos;s possible to keep the Node class hidden? For example,
&gt; protected:
&gt;   class Node { ... };
&gt; public:
&gt;   typedef Node NodeType;
&gt; protected:
&gt;   // ...
&gt; 

that doesn&apos;t work... typedef doesn&apos;t seem to change the visibility of Node.

&gt; It&apos;s OK as is, but it would be nicer to not have to expose the internal class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522564</commentid>
    <comment_count>25</comment_count>
      <attachid>119495</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 23:14:45 -0800</bug_when>
    <thetext>Comment on attachment 119495
fix build break in chromium&apos;s test code.

Clearing flags on attachment: 119495

Committed r103030: &lt;http://trac.webkit.org/changeset/103030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522565</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 23:14:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522642</commentid>
    <comment_count>27</comment_count>
      <attachid>119495</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-12-16 02:15:16 -0800</bug_when>
    <thetext>Comment on attachment 119495
fix build break in chromium&apos;s test code.

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

&gt; Source/WebCore/platform/PODFreeListArena.h:105
&gt; +    void* allocate(size_t size)
&gt; +    {
&gt; +        void* ptr = 0;
&gt; +        if (m_current) {
&gt; +            // First allocate from the current chunk.
&gt; +            ptr = m_current-&gt;allocate(size);
&gt; +            if (!ptr) {
&gt; +                // Check if we can allocate from other chunks&apos; free list.
&gt; +                ChunkVector::const_iterator end = m_chunks.end();
&gt; +                for (ChunkVector::const_iterator it = m_chunks.begin(); it != end; ++it) {
&gt; +                    FreeListChunk* chunk = static_cast&lt;FreeListChunk*&gt;(it-&gt;get());
&gt; +                    if (chunk-&gt;hasFreeList()) {
&gt; +                        ptr = chunk-&gt;allocate(size);
&gt; +                        if (ptr)
&gt; +                            break;
&gt; +                    }
&gt; +                }
&gt; +            }
&gt; +        }
&gt; +
&gt; +        if (!ptr) {
&gt; +            if (size &gt; m_currentChunkSize)
&gt; +                m_currentChunkSize = size;
&gt; +            m_chunks.append(adoptPtr(new FreeListChunk(m_allocator.get(), m_currentChunkSize)));
&gt; +            m_current = m_chunks.last().get();
&gt; +            ptr = m_current-&gt;allocate(size);
&gt; +        }
&gt; +        return ptr;
&gt; +    }

This function would be much, much easier to follow if it used early returns rather than multiple levels of nested if statements.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117721</attachid>
            <date>2011-12-02 17:56:59 -0800</date>
            <delta_ts>2011-12-02 18:37:11 -0800</delta_ts>
            <desc>Use a shared PODArena for all PODIntervalTrees inside a document.</desc>
            <filename>shared_podarena.patch</filename>
            <type>text/plain</type>
            <size>13351</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDExLTEyLTAyICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUE9ESW5lcnZhbFRy
ZWUgdGFrZXMgMS43TUIgbWVtb3J5IG9uIHd3dy5ueXRpbWVzLmNvbS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNzEyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgUmVuZGVyQmxvY2sgd2hpY2gg
aGFzIGZsb2F0aW5nIG9iamVjdHMgaW5zaWRlLCB3ZSB3aWxsIGNyZWF0ZSBhIFBPREludGVydmFs
VHJlZSBhbmQgYSBQT0RBcmVuYSB3aXRoCisgICAgICAgIGF0IGxlYXN0IG9uZSAxNktCIGNodW5r
LiAgQSBwYWdlIGNvdWxkIGhhdmUgYSBsYXJnZSBudW1iZXIgb2Ygc3VjaCBSZW5kZXJCbG9ja3Mg
YW5kIHRoZXkgY291bGQgdGFrZSBodWdlCisgICAgICAgIGFtb3VudCBvZiBtZW1vcnkuICBUaGlz
IHBhdGNoIGNyZWF0ZXMgYSBzaGFyZWQgUE9EQXJlbmEgaW4gRG9jdW1lbnQuICBJbnN0ZWFkIG9m
IGhhdmluZyB0aGVpciBvd24gUE9EQXJlbmEsCisgICAgICAgIGVhY2ggUmVuZGVyQmxvY2sgd2l0
aCBmbG9hdGluZyBvYmplY3RzIGNvdWxkIHNoYXJlIHRoaXMgUE9EQXJlbmEgdG8gcmVkdWNlIG1l
bW9yeSBjb25zdW1wdGlvbi4KKworICAgICAgICBUaGUgc2hhcmVkIFBPREFyZW5hIGNvdWxkIGdy
b3cgdW5ib3VuZGVkbHkgaWYgd2Uga2VlcCByZW1vdmluZyBhbmQgYWRkaW5nIGZsb2F0aW5nIG9i
amVjdHMuICBXZSBjYW4gZml4IHRoYXQKKyAgICAgICAgYnkgcmV1c2luZyB0aGUgZnJlZWQgbWVt
b3J5IGluIGVhY2ggY2h1bmsuICBUaGlzIHBhdGNoIGFkZHMgYSBmcmVlIGxpc3QgdG8gdHJhY2sg
ZnJlZWQgbm9kZXMgaW5zaWRlIHRoZSBjaHVuaworICAgICAgICBhbmQgcmV1c2UgdGhlIGZyZWUg
bm9kZXMgaW4gZnV0dXJlIGFsbG9jYXRpb25zLgorCisgICAgICAgIDE2S0IgY2h1bmsgc2VlbXMg
dG8gYmUgb3ZlciBnZW5lcm91cy4gIEkgdGVzdGVkIG9uIEFsZXhhIDEwMCB0b3Agc2l0ZXMsIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbgorICAgICAgICBQT0RJbnRlcnZhbFRyZWUgaXMg
MjUgYW5kIHRoZXkgdGFrZSBsZXNzIHRoYW4gMUtCLiAgVGhlcmVmb3JlLCB3ZSBjYW4gcmVkdWNl
IHRoZSBjaHVuayBzaXplIHRvIDRLQiBhbmQgc3RpbGwKKyAgICAgICAga2VlcCB0aGUgbnVtYmVy
IG9mIGNodW5rcyBsb3cuCisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIG9uIG55dGltZXMuY29t
IGFuZCB0aGUgaGVhcCBjb25zdW1wdGlvbiBvZiBQT0RJbnRlcnZhbFRyZWUgcmVkdWNlZCBmcm9t
IDEuN01CIHRvIDRLQi4gUGVyZm9ybWFuY2UKKyAgICAgICAgZG9lc24ndCByZWdyZXNzIG9uIHRl
c3QgUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwuCisKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaCk6IGluaXRp
YWxpemUgdGhlIHNoYXJlZCBQT0RBcmVuYS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpQT0RJbnRlcnZhbEFyZW5hKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9QT0RBcmVuYS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OmZyZWVPYmpl
Y3QpOiBmcmVlIGFuIG9iamVjdCBmcm9tIFBPREFyZW5hLCBtYXJrIGl0cyBtZW1vcnkgZnJlZS4K
KyAgICAgICAgKFdlYkNvcmU6OlBPREFyZW5hOjphbGxvY2F0ZUJhc2UpOiBjaGVjayBpZiB3ZSBj
YW4gcmV1c2UgYSBmcmVlIGNlbGwgd2hlbiB0aGUgY3VycmVudCBjaHVuayBpcyBmdWxsLgorICAg
ICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OkNodW5rOjpDaHVuayk6IHVzZSBtX2ZyZWVMaXN0IHRv
IHRyYWNrIHRoZSBmcmVlIGNlbGxzIGluIHRoaXMgY2h1bmsuCisgICAgICAgIChXZWJDb3JlOjpQ
T0RBcmVuYTo6Q2h1bms6OmFsbG9jYXRlKTogcmV1c2UgYSBmcmVlIGNlbGwgaWYgdGhlcmUgaXMg
YW55LgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OkNodW5rOjpmcmVlKTogbWFyayB0aGUg
bWVtb3J5IHRha2VuIGJ5IHRoaXMgb2JqZWN0IGZyZWUsIGFuZCBsaW5rIGl0IHRvIG1fZnJlZUxp
c3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RBcmVuYTo6Q2h1bms6OmNvbnRhaW5zKTogY2hlY2sg
aWYgYSBwb2ludGVyIGlzIGluc2lkZSBhIGNodW5rLgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJl
bmE6OkNodW5rOjpoYXNGcmVlTGlzdCk6IGNoZWNrIGlmIHRoZSBjaHVuayBoYXMgZnJlZSBjZWxs
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBPRFJlZEJsYWNrVHJlZTo6Y2xlYXIpOiBtYXJrIGFsbCBub2RlcyBmcmVlIGJlZm9yZSBk
ZWxldGluZyB0aGlzIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6Omlu
aXRJZk5lZWRlZCk6IGFkZCBhIG5ldyBtZXRob2QgdG8gcGFzcyBvbiB0aGUgc2hhcmVkIFBPREFy
ZW5hLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpkZWxldGVOb2RlKTogbWFy
ayB0aGUgbm9kZSBhcyBmcmVlIGluIFBPREFyZW5hLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjptYXJrRnJlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2Vk
RmxvYXRzVHJlZSk6IHBhc3NpbmcgdGhlIHNoYXJlZCBQT0RBcmVuYSB0byBtX3BsYWNlZEZsb2F0
c1RyZWUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorCiAy
MDExLTEyLTAyICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxNzMxLgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDE4NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg4LDcgKzE3ODgsMTAgQEAgdm9pZCBEb2N1
bWVudDo6YXR0YWNoKCkKIAogICAgIGlmICghbV9yZW5kZXJBcmVuYSkKICAgICAgICAgbV9yZW5k
ZXJBcmVuYSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJBcmVuYSk7Ci0gICAgCisKKyAgICBpZiAoIW1f
UE9ESW50ZXJ2YWxBcmVuYSkKKyAgICAgICAgbV9QT0RJbnRlcnZhbEFyZW5hID0gUE9EQXJlbmE6
OmNyZWF0ZSgpOworCiAgICAgLy8gQ3JlYXRlIHRoZSByZW5kZXJpbmcgdHJlZQogICAgIHNldFJl
bmRlcmVyKG5ldyAobV9yZW5kZXJBcmVuYS5nZXQoKSkgUmVuZGVyVmlldyh0aGlzLCB2aWV3KCkp
KTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMTAxODQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgogI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgorI2luY2x1ZGUgIlBPREFyZW5hLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0
eVBvbGljeS5oIgpAQCAtNTc0LDYgKzU3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpIE9WRVJSSURFOwogCiAgICAgUmVuZGVyQXJlbmEqIHJl
bmRlckFyZW5hKCkgeyByZXR1cm4gbV9yZW5kZXJBcmVuYS5nZXQoKTsgfQorICAgIFBPREFyZW5h
KiBQT0RJbnRlcnZhbEFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9QT0RJbnRlcnZhbEFyZW5hLmdl
dCgpOyB9CiAKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3KCkgY29uc3Q7CiAKQEAgLTEzMTMs
NiArMTMxNSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0bGVFbGVtZW50
OwogCiAgICAgT3duUHRyPFJlbmRlckFyZW5hPiBtX3JlbmRlckFyZW5hOworICAgIFJlZlB0cjxQ
T0RBcmVuYT4gbV9QT0RJbnRlcnZhbEFyZW5hOwogCiAgICAgbXV0YWJsZSBBWE9iamVjdENhY2hl
KiBtX2F4T2JqZWN0Q2FjaGU7CiAgICAgT3duUHRyPERvY3VtZW50TWFya2VyQ29udHJvbGxlcj4g
bV9tYXJrZXJzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EQXJlbmEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RBcmVuYS5oCShyZXZpc2lvbiAx
MDE4NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RBcmVuYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw2ICs5NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUKj4ocHRyKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZyZWVPYmpl
Y3QoVCogcHRyKQorICAgIHsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2h1bmtzLmVu
ZCgpOworICAgICAgICBDaHVua1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NodW5rcy5i
ZWdpbigpOworICAgICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoKCpp
dCktPmNvbnRhaW5zKHB0cikpIHsKKyAgICAgICAgICAgICAgICAoKml0KS0+ZnJlZShwdHIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpdDsK
KyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIEFsbG9jYXRlcyBhbiBvYmplY3QgZnJvbSB0aGUg
YXJlbmEsIGNhbGxpbmcgYSBzaW5nbGUtYXJndW1lbnQgY29uc3RydWN0b3IuCiAgICAgdGVtcGxh
dGU8Y2xhc3MgVCwgY2xhc3MgQXJndW1lbnQxVHlwZT4gVCogYWxsb2NhdGVPYmplY3QoY29uc3Qg
QXJndW1lbnQxVHlwZSYgYXJndW1lbnQxKQogICAgIHsKQEAgLTEwOCw3ICsxMjQsNyBAQCBwdWJs
aWM6CiAgICAgLy8gVGhlIGluaXRpYWwgc2l6ZSBvZiBhbGxvY2F0ZWQgY2h1bmtzOyBpbmNyZWFz
ZXMgYXMgbmVjZXNzYXJ5IHRvCiAgICAgLy8gc2F0aXNmeSBsYXJnZSBhbGxvY2F0aW9ucy4gTWFp
bmx5IHB1YmxpYyBmb3IgdW5pdCB0ZXN0cy4KICAgICBlbnVtIHsKLSAgICAgICAgRGVmYXVsdENo
dW5rU2l6ZSA9IDE2Mzg0CisgICAgICAgIERlZmF1bHRDaHVua1NpemUgPSA0MDk2CiAgICAgfTsK
IAogcHJvdGVjdGVkOgpAQCAtMTM3LDkgKzE1MywyNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgdm9pZCogcHRyID0gMDsKICAgICAgICAgc2l6ZV90IHJvdW5kZWRTaXplID0gcm91bmRVcChz
aXplb2YoVCksIG1pbkFsaWdubWVudDxUPigpKTsKLSAgICAgICAgaWYgKG1fY3VycmVudCkKKwor
ICAgICAgICBpZiAobV9jdXJyZW50KSB7CiAgICAgICAgICAgICBwdHIgPSBtX2N1cnJlbnQtPmFs
bG9jYXRlKHJvdW5kZWRTaXplKTsKIAorICAgICAgICAgICAgaWYgKCFwdHIpIHsKKyAgICAgICAg
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gcmV1c2UgYSBmcmVlIGNlbGwgZnJvbSBvdGhlciBj
aHVua3MuCisgICAgICAgICAgICAgICAgQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fY2h1bmtzLmVuZCgpOworICAgICAgICAgICAgICAgIENodW5rVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY2h1bmtzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0IDwg
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKml0KS0+aGFzRnJlZUxpc3QoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gKCppdCktPmFsbG9jYXRlKHJvdW5kZWRTaXpl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKICAgICAgICAgaWYgKCFwdHIpIHsKICAgICAgICAgICAgIGlmIChy
b3VuZGVkU2l6ZSA+IG1fY3VycmVudENodW5rU2l6ZSkKICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRDaHVua1NpemUgPSByb3VuZGVkU2l6ZTsKQEAgLTE2MCw2ICsxOTEsMTAgQEAgcHJpdmF0ZToK
ICAgICAvLyBNYW5hZ2VzIGEgY2h1bmsgb2YgbWVtb3J5IGFuZCBpbmRpdmlkdWFsIGFsbG9jYXRp
b25zIG91dCBvZiBpdC4KICAgICBjbGFzcyBDaHVuayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENodW5rKTsKKworICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgeworICAgICAgICAgICAg
RnJlZUNlbGwgKm1fbmV4dDsKKyAgICAgICAgfTsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIEFs
bG9jYXRlcyBhIGJsb2NrIG9mIG1lbW9yeSBvZiB0aGUgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBwYXNz
ZWQKICAgICAgICAgLy8gQWxsb2NhdG9yLgpAQCAtMTY3LDYgKzIwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAgICAgICAgICwgbV9zaXpl
KHNpemUpCiAgICAgICAgICAgICAsIG1fY3VycmVudE9mZnNldCgwKQorICAgICAgICAgICAgLCBt
X2ZyZWVMaXN0KDApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYmFzZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihtX2FsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSkpOwogICAgICAgICB9CkBAIC0x
ODIsNiArMjE4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIENodW5rIGNvdWxkIG5vdCBzYXRp
c2Z5IHRoZSBhbGxvY2F0aW9uLgogICAgICAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkK
ICAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZnJlZUxpc3QpIHsKKyAgICAgICAgICAgICAg
ICAvLyBSZXVzZSBhIGZyZWUgY2VsbC4KKyAgICAgICAgICAgICAgICB2b2lkKiBwID0gbV9mcmVl
TGlzdDsKKyAgICAgICAgICAgICAgICBtX2ZyZWVMaXN0ID0gbV9mcmVlTGlzdC0+bV9uZXh0Owor
ICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAv
LyBDaGVjayBmb3Igb3ZlcmZsb3cKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRPZmZzZXQgKyBz
aXplIDwgbV9jdXJyZW50T2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTk0
LDE3ICsyMzcsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KIAorICAgICAgICB2b2lkIGZyZWUodm9pZCogcHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoY29udGFpbnMocHRyKSk7CisKKyAgICAgICAgICAgIEZyZWVDZWxsKiBjZWxs
ID0gKEZyZWVDZWxsKilwdHI7CisgICAgICAgICAgICBjZWxsLT5tX25leHQgPSBtX2ZyZWVMaXN0
OworICAgICAgICAgICAgbV9mcmVlTGlzdCA9IGNlbGw7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIGNvbnRhaW5zKHZvaWQqIHB0cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIChwdHIgPj0gbV9iYXNlICYmIHB0ciA8IG1fYmFzZSArIG1fc2l6ZSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGhhc0ZyZWVMaXN0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fZnJlZUxpc3Q7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IEFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAgICAgICAgIHVpbnQ4X3QqIG1fYmFzZTsKICAgICAg
ICAgc2l6ZV90IG1fc2l6ZTsKICAgICAgICAgc2l6ZV90IG1fY3VycmVudE9mZnNldDsKKyAgICAg
ICAgRnJlZUNlbGwqIG1fZnJlZUxpc3Q7CiAgICAgfTsKIAorICAgIHR5cGVkZWYgVmVjdG9yPE93
blB0cjxDaHVuaz4gPiBDaHVua1ZlY3RvcjsKKwogICAgIFJlZlB0cjxBbGxvY2F0b3I+IG1fYWxs
b2NhdG9yOwogICAgIENodW5rKiBtX2N1cnJlbnQ7CiAgICAgc2l6ZV90IG1fY3VycmVudENodW5r
U2l6ZTsKLSAgICBWZWN0b3I8T3duUHRyPENodW5rPiA+IG1fY2h1bmtzOworICAgIENodW5rVmVj
dG9yIG1fY2h1bmtzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDEwMTg0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDgsNiArMTQ4LDcgQEAgcHVibGljOgogICAgIC8vIGlzSW5pdGlhbGl6ZWQgd2lsbCBy
ZXR1cm4gZmFsc2UuCiAgICAgdm9pZCBjbGVhcigpCiAgICAgeworICAgICAgICBtYXJrRnJlZSht
X3Jvb3QpOwogICAgICAgICBtX2FyZW5hID0gMDsKICAgICAgICAgbV9yb290ID0gMDsKICAgICB9
CkBAIC0xNjMsNiArMTY0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYXJlbmEgPSBQT0RB
cmVuYTo6Y3JlYXRlKCk7CiAgICAgfQogCisgICAgdm9pZCBpbml0SWZOZWVkZWQoUGFzc1JlZlB0
cjxQT0RBcmVuYT4gYXJlbmEpCisgICAgeworICAgICAgICBpZiAoIW1fYXJlbmEpCisgICAgICAg
ICAgICBtX2FyZW5hID0gYXJlbmE7CisgICAgfQorCiAgICAgdm9pZCBhZGQoY29uc3QgVCYgZGF0
YSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwpAQCAtNjkwLDYgKzY5
Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVVcGRhdGVzKHhQYXJlbnQpOwog
ICAgICAgICBpZiAoeS0+Y29sb3IoKSA9PSBCbGFjaykKICAgICAgICAgICAgIGRlbGV0ZUZpeHVw
KHgsIHhQYXJlbnQpOworICAgICAgICAKKyAgICAgICAgbV9hcmVuYS0+ZnJlZU9iamVjdDxOb2Rl
Pih5KTsKICAgICB9CiAKICAgICAvLyBWaXNpdHMgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHRoZSBn
aXZlbiBub2RlIGluIG9yZGVyLgpAQCAtNzAyLDYgKzcxMSwxOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdmlzaXRJbm9yZGVySW1wbChub2RlLT5yaWdodCgpLCB2aXNpdG9yKTsKICAgICB9CiAK
KyAgICB2b2lkIG1hcmtGcmVlKE5vZGUgKm5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG5vZGUtPmxlZnQoKSkKKyAgICAg
ICAgICAgIG1hcmtGcmVlKG5vZGUtPmxlZnQoKSk7CisgICAgICAgIGlmIChub2RlLT5yaWdodCgp
KQorICAgICAgICAgICAgbWFya0ZyZWUobm9kZS0+cmlnaHQoKSk7CisgICAgICAgIG1fYXJlbmEt
PmZyZWVPYmplY3Q8Tm9kZT4obm9kZSk7CisgICAgfQorCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg
ICAgLy8gSGVscGVyIGNsYXNzIGZvciBzaXplKCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMDE4NDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcyLDcgKzMy
NzIsNyBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrCiAKICAgICAv
LyBDcmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3RzIGlmIHdlIGRvbid0IGFsZWFkeSBo
YXZlIG9uZQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyh0aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFk
eSBpbiB0aGUgbGlzdAogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CkBAIC0zOTM3LDcgKzM5MzcsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0ZsCiAKICAgICAgICAgICAg
ICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAgICAg
ICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhpcywgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkpOwogCiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9h
dGluZ09iaik7CiAgICAgICAgICAgICB9CkBAIC00MDEwLDcgKzQwMTAsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKHRoaXMsIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZs
b2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzAxMSw3ICs3MDExLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdQogICAgIEFTU0VSVCgh
bV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgaWYgKG1fc2V0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVk
ZWQoKTsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKG1fcmVuZGVyZXItPmRv
Y3VtZW50KCktPlBPREludGVydmFsQXJlbmEoKSk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBtX3NldC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTAxODQzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk1NywxMiArOTU3LDEzIEBAIHByaXZhdGU6CiAKICAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdPYmplY3RzKGJvb2wgaG9yaXpvbnRhbFdy
aXRpbmdNb2RlKQorICAgICAgICBGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKICAgICAgICAgICAgIDogbV9wbGFj
ZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQogICAgICAgICAgICAgLCBtX2xlZnRPYmpl
Y3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQogICAgICAg
ICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9ob3Jp
em9udGFsV3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgLCBt
X3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtOTk5LDYgKzEw
MDAsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50Owog
ICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQ7CiAgICAgICAgIGJvb2wg
bV9ob3Jpem9udGFsV3JpdGluZ01vZGU7CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBtX3Jl
bmRlcmVyOwogICAgIH07CiAgICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09i
amVjdHM7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117731</attachid>
            <date>2011-12-02 18:37:11 -0800</date>
            <delta_ts>2011-12-13 18:41:30 -0800</delta_ts>
            <desc>Fix style issue.</desc>
            <filename>shared_podarena.patch</filename>
            <type>text/plain</type>
            <size>13536</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDExLTEyLTAyICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUE9ESW5lcnZhbFRy
ZWUgdGFrZXMgMS43TUIgbWVtb3J5IG9uIHd3dy5ueXRpbWVzLmNvbS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNzEyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGEgUmVuZGVyQmxvY2sgd2hpY2gg
aGFzIGZsb2F0aW5nIG9iamVjdHMgaW5zaWRlLCB3ZSB3aWxsIGNyZWF0ZSBhIFBPREludGVydmFs
VHJlZSBhbmQgYSBQT0RBcmVuYSB3aXRoCisgICAgICAgIGF0IGxlYXN0IG9uZSAxNktCIGNodW5r
LiAgQSBwYWdlIGNvdWxkIGhhdmUgYSBsYXJnZSBudW1iZXIgb2Ygc3VjaCBSZW5kZXJCbG9ja3Mg
YW5kIHRoZXkgY291bGQgdGFrZSBodWdlCisgICAgICAgIGFtb3VudCBvZiBtZW1vcnkuICBUaGlz
IHBhdGNoIGNyZWF0ZXMgYSBzaGFyZWQgUE9EQXJlbmEgaW4gRG9jdW1lbnQuICBJbnN0ZWFkIG9m
IGhhdmluZyB0aGVpciBvd24gUE9EQXJlbmEsCisgICAgICAgIGVhY2ggUmVuZGVyQmxvY2sgd2l0
aCBmbG9hdGluZyBvYmplY3RzIGNvdWxkIHNoYXJlIHRoaXMgUE9EQXJlbmEgdG8gcmVkdWNlIG1l
bW9yeSBjb25zdW1wdGlvbi4KKworICAgICAgICBUaGUgc2hhcmVkIFBPREFyZW5hIGNvdWxkIGdy
b3cgdW5ib3VuZGVkbHkgaWYgd2Uga2VlcCByZW1vdmluZyBhbmQgYWRkaW5nIGZsb2F0aW5nIG9i
amVjdHMuICBXZSBjYW4gZml4IHRoYXQKKyAgICAgICAgYnkgcmV1c2luZyB0aGUgZnJlZWQgbWVt
b3J5IGluIGVhY2ggY2h1bmsuICBUaGlzIHBhdGNoIGFkZHMgYSBmcmVlIGxpc3QgdG8gdHJhY2sg
ZnJlZWQgbm9kZXMgaW5zaWRlIHRoZSBjaHVuaworICAgICAgICBhbmQgcmV1c2UgdGhlIGZyZWUg
bm9kZXMgaW4gZnV0dXJlIGFsbG9jYXRpb25zLgorCisgICAgICAgIDE2S0IgY2h1bmsgc2VlbXMg
dG8gYmUgb3ZlciBnZW5lcm91cy4gIEkgdGVzdGVkIG9uIEFsZXhhIDEwMCB0b3Agc2l0ZXMsIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbgorICAgICAgICBQT0RJbnRlcnZhbFRyZWUgaXMg
MjUgYW5kIHRoZXkgdGFrZSBsZXNzIHRoYW4gMUtCLiAgVGhlcmVmb3JlLCB3ZSBjYW4gcmVkdWNl
IHRoZSBjaHVuayBzaXplIHRvIDRLQiBhbmQgc3RpbGwKKyAgICAgICAga2VlcCB0aGUgbnVtYmVy
IG9mIGNodW5rcyBsb3cuCisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIG9uIG55dGltZXMuY29t
IGFuZCB0aGUgaGVhcCBjb25zdW1wdGlvbiBvZiBQT0RJbnRlcnZhbFRyZWUgcmVkdWNlZCBmcm9t
IDEuN01CIHRvIDRLQi4gUGVyZm9ybWFuY2UKKyAgICAgICAgZG9lc24ndCByZWdyZXNzIG9uIHRl
c3QgUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwuCisKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaCk6IGluaXRp
YWxpemUgdGhlIHNoYXJlZCBQT0RBcmVuYS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpQT0RJbnRlcnZhbEFyZW5hKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9QT0RBcmVuYS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OmZyZWVPYmpl
Y3QpOiBmcmVlIGFuIG9iamVjdCBmcm9tIFBPREFyZW5hLCBtYXJrIGl0cyBtZW1vcnkgZnJlZS4K
KyAgICAgICAgKFdlYkNvcmU6OlBPREFyZW5hOjphbGxvY2F0ZUJhc2UpOiBjaGVjayBpZiB3ZSBj
YW4gcmV1c2UgYSBmcmVlIGNlbGwgd2hlbiB0aGUgY3VycmVudCBjaHVuayBpcyBmdWxsLgorICAg
ICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OkNodW5rOjpDaHVuayk6IHVzZSBtX2ZyZWVMaXN0IHRv
IHRyYWNrIHRoZSBmcmVlIGNlbGxzIGluIHRoaXMgY2h1bmsuCisgICAgICAgIChXZWJDb3JlOjpQ
T0RBcmVuYTo6Q2h1bms6OmFsbG9jYXRlKTogcmV1c2UgYSBmcmVlIGNlbGwgaWYgdGhlcmUgaXMg
YW55LgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OkNodW5rOjpmcmVlKTogbWFyayB0aGUg
bWVtb3J5IHRha2VuIGJ5IHRoaXMgb2JqZWN0IGZyZWUsIGFuZCBsaW5rIGl0IHRvIG1fZnJlZUxp
c3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RBcmVuYTo6Q2h1bms6OmNvbnRhaW5zKTogY2hlY2sg
aWYgYSBwb2ludGVyIGlzIGluc2lkZSBhIGNodW5rLgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJl
bmE6OkNodW5rOjpoYXNGcmVlTGlzdCk6IGNoZWNrIGlmIHRoZSBjaHVuayBoYXMgZnJlZSBjZWxs
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBPRFJlZEJsYWNrVHJlZTo6Y2xlYXIpOiBtYXJrIGFsbCBub2RlcyBmcmVlIGJlZm9yZSBk
ZWxldGluZyB0aGlzIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6Omlu
aXRJZk5lZWRlZCk6IGFkZCBhIG5ldyBtZXRob2QgdG8gcGFzcyBvbiB0aGUgc2hhcmVkIFBPREFy
ZW5hLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpkZWxldGVOb2RlKTogbWFy
ayB0aGUgbm9kZSBhcyBmcmVlIGluIFBPREFyZW5hLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjptYXJrRnJlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2Vk
RmxvYXRzVHJlZSk6IHBhc3NpbmcgdGhlIHNoYXJlZCBQT0RBcmVuYSB0byBtX3BsYWNlZEZsb2F0
c1RyZWUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorCiAy
MDExLTEyLTAyICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAxNzMxLgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDE4NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAKICNpbmNsdWRlICJO
b2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZVdp
dGhJbmRleC5oIgorI2luY2x1ZGUgIlBPREFyZW5hLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKQEAg
LTE3ODgsNyArMTc4OSwxMCBAQCB2b2lkIERvY3VtZW50OjphdHRhY2goKQogCiAgICAgaWYgKCFt
X3JlbmRlckFyZW5hKQogICAgICAgICBtX3JlbmRlckFyZW5hID0gYWRvcHRQdHIobmV3IFJlbmRl
ckFyZW5hKTsKLSAgICAKKworICAgIGlmICghbV9QT0RJbnRlcnZhbEFyZW5hKQorICAgICAgICBt
X1BPREludGVydmFsQXJlbmEgPSBQT0RBcmVuYTo6Y3JlYXRlKCk7CisKICAgICAvLyBDcmVhdGUg
dGhlIHJlbmRlcmluZyB0cmVlCiAgICAgc2V0UmVuZGVyZXIobmV3IChtX3JlbmRlckFyZW5hLmdl
dCgpKSBSZW5kZXJWaWV3KHRoaXMsIHZpZXcoKSkpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMDE4NDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEw
OSw3IEBAIGNsYXNzIE1lZGlhUXVlcnlNYXRjaGVyOwogY2xhc3MgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0czsKIGNsYXNzIE5vZGVGaWx0ZXI7CiBjbGFzcyBOb2RlSXRlcmF0b3I7CitjbGFz
cyBQT0RBcmVuYTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFz
cyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb247CkBAIC01NzQsNiArNTc1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKCkgT1ZFUlJJREU7CiAKICAgICBS
ZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEoKSB7IHJldHVybiBtX3JlbmRlckFyZW5hLmdldCgpOyB9
CisgICAgUE9EQXJlbmEqIFBPREludGVydmFsQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX1BPRElu
dGVydmFsQXJlbmEuZ2V0KCk7IH0KIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcoKSBjb25z
dDsKIApAQCAtMTMxMyw2ICsxMzE1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4g
bV90aXRsZUVsZW1lbnQ7CiAKICAgICBPd25QdHI8UmVuZGVyQXJlbmE+IG1fcmVuZGVyQXJlbmE7
CisgICAgUmVmUHRyPFBPREFyZW5hPiBtX1BPREludGVydmFsQXJlbmE7CiAKICAgICBtdXRhYmxl
IEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZTsKICAgICBPd25QdHI8RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyPiBtX21hcmtlcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
T0RBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREFyZW5h
LmgJKHJldmlzaW9uIDEwMTg0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREFyZW5h
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIFQ+
IHZvaWQgZnJlZU9iamVjdChUKiBwdHIpCisgICAgeworICAgICAgICBpZiAoIXB0cikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBDaHVua1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9jaHVua3MuZW5kKCk7CisgICAgICAgIENodW5rVmVjdG9yOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY2h1bmtzLmJlZ2luKCk7CisgICAgICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAg
ICAgICAgIGlmICgoKml0KS0+Y29udGFpbnMocHRyKSkgeworICAgICAgICAgICAgICAgICgqaXQp
LT5mcmVlKHB0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICArK2l0OworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQWxsb2NhdGVzIGFuIG9i
amVjdCBmcm9tIHRoZSBhcmVuYSwgY2FsbGluZyBhIHNpbmdsZS1hcmd1bWVudCBjb25zdHJ1Y3Rv
ci4KICAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBBcmd1bWVudDFUeXBlPiBUKiBhbGxvY2F0
ZU9iamVjdChjb25zdCBBcmd1bWVudDFUeXBlJiBhcmd1bWVudDEpCiAgICAgewpAQCAtMTA4LDcg
KzEyNCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgaW5pdGlhbCBzaXplIG9mIGFsbG9jYXRlZCBj
aHVua3M7IGluY3JlYXNlcyBhcyBuZWNlc3NhcnkgdG8KICAgICAvLyBzYXRpc2Z5IGxhcmdlIGFs
bG9jYXRpb25zLiBNYWlubHkgcHVibGljIGZvciB1bml0IHRlc3RzLgogICAgIGVudW0gewotICAg
ICAgICBEZWZhdWx0Q2h1bmtTaXplID0gMTYzODQKKyAgICAgICAgRGVmYXVsdENodW5rU2l6ZSA9
IDQwOTYKICAgICB9OwogCiBwcm90ZWN0ZWQ6CkBAIC0xMzcsOSArMTUzLDI0IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICB2b2lkKiBwdHIgPSAwOwogICAgICAgICBzaXplX3Qgcm91bmRlZFNp
emUgPSByb3VuZFVwKHNpemVvZihUKSwgbWluQWxpZ25tZW50PFQ+KCkpOwotICAgICAgICBpZiAo
bV9jdXJyZW50KQorCisgICAgICAgIGlmIChtX2N1cnJlbnQpIHsKICAgICAgICAgICAgIHB0ciA9
IG1fY3VycmVudC0+YWxsb2NhdGUocm91bmRlZFNpemUpOwogCisgICAgICAgICAgICBpZiAoIXB0
cikgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiByZXVzZSBhIGZyZWUgY2Vs
bCBmcm9tIG90aGVyIGNodW5rcy4KKyAgICAgICAgICAgICAgICBDaHVua1ZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9jaHVua3MuZW5kKCk7CisgICAgICAgICAgICAgICAgQ2h1bmtWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaHVua3MuYmVnaW4oKTsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoaXQgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqaXQpLT5oYXNG
cmVlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAoKml0KS0+YWxsb2Nh
dGUocm91bmRlZFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpZiAoIXB0cikgewogICAg
ICAgICAgICAgaWYgKHJvdW5kZWRTaXplID4gbV9jdXJyZW50Q2h1bmtTaXplKQogICAgICAgICAg
ICAgICAgIG1fY3VycmVudENodW5rU2l6ZSA9IHJvdW5kZWRTaXplOwpAQCAtMTYwLDYgKzE5MSwx
MCBAQCBwcml2YXRlOgogICAgIC8vIE1hbmFnZXMgYSBjaHVuayBvZiBtZW1vcnkgYW5kIGluZGl2
aWR1YWwgYWxsb2NhdGlvbnMgb3V0IG9mIGl0LgogICAgIGNsYXNzIENodW5rIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2h1bmspOworCisgICAgICAgIHN0cnVjdCBGcmVlQ2VsbCB7
CisgICAgICAgICAgICBGcmVlQ2VsbCAqbV9uZXh0OworICAgICAgICB9OwogICAgIHB1YmxpYzoK
ICAgICAgICAgLy8gQWxsb2NhdGVzIGEgYmxvY2sgb2YgbWVtb3J5IG9mIHRoZSBnaXZlbiBzaXpl
IGZyb20gdGhlIHBhc3NlZAogICAgICAgICAvLyBBbGxvY2F0b3IuCkBAIC0xNjcsNiArMjAyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICAg
ICAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAgICAgICAgICwgbV9jdXJyZW50T2Zmc2V0KDApCisg
ICAgICAgICAgICAsIG1fZnJlZUxpc3QoMCkKICAgICAgICAgewogICAgICAgICAgICAgbV9iYXNl
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKSk7CiAg
ICAgICAgIH0KQEAgLTE4Miw2ICsyMTgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gQ2h1bmsg
Y291bGQgbm90IHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uCiAgICAgICAgIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCBzaXplKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9mcmVlTGlzdCkgewor
ICAgICAgICAgICAgICAgIC8vIFJldXNlIGEgZnJlZSBjZWxsLgorICAgICAgICAgICAgICAgIHZv
aWQqIHAgPSBtX2ZyZWVMaXN0OworICAgICAgICAgICAgICAgIG1fZnJlZUxpc3QgPSBtX2ZyZWVM
aXN0LT5tX25leHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdwogICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudE9mZnNldCArIHNpemUgPCBtX2N1cnJlbnRPZmZzZXQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xOTQsMTcgKzIzNywzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZnJlZSh2b2lkKiBwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250YWlucyhwdHIpKTsKKworICAgICAgICAgICAg
RnJlZUNlbGwqIGNlbGwgPSAoRnJlZUNlbGwqKXB0cjsKKyAgICAgICAgICAgIGNlbGwtPm1fbmV4
dCA9IG1fZnJlZUxpc3Q7CisgICAgICAgICAgICBtX2ZyZWVMaXN0ID0gY2VsbDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcHRyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKHB0ciA+PSBtX2Jhc2UgJiYgcHRyIDwgbV9iYXNlICsgbV9zaXpl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzRnJlZUxpc3QoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9mcmVlTGlzdDsKKyAgICAgICAgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKICAgICAgICAgdWludDhfdCog
bV9iYXNlOwogICAgICAgICBzaXplX3QgbV9zaXplOwogICAgICAgICBzaXplX3QgbV9jdXJyZW50
T2Zmc2V0OworICAgICAgICBGcmVlQ2VsbCogbV9mcmVlTGlzdDsKICAgICB9OwogCisgICAgdHlw
ZWRlZiBWZWN0b3I8T3duUHRyPENodW5rPiA+IENodW5rVmVjdG9yOworCiAgICAgUmVmUHRyPEFs
bG9jYXRvcj4gbV9hbGxvY2F0b3I7CiAgICAgQ2h1bmsqIG1fY3VycmVudDsKICAgICBzaXplX3Qg
bV9jdXJyZW50Q2h1bmtTaXplOwotICAgIFZlY3RvcjxPd25QdHI8Q2h1bms+ID4gbV9jaHVua3M7
CisgICAgQ2h1bmtWZWN0b3IgbV9jaHVua3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAkocmV2aXNp
b24gMTAxODQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgLy8gaXNJbml0
aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KICAgICB2b2lkIGNsZWFyKCkKICAgICB7CisgICAg
ICAgIG1hcmtGcmVlKG1fcm9vdCk7CiAgICAgICAgIG1fYXJlbmEgPSAwOwogICAgICAgICBtX3Jv
b3QgPSAwOwogICAgIH0KQEAgLTE2Myw2ICsxNjQsMTIgQEAgcHVibGljOgogICAgICAgICAgICAg
bV9hcmVuYSA9IFBPREFyZW5hOjpjcmVhdGUoKTsKICAgICB9CiAKKyAgICB2b2lkIGluaXRJZk5l
ZWRlZChQYXNzUmVmUHRyPFBPREFyZW5hPiBhcmVuYSkKKyAgICB7CisgICAgICAgIGlmICghbV9h
cmVuYSkKKyAgICAgICAgICAgIG1fYXJlbmEgPSBhcmVuYTsKKyAgICB9CisKICAgICB2b2lkIGFk
ZChjb25zdCBUJiBkYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7
CkBAIC02OTAsNiArNjk3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZVVwZGF0
ZXMoeFBhcmVudCk7CiAgICAgICAgIGlmICh5LT5jb2xvcigpID09IEJsYWNrKQogICAgICAgICAg
ICAgZGVsZXRlRml4dXAoeCwgeFBhcmVudCk7CisgICAgICAgIAorICAgICAgICBtX2FyZW5hLT5m
cmVlT2JqZWN0PE5vZGU+KHkpOwogICAgIH0KIAogICAgIC8vIFZpc2l0cyB0aGUgc3VidHJlZSBy
b290ZWQgYXQgdGhlIGdpdmVuIG5vZGUgaW4gb3JkZXIuCkBAIC03MDIsNiArNzExLDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB2aXNpdElub3JkZXJJbXBsKG5vZGUtPnJpZ2h0KCksIHZpc2l0
b3IpOwogICAgIH0KIAorICAgIHZvaWQgbWFya0ZyZWUoTm9kZSAqbm9kZSkKKyAgICB7CisgICAg
ICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobm9kZS0+
bGVmdCgpKQorICAgICAgICAgICAgbWFya0ZyZWUobm9kZS0+bGVmdCgpKTsKKyAgICAgICAgaWYg
KG5vZGUtPnJpZ2h0KCkpCisgICAgICAgICAgICBtYXJrRnJlZShub2RlLT5yaWdodCgpKTsKKyAg
ICAgICAgbV9hcmVuYS0+ZnJlZU9iamVjdDxOb2RlPihub2RlKTsKKyAgICB9CisKICAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICAgICAvLyBIZWxwZXIgY2xhc3MgZm9yIHNpemUoKQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEwMTg0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyNzIsNyArMzI3Miw3IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVy
QmxvY2sKIAogICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVjaWFsIG9iamVjdHMgaWYgd2Ug
ZG9uJ3QgYWxlYWR5IGhhdmUgb25lCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9w
dFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKHRoaXMsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IHRoZSBvYmplY3QgYWdhaW4g
aWYgaXQncyBhbHJlYWR5IGluIHRoZSBsaXN0CiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKQEAgLTM5
MzcsNyArMzkzNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmwK
IAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3Qg
bGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2Jq
ZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyh0aGlzLCBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+YWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KQEAgLTQwMTAsNyArNDAxMCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW4KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBs
aXN0IGxhemlseS4KICAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAg
ICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGlu
Z09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhpcywg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03
MDExLDcgKzcwMTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1
CiAgICAgQVNTRVJUKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKTsKICAgICBp
ZiAobV9zZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wbGFjZWRGbG9hdHNU
cmVlLmluaXRJZk5lZWRlZCgpOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQo
bV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+UE9ESW50ZXJ2YWxBcmVuYSgpKTsKICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsKICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biAxMDE4NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtOTU3LDEyICs5NTcsMTMgQEAgcHJpdmF0ZToKIAogICAgIGNsYXNzIEZs
b2F0aW5nT2JqZWN0cyB7CiAgICAgcHVibGljOgotICAgICAgICBGbG9hdGluZ09iamVjdHMoYm9v
bCBob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAg
ICAgICAgOiBtX3BsYWNlZEZsb2F0c1RyZWUoVW5pbml0aWFsaXplZFRyZWUpCiAgICAgICAgICAg
ICAsIG1fbGVmdE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0Nv
dW50KDApCiAgICAgICAgICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCgwKQogICAgICAg
ICAgICAgLCBtX2hvcml6b250YWxXcml0aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCisg
ICAgICAgICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgICAgIHsKICAgICAgICAgfQog
CkBAIC05OTksNiArMTAwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRP
YmplY3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsK
ICAgICAgICAgYm9vbCBtX2hvcml6b250YWxXcml0aW5nTW9kZTsKKyAgICAgICAgY29uc3QgUmVu
ZGVyQmxvY2sqIG1fcmVuZGVyZXI7CiAgICAgfTsKICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3Rz
PiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAK
</data>
<flag name="review"
          id="117270"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119134</attachid>
            <date>2011-12-13 18:41:30 -0800</date>
            <delta_ts>2011-12-15 11:50:30 -0800</delta_ts>
            <desc>Create a separate class PODFreeListArena which allocates objects of the same size.</desc>
            <filename>podfreelistarena.patch</filename>
            <type>text/plain</type>
            <size>21895</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDExLTEyLTEzICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUE9ESW50ZXJ2YWxU
cmVlIHRha2VzIDEuN01CIG1lbW9yeSBvbiB3d3cubnl0aW1lcy5jb20uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvciBhIFJlbmRlckJsb2NrIHdoaWNo
IGhhcyBmbG9hdGluZyBvYmplY3RzIGluc2lkZSwgd2Ugd2lsbCBjcmVhdGUgYSBQT0RJbnRlcnZh
bFRyZWUgYW5kIGEgUE9EQXJlbmEgd2l0aAorICAgICAgICBhdCBsZWFzdCBvbmUgMTZLQiBjaHVu
ay4gIEEgcGFnZSBjb3VsZCBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIHN1Y2ggUmVuZGVyQmxvY2tz
IGFuZCB0aGV5IGNvdWxkIHRha2UgaHVnZQorICAgICAgICBhbW91bnQgb2YgbWVtb3J5LiAgVG8g
Zml4IHRoYXQsIHdlIGNhbiBjcmVhdGUgYSBzaGFyZWQgUE9EQXJlbmEgaW4gRG9jdW1lbnQuICBJ
bnN0ZWFkIG9mIGhhdmluZyB0aGVpciBvd24KKyAgICAgICAgUE9EQXJlbmEsIGVhY2ggUmVuZGVy
QmxvY2sgd2l0aCBmbG9hdGluZyBvYmplY3RzIGNvdWxkIHNoYXJlIHRoaXMgUE9EQXJlbmEgdG8g
cmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbi4KKworICAgICAgICBUaGUgc2hhcmVkIFBPREFyZW5h
IGNvdWxkIGdyb3cgdW5ib3VuZGVkbHkgaWYgd2Uga2VlcCByZW1vdmluZyBhbmQgYWRkaW5nIGZs
b2F0aW5nIG9iamVjdHMuICBXZSBjYW4gZml4IHRoYXQKKyAgICAgICAgYnkgcmV1c2luZyB0aGUg
ZnJlZWQgbWVtb3J5IGluIGVhY2ggY2h1bmsuICBIb3dldmVyLCBhIFBPREFyZW5hIGNvdWxkIGFs
bG9jYXRlIG9iamVjdHMgb2YgZGlmZmVyZW50IHNpemVzIGFuZAorICAgICAgICBpdCB3b3VsZCBi
ZSBjb21wbGV4IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgZm9yIGVhY2ggYWxsb2NhdGlvbiBp
biBQT0RBcmVuYS4gIFRvIGFkZHJlc3MgdGhhdCwgdGhpcyBwYXRjaAorICAgICAgICBhZGRlZCBj
bGFzcyBQT0RGcmVlTGlzdEFyZW5hIHdoaWNoIGFsbG9jYXRlcyBvYmplY3RzIG9mIHRoZSBzYW1l
IHNpemUuICBXZSBjYW4gdXNlIGEgZnJlZSBsaXN0IHRvIHRyYWNrIGZyZWVkCisgICAgICAgIG5v
ZGVzIGluc2lkZSB0aGUgY2h1bmsgYW5kIHJldXNlIHRoZSBmcmVlIG5vZGVzIGluIGZ1dHVyZSBh
bGxvY2F0aW9ucy4KKworICAgICAgICBNYW51YWxseSB0ZXN0ZWQgb24gbnl0aW1lcy5jb20gYW5k
IHRoZSBoZWFwIGNvbnN1bXB0aW9uIG9mIFBPREludGVydmFsVHJlZSByZWR1Y2VkIGZyb20gMS43
TUIgdG8gMTZLQi4gUGVyZm9ybWFuY2UKKyAgICAgICAgZG9lc24ndCByZWdyZXNzIG9uIHRlc3Qg
UGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvZmxvYXRzLmh0bWwuCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IGFkZCBuZXcgaGVhZGVyIGZpbGUgUE9ERnJlZUxp
c3RBcmVuYS5oLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRh
Y2gpOiBpbml0aWFsaXplIHRoZSBzaGFyZWQgaW50ZXJ2YWwgYXJlbmEuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZGV0YWNoKTogY2xlYXIgdGhlIGludGVydmFsIGFyZW5hIHdoZW4gYSBk
b2N1bWVudCBpcyBkZXRhY2hlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjppbnRlcnZhbEFyZW5hKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Q
T0RBcmVuYS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EQXJlbmE6OmZyZWUpOiBhZGQgZnJlZSgp
IG1ldGhvZCB0byBQT0RBcmVuYSB0byBmcmVlIGEgY2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OlBP
REFyZW5hOjp+UE9EQXJlbmEpOiBjaGFuZ2UgZHRvciB0byB2aXJ0dWFsIHNpbmNlIHdlIHdpbGwg
c3ViY2xhc3MgUE9EQXJlbmEuCisgICAgICAgIChXZWJDb3JlOjpQT0RBcmVuYTo6YWxsb2NhdGVC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREFyZW5hOjphbGxvY2F0ZSk6IGFkZCBhIG5ldyB2
aXJ0dWFsIG1ldGhvZCBhbGxvY2F0ZShzaXplX3QpIHRvIGFsbG9jYXRlIGZyb20gdGhlIGNodW5r
LiBQT0RGcmVlTGlzdEFyZW5hCisgICAgICAgICAgICB3aWxsIGFsbG9jYXRlIGZyb20gY2h1bmtz
IGZyZWUgbGlzdHMgaWYgdGhlIGN1cnJlbnQgY2h1bmsgYWxsb2NhdGlvbiBmYWlscy4KKyAgICAg
ICAgKFdlYkNvcmU6OlBPREFyZW5hOjpDaHVuazo6fkNodW5rKTogY2hhbmdlIGR0b3IgdG8gdmly
dHVhbCBzaW5jZSB3ZSB3aWxsIHN1YmNsYXNzIENodW5rLgorICAgICAgICAqIHBsYXRmb3JtL1BP
REZyZWVMaXN0QXJlbmEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFy
ZW5hOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6YWxsb2Nh
dGUpOiBhbGxvY2F0ZSBhbiBvYmplY3QgZnJvbSBmcmVlIGxpc3Qgb3IgY3VycmVudCBjaHVuay4K
KyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OmZyZWUpOiBmaW5kIHRoZSByaWdo
dCBjaHVuayBhbmQgdXBkYXRlIGl0cyBmcmVlIGxpc3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RG
cmVlTGlzdEFyZW5hOjpGcmVlTGlzdENodW5rOjpGcmVlTGlzdENodW5rKTogYWRkIG1fZnJlZUxp
c3QgdG8gdHJhY2sgZnJlZWQgY2VsbHMuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFy
ZW5hOjpGcmVlTGlzdENodW5rOjphbGxvY2F0ZSk6IHJldXNlIGEgZnJlZSBjZWxsIGlmIHRoZXJl
IGlzIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OkZyZWVMaXN0Q2h1
bms6OmZyZWUpOiBtYXJrIHRoZSBtZW1vcnkgdGFrZW4gYnkgdGhpcyBvYmplY3QgaXMgZnJlZSwg
YW5kIGxpbmsgaXQgdG8gbV9mcmVlTGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0
QXJlbmE6OkZyZWVMaXN0Q2h1bms6OmNvbnRhaW5zKTogY2hlY2sgaWYgYSBwb2ludGVyIGlzIGlu
c2lkZSBhIGNodW5rLgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6RnJlZUxp
c3RDaHVuazo6aGFzRnJlZUxpc3QpOiBjaGVjayBpZiBhIGNodW5rIGhhcyBmcmVlIGNlbGxzLgor
ICAgICAgICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6
UE9EUmVkQmxhY2tUcmVlOjpjbGVhcik6IG1hcmsgYWxsIG5vZGVzIGZyZWUgaW4gdGhlIHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmluaXRJZk5lZWRlZCk6IGFkZCBp
bml0SWZOZWVkZWQgdG8gdGFrZSBhIGV4dGVybmFsIFBPREFyZW5hLgorICAgICAgICAoV2ViQ29y
ZTo6UE9EUmVkQmxhY2tUcmVlOjpkZWxldGVOb2RlKTogdGVsbCBtX2FyZW5hIHRvIGZyZWUgdGhl
IG5vZGUgd2hpY2ggaXMganVzdCBkZWxldGVkIGZyb20gdGhlIHRyZWUuCisgICAgICAgIChXZWJD
b3JlOjpQT0RSZWRCbGFja1RyZWU6Om1hcmtGcmVlKTogbWFyayBhbGwgbm9kZXMgZnJlZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KTogCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSk6IHBhc3NpbmcgdGhl
IHNoYXJlZCBQT0RBcmVuYSB0byBtX3BsYWNlZEZsb2F0c1RyZWUuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMpOgorCiAyMDExLTEyLTEzICBBZHJpZW5uZSBXYWxr
ZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgSGFzaE1hcDwu
Li4sIE93blB0cjxUaWxlPj4gZm9yIGNvbXBvc2l0b3IgdGlsZW1hcApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAyNjU3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNiArNjM5LDcgQEAKIAkJMUNGQUUzMjMwQTZENkEz
RjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5k
eWxpYiAqLzsgfTsKIAkJMUYzQzNCRUExMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNC
RTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovOyB9OwogCQkxRjNDM0JF
QjEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1l
ZGlhQ29udHJvbHMuaCAqLzsgfTsKKwkJMUY0NkFBMUIxNDk3RkI1QjAwMzhDMkE1IC8qIFBPREZy
ZWVMaXN0QXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGNDZBQTFBMTQ5N0ZCNUIwMDM4QzJBNSAvKiBQT0RGcmVlTGlzdEFyZW5hLmggKi87IH07
CiAJCTIwRDYyOTI2MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5
MjQxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgKi87IH07
CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1
MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJ
MjI3Nzc3NjAxMzQ1REVBOTAwOEVBNDU1IC8qIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI3Nzc3NUYxMzQ1
REVBOTAwOEVBNDU1IC8qIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NzYwLDYgKzc3NjEsNyBAQAog
CQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHls
aWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7
IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTFGM0MzQkU4MTM1Q0FGM0MwMEI4QzFB
QyAvKiBNZWRpYUNvbnRyb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lZGlhQ29udHJvbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjND
M0JFOTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRyb2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFGNDZBQTFBMTQ5N0ZCNUIwMDM4QzJBNSAvKiBQT0RGcmVlTGlzdEFyZW5hLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREZyZWVMaXN0QXJlbmEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjQxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjc3Nzc1RjEzNDVERUE5
MDA4RUE0NTUgLyogSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjAyMDMsNiArMjAyMDUsNyBAQAogCQkJCTFBRDhGODE5MTFDQUI5
RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLywKIAkJCQk5MzVDNDc2QTA5QUM0
RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggKi8sCiAJCQkJQkNCQjhBQjQxM0Yx
QUZCMDAwNzM0REYwIC8qIFBPREFyZW5hLmggKi8sCisJCQkJMUY0NkFBMUExNDk3RkI1QjAwMzhD
MkE1IC8qIFBPREZyZWVMaXN0QXJlbmEuaCAqLywKIAkJCQlCQ0JCOEFCNTEzRjFBRkIwMDA3MzRE
RjAgLyogUE9ESW50ZXJ2YWwuaCAqLywKIAkJCQlCQ0JCOEFCNjEzRjFBRkIwMDA3MzRERjAgLyog
UE9ESW50ZXJ2YWxUcmVlLmggKi8sCiAJCQkJQkNCQjhBQjcxM0YxQUZCMDAwNzM0REYwIC8qIFBP
RFJlZEJsYWNrVHJlZS5oICovLApAQCAtMjQ4MTcsNiArMjQ4MjAsNyBAQAogCQkJCUYzNUFFNUFD
MTQ5MjVGNUIwMDRENTc3NiAvKiBET01XcmFwcGVyVmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlQ2FjaGVMYXllci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMUY0NkFBMUIxNDk3RkI1QjAwMzhDMkE1IC8qIFBPREZyZWVM
aXN0QXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAxMDI2NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAj
aW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgorI2lu
Y2x1ZGUgIlBPREZyZWVMaXN0QXJlbmEuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgpAQCAtNTQ0LDYg
KzU0NSw3IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY2xlYXIoKTsKIAogICAgIG1fcmVuZGVyQXJlbmEuY2xlYXIoKTsKKyAgICBtX2ludGVydmFs
QXJlbmEuY2xlYXIoKTsKIAogICAgIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCkBAIC0xODAzLDcg
KzE4MDUsMTAgQEAgdm9pZCBEb2N1bWVudDo6YXR0YWNoKCkKIAogICAgIGlmICghbV9yZW5kZXJB
cmVuYSkKICAgICAgICAgbV9yZW5kZXJBcmVuYSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJBcmVuYSk7
Ci0gICAgCisKKyAgICBpZiAoIW1faW50ZXJ2YWxBcmVuYSkKKyAgICAgICAgbV9pbnRlcnZhbEFy
ZW5hID0gUE9ERnJlZUxpc3RBcmVuYTo6Y3JlYXRlKCk7CisKICAgICAvLyBDcmVhdGUgdGhlIHJl
bmRlcmluZyB0cmVlCiAgICAgc2V0UmVuZGVyZXIobmV3IChtX3JlbmRlckFyZW5hLmdldCgpKSBS
ZW5kZXJWaWV3KHRoaXMsIHZpZXcoKSkpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKQEAgLTE4ODQsNiArMTg4OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaCgpCiAgICAgLy8g
Y2FsbGVycyBvZiBEb2N1bWVudDo6ZGV0YWNoKCkuCiAgICAgbV9mcmFtZSA9IDA7CiAgICAgbV9y
ZW5kZXJBcmVuYS5jbGVhcigpOworICAgIG1faW50ZXJ2YWxBcmVuYS5jbGVhcigpOwogfQogCiB2
b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkocmV2aXNpb24gMTAyNjU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCBjbGFzcyBOb2RlRmlsdGVyOwog
Y2xhc3MgTm9kZUl0ZXJhdG9yOwogY2xhc3MgUGFnZTsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVu
dDsKK2NsYXNzIFBPREZyZWVMaXN0QXJlbmE7CiBjbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb247
CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwpAQCAtNTc3LDYg
KzU3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0
cygpIE9WRVJSSURFOwogCiAgICAgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKCkgeyByZXR1cm4g
bV9yZW5kZXJBcmVuYS5nZXQoKTsgfQorICAgIFBPREZyZWVMaXN0QXJlbmEqIGludGVydmFsQXJl
bmEoKSBjb25zdCB7IHJldHVybiBtX2ludGVydmFsQXJlbmEuZ2V0KCk7IH0KIAogICAgIFJlbmRl
clZpZXcqIHJlbmRlclZpZXcoKSBjb25zdDsKIApAQCAtMTMyMyw2ICsxMzI1LDcgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CiAKICAgICBPd25QdHI8UmVu
ZGVyQXJlbmE+IG1fcmVuZGVyQXJlbmE7CisgICAgUmVmUHRyPFBPREZyZWVMaXN0QXJlbmE+IG1f
aW50ZXJ2YWxBcmVuYTsKIAogICAgIG11dGFibGUgQVhPYmplY3RDYWNoZSogbV9heE9iamVjdENh
Y2hlOwogICAgIE93blB0cjxEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI+IG1fbWFya2VyczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREFyZW5hLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EQXJlbmEuaAkocmV2aXNpb24gMTAyNjU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYg
KzEwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOwog
ICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqKSB7IH0KKwogICAgIC8vIFRoZSBp
bml0aWFsIHNpemUgb2YgYWxsb2NhdGVkIGNodW5rczsgaW5jcmVhc2VzIGFzIG5lY2Vzc2FyeSB0
bwogICAgIC8vIHNhdGlzZnkgbGFyZ2UgYWxsb2NhdGlvbnMuIE1haW5seSBwdWJsaWMgZm9yIHVu
aXQgdGVzdHMuCiAgICAgZW51bSB7CkBAIC0xMTIsMTAgKzExNCw5IEBAIHB1YmxpYzoKICAgICB9
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgflBPREFyZW5hKCkgeyB9CisgICAgdmlydHVhbCB+UE9EQXJl
bmEoKSB7IH0KICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPFBPREFyZW5hPjsKIAot
cHJpdmF0ZToKICAgICBQT0RBcmVuYSgpCiAgICAgICAgIDogbV9hbGxvY2F0b3IoRmFzdE1hbGxv
Y0FsbG9jYXRvcjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9jdXJyZW50KDApCkBAIC0xMzUsMTkg
KzEzNiw4IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkKiBhbGxvY2F0
ZUJhc2UoKQogICAgIHsKLSAgICAgICAgdm9pZCogcHRyID0gMDsKICAgICAgICAgc2l6ZV90IHJv
dW5kZWRTaXplID0gcm91bmRVcChzaXplb2YoVCksIG1pbkFsaWdubWVudDxUPigpKTsKLSAgICAg
ICAgaWYgKG1fY3VycmVudCkKLSAgICAgICAgICAgIHB0ciA9IG1fY3VycmVudC0+YWxsb2NhdGUo
cm91bmRlZFNpemUpOwotCi0gICAgICAgIGlmICghcHRyKSB7Ci0gICAgICAgICAgICBpZiAocm91
bmRlZFNpemUgPiBtX2N1cnJlbnRDaHVua1NpemUpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50
Q2h1bmtTaXplID0gcm91bmRlZFNpemU7Ci0gICAgICAgICAgICBtX2NodW5rcy5hcHBlbmQoYWRv
cHRQdHIobmV3IENodW5rKG1fYWxsb2NhdG9yLmdldCgpLCBtX2N1cnJlbnRDaHVua1NpemUpKSk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy5sYXN0KCkuZ2V0KCk7Ci0gICAgICAg
ICAgICBwdHIgPSBtX2N1cnJlbnQtPmFsbG9jYXRlKHJvdW5kZWRTaXplKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcHRyOworICAgICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRlZFNpemUp
OwogICAgIH0KIAogICAgIC8vIFJvdW5kcyB1cCB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBzaXplIHRv
IHRoZSBzcGVjaWZpZWQgYWxpZ25tZW50LgpAQCAtMTU3LDYgKzE0NywyMiBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gKHNpemUgKyBhbGlnbm1lbnQgLSAxKSAmIH4oYWxpZ25tZW50IC0gMSk7
CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIHZvaWQqIHB0ciA9IDA7CisgICAgICAgIGlmIChtX2N1cnJlbnQpCisgICAgICAg
ICAgICBwdHIgPSBtX2N1cnJlbnQtPmFsbG9jYXRlKHNpemUpOworCisgICAgICAgIGlmICghcHRy
KSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IG1fY3VycmVudENodW5rU2l6ZSkKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRDaHVua1NpemUgPSBzaXplOworICAgICAgICAgICAgbV9jaHVua3Mu
YXBwZW5kKGFkb3B0UHRyKG5ldyBDaHVuayhtX2FsbG9jYXRvci5nZXQoKSwgbV9jdXJyZW50Q2h1
bmtTaXplKSkpOworICAgICAgICAgICAgbV9jdXJyZW50ID0gbV9jaHVua3MubGFzdCgpLmdldCgp
OworICAgICAgICAgICAgcHRyID0gbV9jdXJyZW50LT5hbGxvY2F0ZShzaXplKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwogICAgIC8vIE1hbmFnZXMgYSBjaHVuayBv
ZiBtZW1vcnkgYW5kIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMgb3V0IG9mIGl0LgogICAgIGNsYXNz
IENodW5rIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2h1bmspOwpAQCAtMTczLDcg
KzE3OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gRnJlZXMgdGhlIG1lbW9yeSBhbGxvY2F0
ZWQgZnJvbSB0aGUgQWxsb2NhdG9yIGluIHRoZQogICAgICAgICAvLyBjb25zdHJ1Y3Rvci4KLSAg
ICAgICAgfkNodW5rKCkKKyAgICAgICAgdmlydHVhbCB+Q2h1bmsoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtX2FsbG9jYXRvci0+ZnJlZShtX2Jhc2UpOwogICAgICAgICB9CkBAIC0xOTQsNyAr
MjAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
IAotICAgIHByaXZhdGU6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBBbGxvY2F0b3IqIG1fYWxs
b2NhdG9yOwogICAgICAgICB1aW50OF90KiBtX2Jhc2U7CiAgICAgICAgIHNpemVfdCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RGcmVlTGlzdEFyZW5hLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ERnJlZUxpc3RBcmVuYS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ERnJlZUxpc3RBcmVuYS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBPREZyZWVM
aXN0QXJlbmFfaAorI2RlZmluZSBQT0RGcmVlTGlzdEFyZW5hX2gKKworI2luY2x1ZGUgIlBPREFy
ZW5hLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUE9ERnJlZUxpc3RBcmVuYSA6
IHB1YmxpYyBQT0RBcmVuYSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPENo
dW5rPiA+IENodW5rVmVjdG9yOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UE9ERnJlZUxpc3RB
cmVuYT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUE9ERnJl
ZUxpc3RBcmVuYSk7CisgICAgfQorCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICB2b2lkKiBwdHIgPSAwOworICAgICAgICBpZiAobV9jdXJyZW50KSB7Cisg
ICAgICAgICAgICAvLyBGaXJzdCBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IGNodW5rLgorICAg
ICAgICAgICAgcHRyID0gbV9jdXJyZW50LT5hbGxvY2F0ZShzaXplKTsKKyAgICAgICAgICAgIGlm
ICghcHRyKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGFsbG9jYXRlIGZy
b20gb3RoZXIgY2h1bmtzJyBmcmVlIGxpc3QuCisgICAgICAgICAgICAgICAgQ2h1bmtWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2h1bmtzLmVuZCgpOworICAgICAgICAgICAgICAgIGZv
ciAoQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaHVua3MuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIEZyZWVMaXN0Q2h1bmsqIGNodW5r
ID0gc3RhdGljX2Nhc3Q8RnJlZUxpc3RDaHVuayo+KGl0LT5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjaHVuay0+aGFzRnJlZUxpc3QoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHRyID0gY2h1bmstPmFsbG9jYXRlKHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICghcHRyKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IG1fY3VycmVudENo
dW5rU2l6ZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRDaHVua1NpemUgPSBzaXplOworICAg
ICAgICAgICAgbV9jaHVua3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBGcmVlTGlzdENodW5rKG1fYWxs
b2NhdG9yLmdldCgpLCBtX2N1cnJlbnRDaHVua1NpemUpKSk7CisgICAgICAgICAgICBtX2N1cnJl
bnQgPSBtX2NodW5rcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAgICBwdHIgPSBtX2N1cnJlbnQt
PmFsbG9jYXRlKHNpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgdm9pZCBmcmVlKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIENodW5rVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2NodW5rcy5lbmQoKTsKKyAgICAgICAgZm9yIChDaHVua1Zl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NodW5rcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIEZyZWVMaXN0Q2h1bmsqIGNodW5rID0gc3RhdGljX2Nhc3Q8RnJl
ZUxpc3RDaHVuayo+KGl0LT5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2h1bmstPmNvbnRhaW5z
KHB0cikpCisgICAgICAgICAgICAgICAgY2h1bmstPmZyZWUocHRyKTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKworICAgIGNsYXNzIEZyZWVMaXN0Q2h1bmsgOiBwdWJsaWMgUE9EQXJl
bmE6OkNodW5rIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJlZUxpc3RDaHVuayk7
CisKKyAgICAgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgICAgIEZyZWVDZWxsICptX25l
eHQ7CisgICAgICAgIH07CisgICAgcHVibGljOgorICAgICAgICBGcmVlTGlzdENodW5rKEFsbG9j
YXRvciogYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgIDogQ2h1bmsoYWxsb2Nh
dG9yLCBzaXplKQorICAgICAgICAgICAgLCBtX2ZyZWVMaXN0KDApIHsgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9m
cmVlTGlzdCkgeworICAgICAgICAgICAgICAgIC8vIFJldXNlIGEgY2VsbCBmcm9tIHRoZSBmcmVl
IGxpc3QuCisgICAgICAgICAgICAgICAgdm9pZCAqY2VsbCA9IG1fZnJlZUxpc3Q7CisgICAgICAg
ICAgICAgICAgbV9mcmVlTGlzdCA9IG1fZnJlZUxpc3QtPm1fbmV4dDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2VsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIENodW5r
OjphbGxvY2F0ZShzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZnJlZSh2b2lkKiBw
dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcG9pbnRlciB0byBmcmVlIGxp
c3QuCisgICAgICAgICAgICBBU1NFUlQoY29udGFpbnMocHRyKSk7CisKKyAgICAgICAgICAgIEZy
ZWVDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVlQ2VsbCo+KHB0cik7CisgICAgICAg
ICAgICBjZWxsLT5tX25leHQgPSBtX2ZyZWVMaXN0OworICAgICAgICAgICAgbV9mcmVlTGlzdCA9
IGNlbGw7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNvbnRhaW5zKHZvaWQqIHB0cikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHB0ciA+PSBtX2Jhc2UgJiYgcHRyIDwg
bV9iYXNlICsgbV9zaXplOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBoYXNGcmVlTGlzdCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ZyZWVMaXN0OworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBGcmVlQ2VsbCAqbV9mcmVlTGlzdDsKKyAgICB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAxMDI2NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ4LDYgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwgcmV0
dXJuIGZhbHNlLgogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKKyAgICAgICAgbWFya0ZyZWUobV9y
b290KTsKICAgICAgICAgbV9hcmVuYSA9IDA7CiAgICAgICAgIG1fcm9vdCA9IDA7CiAgICAgfQpA
QCAtMTYzLDYgKzE2NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJl
bmE6OmNyZWF0ZSgpOwogICAgIH0KIAorICAgIHZvaWQgaW5pdElmTmVlZGVkKFBPREFyZW5hKiBh
cmVuYSkKKyAgICB7CisgICAgICAgIGlmICghbV9hcmVuYSkKKyAgICAgICAgICAgIG1fYXJlbmEg
PSBhcmVuYTsKKyAgICB9CisKICAgICB2b2lkIGFkZChjb25zdCBUJiBkYXRhKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CkBAIC02OTAsNiArNjk3LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZVVwZGF0ZXMoeFBhcmVudCk7CiAgICAgICAgIGlmICh5
LT5jb2xvcigpID09IEJsYWNrKQogICAgICAgICAgICAgZGVsZXRlRml4dXAoeCwgeFBhcmVudCk7
CisKKyAgICAgICAgbV9hcmVuYS0+ZnJlZSh5KTsKICAgICB9CiAKICAgICAvLyBWaXNpdHMgdGhl
IHN1YnRyZWUgcm9vdGVkIGF0IHRoZSBnaXZlbiBub2RlIGluIG9yZGVyLgpAQCAtNzAyLDYgKzcx
MSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmlzaXRJbm9yZGVySW1wbChub2RlLT5yaWdo
dCgpLCB2aXNpdG9yKTsKICAgICB9CiAKKyAgICB2b2lkIG1hcmtGcmVlKE5vZGUgKm5vZGUpCisg
ICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKG5vZGUtPmxlZnQoKSkKKyAgICAgICAgICAgIG1hcmtGcmVlKG5vZGUtPmxlZnQoKSk7Cisg
ICAgICAgIGlmIChub2RlLT5yaWdodCgpKQorICAgICAgICAgICAgbWFya0ZyZWUobm9kZS0+cmln
aHQoKSk7CisgICAgICAgIG1fYXJlbmEtPmZyZWUobm9kZSk7CisgICAgfQorCiAgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAgICAgLy8gSGVscGVyIGNsYXNzIGZvciBzaXplKCkKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMDI2NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAi
UE9ERnJlZUxpc3RBcmVuYS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCkBAIC0zMjcxLDcgKzMyNzIs
NyBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrCiAKICAgICAvLyBD
cmVhdGUgdGhlIGxpc3Qgb2Ygc3BlY2lhbCBvYmplY3RzIGlmIHdlIGRvbid0IGFsZWFkeSBoYXZl
IG9uZQogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5n
T2JqZWN0cyh0aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBp
biB0aGUgbGlzdAogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CkBAIC0zOTM2LDcgKzM5MzcsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0ZsCiAKICAgICAgICAgICAgICAg
ICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAgICAgICAg
ICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICAgICAgICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9
IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhpcywgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkpOwogCiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGlu
Z09iaik7CiAgICAgICAgICAgICB9CkBAIC00MDA5LDcgKzQwMTAsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKHRoaXMsIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0
aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzAxMCw3ICs3MDExLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjb21wdQogICAgIEFTU0VSVCghbV9w
bGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgaWYgKG1fc2V0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQo
KTsKKyAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKG1fcmVuZGVyZXItPmRvY3Vt
ZW50KCktPmludGVydmFsQXJlbmEoKSk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IG1fc2V0LmJlZ2luKCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBt
X3NldC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTAyNjU3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1Nywx
MiArOTU3LDEzIEBAIHByaXZhdGU6CiAKICAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRmxvYXRpbmdPYmplY3RzKGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdN
b2RlKQorICAgICAgICBGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVy
LCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKICAgICAgICAgICAgIDogbV9wbGFjZWRGbG9h
dHNUcmVlKFVuaW5pdGlhbGl6ZWRUcmVlKQogICAgICAgICAgICAgLCBtX2xlZnRPYmplY3RzQ291
bnQoMCkKICAgICAgICAgICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAg
LCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQoMCkKICAgICAgICAgICAgICwgbV9ob3Jpem9udGFs
V3JpdGluZ01vZGUoaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgLCBtX3JlbmRl
cmVyKHJlbmRlcmVyKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtOTk5LDYgKzEwMDAsNyBA
QCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX3JpZ2h0T2JqZWN0c0NvdW50OwogICAgICAg
ICB1bnNpZ25lZCBtX3Bvc2l0aW9uZWRPYmplY3RzQ291bnQ7CiAgICAgICAgIGJvb2wgbV9ob3Jp
em9udGFsV3JpdGluZ01vZGU7CisgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBtX3JlbmRlcmVy
OwogICAgIH07CiAgICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7
CiAgICAgCg==
</data>
<flag name="review"
          id="119042"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119477</attachid>
            <date>2011-12-15 11:50:30 -0800</date>
            <delta_ts>2011-12-15 13:39:51 -0800</delta_ts>
            <desc>Take 3: use PODFreeListArena&lt;T&gt; to ensure the objects allocated from the arena having the same size.</desc>
            <filename>podfreelistarena.patch</filename>
            <type>text/plain</type>
            <size>23290</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDExLTEyLTE1ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUE9ESW50ZXJ2YWxU
cmVlIHRha2VzIDEuN01CIG1lbW9yeSBvbiB3d3cubnl0aW1lcy5jb20uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvciBhIFJlbmRlckJsb2NrIHdoaWNo
IGhhcyBmbG9hdGluZyBvYmplY3RzIGluc2lkZSwgd2Ugd2lsbCBjcmVhdGUgYSBQT0RJbnRlcnZh
bFRyZWUgYW5kIGEgUE9EQXJlbmEgd2l0aAorICAgICAgICBhdCBsZWFzdCBvbmUgMTZLQiBjaHVu
ay4gIEEgcGFnZSBjb3VsZCBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIHN1Y2ggUmVuZGVyQmxvY2tz
IGFuZCB0aGV5IGNvdWxkIHRha2UgaHVnZQorICAgICAgICBhbW91bnQgb2YgbWVtb3J5LiAgVG8g
Zml4IHRoYXQsIHdlIGNhbiBjcmVhdGUgYSBzaGFyZWQgUE9EQXJlbmEgaW4gdGhlIHJvb3QgUmVu
ZGVyVmlldy4gIEluc3RlYWQgb2YgaGF2aW5nCisgICAgICAgIHRoZWlyIG93biBQT0RBcmVuYSwg
ZWFjaCBSZW5kZXJCbG9jayB3aXRoIGZsb2F0aW5nIG9iamVjdHMgY291bGQgc2hhcmUgdGhpcyBQ
T0RBcmVuYSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLgorCisgICAgICAgIFRoZSBzaGFy
ZWQgUE9EQXJlbmEgY291bGQgZ3JvdyB1bmJvdW5kZWRseSBpZiB3ZSBrZWVwIHJlbW92aW5nIGFu
ZCBhZGRpbmcgZmxvYXRpbmcgb2JqZWN0cy4gIFdlIGNhbiBmaXggdGhhdAorICAgICAgICBieSBy
ZXVzaW5nIHRoZSBmcmVlZCBtZW1vcnkgaW4gZWFjaCBjaHVuay4gIEhvd2V2ZXIsIGEgUE9EQXJl
bmEgY291bGQgYWxsb2NhdGUgb2JqZWN0cyBvZiBkaWZmZXJlbnQgc2l6ZXMgYW5kCisgICAgICAg
IGl0IHdvdWxkIGJlIGNvbXBsZXggdG8ga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBmb3IgZWFjaCBh
bGxvY2F0aW9uIGluIFBPREFyZW5hLiAgVG8gYWRkcmVzcyB0aGF0LCB0aGlzIHBhdGNoCisgICAg
ICAgIGFkZGVkIGNsYXNzIFBPREZyZWVMaXN0QXJlbmE8VD4gd2hpY2ggb25seSBhbGxvY2F0ZXMg
b2JqZWN0cyBvZiB0eXBlIFQgKGhlbmNlIHRoZSBzYW1lIHNpemUpLiAgV2UgY2FuIHRoZW4gdXNl
IGEKKyAgICAgICAgZnJlZSBsaXN0IHRvIHRyYWNrIGZyZWVkIG5vZGVzIGluc2lkZSB0aGUgY2h1
bmsgYW5kIHJldXNlIHRoZSBmcmVlIG5vZGVzIGluIGZ1dHVyZSBhbGxvY2F0aW9ucy4KKworICAg
ICAgICBNYW51YWxseSB0ZXN0ZWQgb24gbnl0aW1lcy5jb20gYW5kIHRoZSBoZWFwIGNvbnN1bXB0
aW9uIG9mIFBPREludGVydmFsVHJlZSByZWR1Y2VkIGZyb20gMS43TUIgdG8gMTZLQi4gUGVyZm9y
bWFuY2UKKyAgICAgICAgZG9lc24ndCByZWdyZXNzIG9uIHRlc3QgUGVyZm9ybWFuY2VUZXN0cy9M
YXlvdXQvZmxvYXRzLmh0bWwuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IGFkZCBuZXcgaGVhZGVyIGZpbGUgUE9ERnJlZUxpc3RBcmVuYS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL1BPREFyZW5hLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RBcmVuYTo6flBP
REFyZW5hKTogY2hhbmdlIGR0b3IgdG8gdmlydHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREFy
ZW5hOjpDaHVuazo6fkNodW5rKTogZGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vUE9ERnJlZUxp
c3RBcmVuYS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OmNy
ZWF0ZSk6IAorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6YWxsb2NhdGVPYmpl
Y3QpOiBhbGxvY2F0ZSBhbiBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFy
ZW5hOjpmcmVlT2JqZWN0KTogZnJlZSBhbiBvYmplY3QsIGZpbmQgdGhlIHJpZ2h0IGNodW5rIGFu
ZCB1cGRhdGUgaXRzIGZyZWUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJl
bmE6OmFsbG9jYXRlKTogYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIGZyZWUgbGlzdCBvciBjdXJy
ZW50IGNodW5rLgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6RnJlZUxpc3RD
aHVuazo6RnJlZUxpc3RDaHVuayk6IGFkZCBtX2ZyZWVMaXN0IHRvIHRyYWNrIGZyZWVkIGNlbGxz
LgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6RnJlZUxpc3RDaHVuazo6YWxs
b2NhdGUpOiByZXVzZSBhIGZyZWUgY2VsbCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIChXZWJD
b3JlOjpQT0RGcmVlTGlzdEFyZW5hOjpGcmVlTGlzdENodW5rOjpmcmVlKTogbWFrZSB0aGUgbWVt
b3J5IHRha2VuIGJ5IHRoaXMgb2JqZWN0IGlzIGZyZWUsIGFuZCBsaW5rIGl0IHRvIG1fZnJlZUxp
c3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFyZW5hOjpGcmVlTGlzdENodW5rOjpj
b250YWlucyk6IGNoZWNrIGlmIGEgcG9pbnRlciBpcyBpbnNpZGUgdGhpcyBjaHVuay4KKyAgICAg
ICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OkZyZWVMaXN0Q2h1bms6Omhhc0ZyZWVMaXN0
KTogY2hlY2sgaWYgdGhpcyBjaHVuayBoYXMgZnJlZSBjZWxscy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9QT0RSZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6
UE9EUmVkQmxhY2tUcmVlKTogdGFrZSBQT0RGcmVlTGlzdEFyZW5hIGluc3RlYWQgb2YgUE9EQXJl
bmEsIHNpbmNlIG5vZGVzIG9mIGEgcGFydGljdWxhciBQT0RSZWRCbGFja1RyZWUKKyAgICAgICAg
ICAgIGlzIGFsd2F5cyBvZiB0aGUgc2FtZSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpjbGVhcik6IG1hcmsgYWxsIG5vZGVzIGJlZm9yZSBjbGVhcmluZyB0aGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aW5pdElmTmVlZGVkKTogYWRk
IGluaXRJZk5lZWRlZCB0byB0YWtlIGFuIGV4dGVybmFsIFBPREZyZWVMaXN0QXJlbmEuCisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RSZWRCbGFja1RyZWU6OmRlbGV0ZU5vZGUpOiBtYXJrIHRoZSBub2RlIGZyZWUgaW4gYXJlbmEg
YWZ0ZXIgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6UE9E
UmVkQmxhY2tUcmVlOjptYXJrRnJlZSk6IG1hcmsgYWxsIG5vZGUgZnJlZSBpbiB0aGUgdHJlZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKTogIHBhc3Npbmcg
dGhlIHNoYXJlZCBQT0RGcmVlTGlzdEFyZW5hIHRvIG1fcGxhY2VkRmxvYXRzVHJlZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6aW50ZXJ2
YWxBcmVuYSk6IGNyZWF0ZSB0aGUgc2hhcmVkIFBPREZyZWVMaXN0QXJlbmEgbGF6aWx5LgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisKIDIwMTEtMTItMTUgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NDYzMQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTAyOTY5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02NDAsNiArNjQwLDcgQEAKIAkJMUNGQUUzMjMwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9i
amMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiAqLzsgfTsKIAkJMUYz
QzNCRUExMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFD
IC8qIE1lZGlhQ29udHJvbHMuY3BwICovOyB9OwogCQkxRjNDM0JFQjEzNUNBRjNDMDBCOEMxQUMg
LyogTWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUYzQzNCRTkxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuaCAqLzsg
fTsKKwkJMUYzRjE5NTMxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJlbmEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGM0YxOTUyMTQ5OUNB
NzYwMEE1QUVBNyAvKiBQT0RGcmVlTGlzdEFyZW5hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjBENjI5MjYxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNDEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcCAqLzsgfTsKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjc3Nzc2MDEzNDVERUE5MDA4RUE0NTUgLyogSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyMjc3Nzc1RjEzNDVERUE5MDA4RUE0NTUgLyogSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc3NzIsNiArNzc3Myw3IEBACiAJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
MUYzQzNCRTgxMzVDQUYzQzAwQjhDMUFDIC8qIE1lZGlhQ29udHJvbHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb250cm9scy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRy
b2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhQ29udHJvbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUYzRjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8q
IFBPREZyZWVMaXN0QXJlbmEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUE9E
RnJlZUxpc3RBcmVuYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMEQ2MjkyNDEy
NTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTIyNzc3NzVGMTM0NURFQTkwMDhFQTQ1NSAvKiBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDI0NSw2ICsyMDI0Nyw3
IEBACiAJCQkJMUFEOEY4MTkxMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5o
ICovLAogCQkJCTkzNUM0NzZBMDlBQzRENEYwMEE2QUFCNCAvKiBQbGF0Zm9ybVdoZWVsRXZlbnQu
aCAqLywKIAkJCQlCQ0JCOEFCNDEzRjFBRkIwMDA3MzRERjAgLyogUE9EQXJlbmEuaCAqLywKKwkJ
CQkxRjNGMTk1MjE0OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oICovLAogCQkJ
CUJDQkI4QUI1MTNGMUFGQjAwMDczNERGMCAvKiBQT0RJbnRlcnZhbC5oICovLAogCQkJCUJDQkI4
QUI2MTNGMUFGQjAwMDczNERGMCAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKIAkJCQlCQ0JCOEFC
NzEzRjFBRkIwMDA3MzRERjAgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCkBAIC0yNDg1OSw2ICsy
NDg2Miw3IEBACiAJCQkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxl
Q2FjaGVMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBGQUYxNDk4MDBENDAwRkI1QkQ4
IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUYzRjE5NTMxNDk5
Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5
RUNFQjY4MTQ5OTc5MEQwMENERDNBNCAvKiBGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUVDRUI2QTE0OTk3OTBEMDBDREQzQTQgLyogRkVHYXVzc2lhbkJs
dXJORU9OLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2QzE0OTk3OTBEMDBDREQzQTQgLyog
RkVMaWdodGluZ05FT04uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUE9EQXJlbmEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
T0RBcmVuYS5oCShyZXZpc2lvbiAxMDI5NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
T0RBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTAgKzExMiw5IEBAIHB1YmxpYzoKICAg
ICB9OwogCiBwcm90ZWN0ZWQ6Ci0gICAgflBPREFyZW5hKCkgeyB9CisgICAgdmlydHVhbCB+UE9E
QXJlbmEoKSB7IH0KICAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPFBPREFyZW5hPjsK
IAotcHJpdmF0ZToKICAgICBQT0RBcmVuYSgpCiAgICAgICAgIDogbV9hbGxvY2F0b3IoRmFzdE1h
bGxvY0FsbG9jYXRvcjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9jdXJyZW50KDApCkBAIC0xNzMs
NyArMTcyLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBGcmVlcyB0aGUgbWVtb3J5IGFsbG9j
YXRlZCBmcm9tIHRoZSBBbGxvY2F0b3IgaW4gdGhlCiAgICAgICAgIC8vIGNvbnN0cnVjdG9yLgot
ICAgICAgICB+Q2h1bmsoKQorICAgICAgICB2aXJ0dWFsIH5DaHVuaygpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fYWxsb2NhdG9yLT5mcmVlKG1fYmFzZSk7CiAgICAgICAgIH0KQEAgLTE5NCw3
ICsxOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fQogCi0gICAgcHJpdmF0ZToKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEFsbG9jYXRvciogbV9h
bGxvY2F0b3I7CiAgICAgICAgIHVpbnQ4X3QqIG1fYmFzZTsKICAgICAgICAgc2l6ZV90IG1fc2l6
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREZyZWVMaXN0QXJlbmEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RGcmVlTGlzdEFyZW5hLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RGcmVlTGlzdEFyZW5hLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUE9ERnJl
ZUxpc3RBcmVuYV9oCisjZGVmaW5lIFBPREZyZWVMaXN0QXJlbmFfaAorCisjaW5jbHVkZSAiUE9E
QXJlbmEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2Ns
YXNzIFBPREZyZWVMaXN0QXJlbmEgOiBwdWJsaWMgUE9EQXJlbmEgeworcHVibGljOgorICAgIHR5
cGVkZWYgVmVjdG9yPE93blB0cjxDaHVuaz4gPiBDaHVua1ZlY3RvcjsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFBPREZyZWVMaXN0QXJlbmE+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBPREZyZWVMaXN0QXJlbmEpOworICAgIH0KKworICAgIHRlbXBsYXRl
PGNsYXNzIEFyZ3VtZW50MVR5cGU+IFQqIGFsbG9jYXRlT2JqZWN0KGNvbnN0IEFyZ3VtZW50MVR5
cGUmIGFyZ3VtZW50MSkKKyAgICB7CisgICAgICAgIHNpemVfdCByb3VuZGVkU2l6ZSA9IHJvdW5k
VXAoc2l6ZW9mKFQpLCBtaW5BbGlnbm1lbnQ8VD4oKSk7CisgICAgICAgIHZvaWQqIHB0ciA9IGFs
bG9jYXRlKHJvdW5kZWRTaXplKTsKKyAgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICAgLy8g
VXNlIHBsYWNlbWVudCBvcGVyYXRvciBuZXcgdG8gYWxsb2NhdGUgYSBUIGF0IHRoaXMgbG9jYXRp
b24uCisgICAgICAgICAgICBuZXcocHRyKSBUKGFyZ3VtZW50MSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOworICAgIH0KKworICAgIHZvaWQgZnJlZU9i
amVjdChUKiBwdHIpCisgICAgeworICAgICAgICBDaHVua1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9jaHVua3MuZW5kKCk7CisgICAgICAgIGZvciAoQ2h1bmtWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9jaHVua3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBGcmVlTGlzdENodW5rKiBjaHVuayA9IHN0YXRpY19jYXN0PEZyZWVMaXN0Q2h1bmsqPihp
dC0+Z2V0KCkpOworICAgICAgICAgICAgaWYgKGNodW5rLT5jb250YWlucyhwdHIpKQorICAgICAg
ICAgICAgICAgIGNodW5rLT5mcmVlKHB0cik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICB2b2lkKiBw
dHIgPSAwOworICAgICAgICBpZiAobV9jdXJyZW50KSB7CisgICAgICAgICAgICAvLyBGaXJzdCBh
bGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IGNodW5rLgorICAgICAgICAgICAgcHRyID0gbV9jdXJy
ZW50LT5hbGxvY2F0ZShzaXplKTsKKyAgICAgICAgICAgIGlmICghcHRyKSB7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGFsbG9jYXRlIGZyb20gb3RoZXIgY2h1bmtzJyBmcmVl
IGxpc3QuCisgICAgICAgICAgICAgICAgQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fY2h1bmtzLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoQ2h1bmtWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jaHVua3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICAgICAgICAgIEZyZWVMaXN0Q2h1bmsqIGNodW5rID0gc3RhdGljX2Nhc3Q8RnJlZUxp
c3RDaHVuayo+KGl0LT5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuay0+aGFz
RnJlZUxpc3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gY2h1bmstPmFsbG9j
YXRlKHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHRyKSB7
CisgICAgICAgICAgICBpZiAoc2l6ZSA+IG1fY3VycmVudENodW5rU2l6ZSkKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRDaHVua1NpemUgPSBzaXplOworICAgICAgICAgICAgbV9jaHVua3MuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBGcmVlTGlzdENodW5rKG1fYWxsb2NhdG9yLmdldCgpLCBtX2N1cnJl
bnRDaHVua1NpemUpKSk7CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy5sYXN0KCku
Z2V0KCk7CisgICAgICAgICAgICBwdHIgPSBtX2N1cnJlbnQtPmFsbG9jYXRlKHNpemUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgY2xhc3MgRnJlZUxpc3RD
aHVuayA6IHB1YmxpYyBQT0RBcmVuYTo6Q2h1bmsgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShGcmVlTGlzdENodW5rKTsKKworICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgeworICAgICAg
ICAgICAgRnJlZUNlbGwgKm1fbmV4dDsKKyAgICAgICAgfTsKKyAgICBwdWJsaWM6CisgICAgICAg
IEZyZWVMaXN0Q2h1bmsoQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBzaXplKQorICAgICAg
ICAgICAgOiBDaHVuayhhbGxvY2F0b3IsIHNpemUpCisgICAgICAgICAgICAsIG1fZnJlZUxpc3Qo
MCkgeyB9CisKKyAgICAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtX2ZyZWVMaXN0KSB7CisgICAgICAgICAgICAgICAgLy8gUmV1c2Ug
YSBjZWxsIGZyb20gdGhlIGZyZWUgbGlzdC4KKyAgICAgICAgICAgICAgICB2b2lkICpjZWxsID0g
bV9mcmVlTGlzdDsKKyAgICAgICAgICAgICAgICBtX2ZyZWVMaXN0ID0gbV9mcmVlTGlzdC0+bV9u
ZXh0OworICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gQ2h1bms6OmFsbG9jYXRlKHNpemUpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBmcmVlKHZvaWQqIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQWRkIHRo
ZSBwb2ludGVyIHRvIGZyZWUgbGlzdC4KKyAgICAgICAgICAgIEFTU0VSVChjb250YWlucyhwdHIp
KTsKKworICAgICAgICAgICAgRnJlZUNlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVD
ZWxsKj4ocHRyKTsKKyAgICAgICAgICAgIGNlbGwtPm1fbmV4dCA9IG1fZnJlZUxpc3Q7CisgICAg
ICAgICAgICBtX2ZyZWVMaXN0ID0gY2VsbDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY29u
dGFpbnModm9pZCogcHRyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHRy
ID49IG1fYmFzZSAmJiBwdHIgPCBtX2Jhc2UgKyBtX3NpemU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGhhc0ZyZWVMaXN0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fZnJlZUxpc3Q7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEZyZWVDZWxs
ICptX2ZyZWVMaXN0OworICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgJKHJl
dmlzaW9uIDEwMjk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJl
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBACiAjaWZuZGVmIFBPRFJlZEJsYWNr
VHJlZV9oCiAjZGVmaW5lIFBPRFJlZEJsYWNrVHJlZV9oCiAKLSNpbmNsdWRlICJQT0RBcmVuYS5o
IgorI2luY2x1ZGUgIlBPREZyZWVMaXN0QXJlbmEuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTk3LDYgKzk3LDggQEAgZW51bSBVbmluaXRpYWxpemVkVHJlZUVudW0gewogdGVtcGxh
dGU8Y2xhc3MgVD4KIGNsYXNzIFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJsaWM6CisgICAgY2xhc3Mg
Tm9kZTsKKwogICAgIC8vIFZpc2l0b3IgaW50ZXJmYWNlIGZvciB3YWxraW5nIGFsbCBvZiB0aGUg
dHJlZSdzIGVsZW1lbnRzLgogICAgIGNsYXNzIFZpc2l0b3IgewogICAgIHB1YmxpYzoKQEAgLTEx
OSw5ICsxMjEsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyBy
ZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0ZW1wb3Jhcnkgb2JqZWN0cwotICAgIC8vIGZyb20g
YSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RBcmVuYS4KKyAgICAvLyBmcm9tIGEgbmV3bHkgY29uc3Ry
dWN0ZWQgUE9ERnJlZUxpc3RBcmVuYS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQotICAgICAgICA6
IG1fYXJlbmEoUE9EQXJlbmE6OmNyZWF0ZSgpKQorICAgICAgICA6IG1fYXJlbmEoUE9ERnJlZUxp
c3RBcmVuYTxOb2RlPjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9yb290KDApCiAgICAgICAgICwg
bV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAg
LTEzMiw3ICsxMzQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1i
bGFjayB0cmVlLCBhbGxvY2F0aW5nIHRlbXBvcmFyeSBvYmplY3RzCiAgICAgLy8gZnJvbSB0aGUg
Z2l2ZW4gUE9EQXJlbmEuCi0gICAgZXhwbGljaXQgUE9EUmVkQmxhY2tUcmVlKFBhc3NSZWZQdHI8
UE9EQXJlbmE+IGFyZW5hKQorICAgIGV4cGxpY2l0IFBPRFJlZEJsYWNrVHJlZShQYXNzUmVmUHRy
PFBPREZyZWVMaXN0QXJlbmE8Tm9kZT4gPiBhcmVuYSkKICAgICAgICAgOiBtX2FyZW5hKGFyZW5h
KQogICAgICAgICAsIG1fcm9vdCgwKQogICAgICAgICAsIG1fbmVlZHNGdWxsT3JkZXJpbmdDb21w
YXJpc29ucyhmYWxzZSkKQEAgLTE0OCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgLy8gaXNJbml0
aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZS4KICAgICB2b2lkIGNsZWFyKCkKICAgICB7CisgICAg
ICAgIG1hcmtGcmVlKG1fcm9vdCk7CiAgICAgICAgIG1fYXJlbmEgPSAwOwogICAgICAgICBtX3Jv
b3QgPSAwOwogICAgIH0KQEAgLTE2MCwxMyArMTYzLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGlu
aXRJZk5lZWRlZCgpCiAgICAgewogICAgICAgICBpZiAoIW1fYXJlbmEpCi0gICAgICAgICAgICBt
X2FyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9hcmVuYSA9IFBPREZy
ZWVMaXN0QXJlbmE8Tm9kZT46OmNyZWF0ZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdElmTmVl
ZGVkKFBPREZyZWVMaXN0QXJlbmE8Tm9kZT4qIGFyZW5hKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2FyZW5hKQorICAgICAgICAgICAgbV9hcmVuYSA9IGFyZW5hOwogICAgIH0KIAogICAgIHZvaWQg
YWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgp
KTsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+
KGRhdGEpOworICAgICAgICBOb2RlKiBub2RlID0gbV9hcmVuYS0+dGVtcGxhdGUgYWxsb2NhdGVP
YmplY3Q8VD4oZGF0YSk7CiAgICAgICAgIGluc2VydE5vZGUobm9kZSk7CiAgICAgfQogCkBAIC0y
MzUsNyArMjQ0LDYgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi1wcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb2xvciB7CiAgICAgICAgIFJlZCA9IDEsCiAgICAgICAgIEJsYWNrCkBAIC0yOTAsNiAr
Mjk4LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBUIG1fZGF0YTsKICAgICB9OwogCitwcm90ZWN0
ZWQ6CiAgICAgLy8gUmV0dXJucyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgd2hpY2ggaXMgbmVlZGVk
IGJ5IHNvbWUgc3ViY2xhc3Nlcy4KICAgICBOb2RlKiByb290KCkgY29uc3QgeyByZXR1cm4gbV9y
b290OyB9CiAKQEAgLTY5MCw2ICs2OTksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFn
YXRlVXBkYXRlcyh4UGFyZW50KTsKICAgICAgICAgaWYgKHktPmNvbG9yKCkgPT0gQmxhY2spCiAg
ICAgICAgICAgICBkZWxldGVGaXh1cCh4LCB4UGFyZW50KTsKKworICAgICAgICBtX2FyZW5hLT5m
cmVlT2JqZWN0KHkpOwogICAgIH0KIAogICAgIC8vIFZpc2l0cyB0aGUgc3VidHJlZSByb290ZWQg
YXQgdGhlIGdpdmVuIG5vZGUgaW4gb3JkZXIuCkBAIC03MDIsNiArNzEzLDE4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB2aXNpdElub3JkZXJJbXBsKG5vZGUtPnJpZ2h0KCksIHZpc2l0b3IpOwog
ICAgIH0KIAorICAgIHZvaWQgbWFya0ZyZWUoTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIGlm
ICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobm9kZS0+bGVmdCgp
KQorICAgICAgICAgICAgbWFya0ZyZWUobm9kZS0+bGVmdCgpKTsKKyAgICAgICAgaWYgKG5vZGUt
PnJpZ2h0KCkpCisgICAgICAgICAgICBtYXJrRnJlZShub2RlLT5yaWdodCgpKTsKKyAgICAgICAg
bV9hcmVuYS0+ZnJlZU9iamVjdChub2RlKTsKKyAgICB9CisKICAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICAgICAvLyBIZWxwZXIgY2xhc3MgZm9yIHNpemUoKQogCkBAIC03OTIsNyArODE1LDcgQEAgcHJp
dmF0ZToKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBEYXRhIG1lbWJlcnMKIAotICAgIFJl
ZlB0cjxQT0RBcmVuYT4gbV9hcmVuYTsKKyAgICBSZWZQdHI8UE9ERnJlZUxpc3RBcmVuYTxOb2Rl
PiA+IG1fYXJlbmE7CiAgICAgTm9kZSogbV9yb290OwogICAgIGJvb2wgbV9uZWVkc0Z1bGxPcmRl
cmluZ0NvbXBhcmlzb25zOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTAyOTY5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBPREZyZWVMaXN0
QXJlbmEuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgpAQCAtMzI3MSw3ICszMjcyLDcgQEAgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jawogCiAgICAgLy8gQ3JlYXRlIHRoZSBs
aXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBp
ZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0
UHRyKG5ldyBGbG9hdGluZ09iamVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAg
ICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhp
cywgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBE
b24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QK
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwpAQCAtMzkzNiw3ICszOTM3LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbAogCiAgICAgICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAgICAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihu
ZXcgRmxvYXRpbmdPYmplY3RzKHRoaXMsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKIAog
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAg
ICAgICAgICAgfQpAQCAtNDAwOSw3ICs0MDEwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50
cnVkaW5nRmxvYXRzKFJlbgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQ
dHIobmV3IEZsb2F0aW5nT2JqZWN0cyh0aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7
CiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTcwMTAsNyArNzAxMSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHUKICAgICBBU1NFUlQoIW1fcGxhY2VkRmxvYXRz
VHJlZS5pc0luaXRpYWxpemVkKCkpOwogICAgIGlmIChtX3NldC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3BsYWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKCk7CisgICAgbV9w
bGFjZWRGbG9hdHNUcmVlLmluaXRJZk5lZWRlZChtX3JlbmRlcmVyLT52aWV3KCktPmludGVydmFs
QXJlbmEoKSk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fc2V0LmJlZ2lu
KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKICAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTAyOTY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxNiw3ICs5MTYsNyBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQpIGNv
bnN0OwogICAgIFJlbmRlclJlZ2lvbiogY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJS
ZWdpb24qKSBjb25zdDsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBzdHJ1Y3QgRmxvYXRp
bmdPYmplY3RIYXNoRnVuY3Rpb25zIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxv
YXRpbmdPYmplY3QqIGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6
Omhhc2goa2V5LT5tX3JlbmRlcmVyKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9h
dGluZ09iamVjdCogYSwgRmxvYXRpbmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPm1fcmVuZGVyZXIg
PT0gYi0+bV9yZW5kZXJlcjsgfQpAQCAtOTMwLDYgKzkzMCw3IEBAIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvcjsKICAgICB0eXBlZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBG
bG9hdGluZ09iamVjdEludGVydmFsOwogICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGludCwg
RmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7CisgICAgdHlwZWRlZiBQT0RGcmVl
TGlzdEFyZW5hPFBPRFJlZEJsYWNrVHJlZTxGbG9hdGluZ09iamVjdEludGVydmFsPjo6Tm9kZT4g
SW50ZXJ2YWxBcmVuYTsKICAgICAKICAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUg
RmxvYXRUeXBlVmFsdWU+CiAgICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgewpA
QCAtOTU3LDEyICs5NTgsMTMgQEAgcHJpdmF0ZToKIAogICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0
cyB7CiAgICAgcHVibGljOgotICAgICAgICBGbG9hdGluZ09iamVjdHMoYm9vbCBob3Jpem9udGFs
V3JpdGluZ01vZGUpCisgICAgICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAgICAgICAgOiBtX3Bs
YWNlZEZsb2F0c1RyZWUoVW5pbml0aWFsaXplZFRyZWUpCiAgICAgICAgICAgICAsIG1fbGVmdE9i
amVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCiAgICAg
ICAgICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX2hv
cml6b250YWxXcml0aW5nTW9kZShob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICAs
IG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC05OTksNiAr
MTAwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7
CiAgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKICAgICAgICAgYm9v
bCBtX2hvcml6b250YWxXcml0aW5nTW9kZTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1f
cmVuZGVyZXI7CiAgICAgfTsKICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5n
T2JqZWN0czsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAJKHJldmlzaW9uIDEwMjk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI1LDQgKzkyNSwxMSBAQCB2b2lkIFJlbmRlclZp
ZXc6OmxheW91dFJlbmRlckZsb3dUaHJlYWRzCiAgICAgfQogfQogCitSZW5kZXJCbG9jazo6SW50
ZXJ2YWxBcmVuYSogUmVuZGVyVmlldzo6aW50ZXJ2YWxBcmVuYSgpCit7CisgICAgaWYgKCFtX2lu
dGVydmFsQXJlbmEpCisgICAgICAgIG1faW50ZXJ2YWxBcmVuYSA9IEludGVydmFsQXJlbmE6OmNy
ZWF0ZSgpOworICAgIHJldHVybiBtX2ludGVydmFsQXJlbmEuZ2V0KCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAko
cmV2aXNpb24gMTAyOTY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJQT0RGcmVlTGlzdEFyZW5h
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0xOTIsNiArMTkzLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CiAKKyAgICBJbnRlcnZhbEFyZW5hKiBpbnRlcnZhbEFyZW5hKCk7CisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29s
IGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNl
VHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKQEAgLTIzNCw3ICsyMzcsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlRGlzYWJsZXI7Ci0gICAgICAgIAorCiBwcm90ZWN0
ZWQ6CiAgICAgRnJhbWVWaWV3KiBtX2ZyYW1lVmlldzsKIApAQCAtMjc4LDYgKzI4MSw3IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFJlbmRlckZsb3dUaHJlYWRMaXN0PiBtX3JlbmRlckZsb3dUaHJl
YWRMaXN0OwogICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQ7
CiAgICAgUmVuZGVyUmVnaW9uKiBtX2N1cnJlbnRSZW5kZXJSZWdpb247CisgICAgUmVmUHRyPElu
dGVydmFsQXJlbmE+IG1faW50ZXJ2YWxBcmVuYTsKIH07CiAKIGlubGluZSBSZW5kZXJWaWV3KiB0
b1JlbmRlclZpZXcoUmVuZGVyT2JqZWN0KiBvYmplY3QpCg==
</data>
<flag name="commit-queue"
          id="119526"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119495</attachid>
            <date>2011-12-15 13:39:51 -0800</date>
            <delta_ts>2011-12-16 02:15:16 -0800</delta_ts>
            <desc>fix build break in chromium&apos;s test code.</desc>
            <filename>podfreelistarena.patch</filename>
            <type>text/plain</type>
            <size>25328</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjk3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDExLTEyLTE1ICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUE9ESW50ZXJ2YWxU
cmVlIHRha2VzIDEuN01CIG1lbW9yeSBvbiB3d3cubnl0aW1lcy5jb20uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvciBhIFJlbmRlckJsb2NrIHdoaWNo
IGhhcyBmbG9hdGluZyBvYmplY3RzIGluc2lkZSwgd2Ugd2lsbCBjcmVhdGUgYSBQT0RJbnRlcnZh
bFRyZWUgYW5kIGEgUE9EQXJlbmEgd2l0aAorICAgICAgICBhdCBsZWFzdCBvbmUgMTZLQiBjaHVu
ay4gIEEgcGFnZSBjb3VsZCBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIHN1Y2ggUmVuZGVyQmxvY2tz
IGFuZCB0aGV5IGNvdWxkIHRha2UgaHVnZQorICAgICAgICBhbW91bnQgb2YgbWVtb3J5LiAgVG8g
Zml4IHRoYXQsIHdlIGNhbiBjcmVhdGUgYSBzaGFyZWQgUE9EQXJlbmEgaW4gdGhlIHJvb3QgUmVu
ZGVyVmlldy4gIEluc3RlYWQgb2YgaGF2aW5nCisgICAgICAgIHRoZWlyIG93biBQT0RBcmVuYSwg
ZWFjaCBSZW5kZXJCbG9jayB3aXRoIGZsb2F0aW5nIG9iamVjdHMgY291bGQgc2hhcmUgdGhpcyBQ
T0RBcmVuYSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLgorCisgICAgICAgIFRoZSBzaGFy
ZWQgUE9EQXJlbmEgY291bGQgZ3JvdyB1bmJvdW5kZWRseSBpZiB3ZSBrZWVwIHJlbW92aW5nIGFu
ZCBhZGRpbmcgZmxvYXRpbmcgb2JqZWN0cy4gIFdlIGNhbiBmaXggdGhhdAorICAgICAgICBieSBy
ZXVzaW5nIHRoZSBmcmVlZCBtZW1vcnkgaW4gZWFjaCBjaHVuay4gIEhvd2V2ZXIsIGEgUE9EQXJl
bmEgY291bGQgYWxsb2NhdGUgb2JqZWN0cyBvZiBkaWZmZXJlbnQgc2l6ZXMgYW5kCisgICAgICAg
IGl0IHdvdWxkIGJlIGNvbXBsZXggdG8ga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBmb3IgZWFjaCBh
bGxvY2F0aW9uIGluIFBPREFyZW5hLiAgVG8gYWRkcmVzcyB0aGF0LCB0aGlzIHBhdGNoCisgICAg
ICAgIGFkZGVkIGNsYXNzIFBPREZyZWVMaXN0QXJlbmE8VD4gd2hpY2ggb25seSBhbGxvY2F0ZXMg
b2JqZWN0cyBvZiB0eXBlIFQgKGhlbmNlIHRoZSBzYW1lIHNpemUpLiAgV2UgY2FuIHRoZW4gdXNl
IGEKKyAgICAgICAgZnJlZSBsaXN0IHRvIHRyYWNrIGZyZWVkIG5vZGVzIGluc2lkZSB0aGUgY2h1
bmsgYW5kIHJldXNlIHRoZSBmcmVlIG5vZGVzIGluIGZ1dHVyZSBhbGxvY2F0aW9ucy4KKworICAg
ICAgICBNYW51YWxseSB0ZXN0ZWQgb24gbnl0aW1lcy5jb20gYW5kIHRoZSBoZWFwIGNvbnN1bXB0
aW9uIG9mIFBPREludGVydmFsVHJlZSByZWR1Y2VkIGZyb20gMS43TUIgdG8gMTZLQi4gUGVyZm9y
bWFuY2UKKyAgICAgICAgZG9lc24ndCByZWdyZXNzIG9uIHRlc3QgUGVyZm9ybWFuY2VUZXN0cy9M
YXlvdXQvZmxvYXRzLmh0bWwuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IGFkZCBuZXcgaGVhZGVyIGZpbGUgUE9ERnJlZUxpc3RBcmVuYS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL1BPREFyZW5hLmg6CisgICAgICAgIChXZWJDb3JlOjpQT0RBcmVuYTo6flBP
REFyZW5hKTogY2hhbmdlIGR0b3IgdG8gdmlydHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREFy
ZW5hOjpDaHVuazo6fkNodW5rKTogZGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vUE9ERnJlZUxp
c3RBcmVuYS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OmNy
ZWF0ZSk6IAorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6YWxsb2NhdGVPYmpl
Y3QpOiBhbGxvY2F0ZSBhbiBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFy
ZW5hOjpmcmVlT2JqZWN0KTogZnJlZSBhbiBvYmplY3QsIGZpbmQgdGhlIHJpZ2h0IGNodW5rIGFu
ZCB1cGRhdGUgaXRzIGZyZWUgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJl
bmE6OmFsbG9jYXRlKTogYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIGZyZWUgbGlzdCBvciBjdXJy
ZW50IGNodW5rLgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6RnJlZUxpc3RD
aHVuazo6RnJlZUxpc3RDaHVuayk6IGFkZCBtX2ZyZWVMaXN0IHRvIHRyYWNrIGZyZWVkIGNlbGxz
LgorICAgICAgICAoV2ViQ29yZTo6UE9ERnJlZUxpc3RBcmVuYTo6RnJlZUxpc3RDaHVuazo6YWxs
b2NhdGUpOiByZXVzZSBhIGZyZWUgY2VsbCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIChXZWJD
b3JlOjpQT0RGcmVlTGlzdEFyZW5hOjpGcmVlTGlzdENodW5rOjpmcmVlKTogbWFrZSB0aGUgbWVt
b3J5IHRha2VuIGJ5IHRoaXMgb2JqZWN0IGlzIGZyZWUsIGFuZCBsaW5rIGl0IHRvIG1fZnJlZUxp
c3QuCisgICAgICAgIChXZWJDb3JlOjpQT0RGcmVlTGlzdEFyZW5hOjpGcmVlTGlzdENodW5rOjpj
b250YWlucyk6IGNoZWNrIGlmIGEgcG9pbnRlciBpcyBpbnNpZGUgdGhpcyBjaHVuay4KKyAgICAg
ICAgKFdlYkNvcmU6OlBPREZyZWVMaXN0QXJlbmE6OkZyZWVMaXN0Q2h1bms6Omhhc0ZyZWVMaXN0
KTogY2hlY2sgaWYgdGhpcyBjaHVuayBoYXMgZnJlZSBjZWxscy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9QT0RSZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6
UE9EUmVkQmxhY2tUcmVlKTogdGFrZSBQT0RGcmVlTGlzdEFyZW5hIGluc3RlYWQgb2YgUE9EQXJl
bmEsIHNpbmNlIG5vZGVzIG9mIGEgcGFydGljdWxhciBQT0RSZWRCbGFja1RyZWUKKyAgICAgICAg
ICAgIGlzIGFsd2F5cyBvZiB0aGUgc2FtZSBzaXplLgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpjbGVhcik6IG1hcmsgYWxsIG5vZGVzIGJlZm9yZSBjbGVhcmluZyB0aGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6aW5pdElmTmVlZGVkKTogYWRk
IGluaXRJZk5lZWRlZCB0byB0YWtlIGFuIGV4dGVybmFsIFBPREZyZWVMaXN0QXJlbmEuCisgICAg
ICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
T0RSZWRCbGFja1RyZWU6OmRlbGV0ZU5vZGUpOiBtYXJrIHRoZSBub2RlIGZyZWUgaW4gYXJlbmEg
YWZ0ZXIgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6UE9E
UmVkQmxhY2tUcmVlOjptYXJrRnJlZSk6IG1hcmsgYWxsIG5vZGUgZnJlZSBpbiB0aGUgdHJlZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKTogIHBhc3Npbmcg
dGhlIHNoYXJlZCBQT0RGcmVlTGlzdEFyZW5hIHRvIG1fcGxhY2VkRmxvYXRzVHJlZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6aW50ZXJ2
YWxBcmVuYSk6IGNyZWF0ZSB0aGUgc2hhcmVkIFBPREZyZWVMaXN0QXJlbmEgbGF6aWx5LgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisKIDIwMTEtMTItMTUgIFZzZXZvbG9kIFZs
YXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IGFibGUgdG8gbmF2aWdh
dGUgdGhlIFJlc291cmNlIHRhYiBvcHRpb25zIHByb3Blcmx5IHdpdGggYXJyb3cga2V5cyBhZnRl
ciBhZGRpbmcgdGhlIHN0aWNreS1ub3Rlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMjk3NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjQyLDYgKzY0Miw3IEBACiAJCTFDRkFFMzIzMEE2RDZBM0YwMDMyNTkzRCAvKiBs
aWJvYmpjLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi87IH07CiAJ
CTFGM0MzQkVBMTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGM0MzQkU4MTM1Q0FGM0MwMEI4
QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmNwcCAqLzsgfTsKIAkJMUYzQzNCRUIxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGM0MzQkU5MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmgg
Ki87IH07CisJCTFGM0YxOTUzMTQ5OUNBNzYwMEE1QUVBNyAvKiBQT0RGcmVlTGlzdEFyZW5hLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjNGMTk1MjE0
OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIwRDYyOTI2MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjQxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAgKi87IH07CiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI3Nzc3NjAxMzQ1REVBOTAwOEVBNDU1IC8qIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjI3Nzc3NUYxMzQ1REVBOTAwOEVBNDU1IC8qIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03Nzc2LDYgKzc3NzcsNyBAQAogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyog
bGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0
aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07
CiAJCTFGM0MzQkU4MTM1Q0FGM0MwMEI4QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQ29udHJvbHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxRjNDM0JFOTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFD
b250cm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRyb2xz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGM0YxOTUyMTQ5OUNBNzYwMEE1QUVB
NyAvKiBQT0RGcmVlTGlzdEFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPREZyZWVMaXN0QXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5
MjQxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMEQ2MjkyNTEyNTM2OTBCMDAwODE1
NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjc3Nzc1RjEzNDVERUE5MDA4RUE0NTUgLyogSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyNTEsNiArMjAy
NTMsNyBAQAogCQkJCTFBRDhGODE5MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCAqLywKIAkJCQk5MzVDNDc2QTA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2
ZW50LmggKi8sCiAJCQkJQkNCQjhBQjQxM0YxQUZCMDAwNzM0REYwIC8qIFBPREFyZW5hLmggKi8s
CisJCQkJMUYzRjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJlbmEuaCAqLywK
IAkJCQlCQ0JCOEFCNTEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWwuaCAqLywKIAkJCQlC
Q0JCOEFCNjEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8sCiAJCQkJQkNC
QjhBQjcxM0YxQUZCMDAwNzM0REYwIC8qIFBPRFJlZEJsYWNrVHJlZS5oICovLApAQCAtMjQ4NjUs
NiArMjQ4NjgsNyBAQAogCQkJCTI2QzE3QTNFMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVt
SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2Vi
VGlsZUNhY2hlTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwRkFGMTQ5ODAwRDQwMEZC
NUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFGM0YxOTUz
MTQ5OUNBNzYwMEE1QUVBNyAvKiBQT0RGcmVlTGlzdEFyZW5hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUVDRUI2ODE0OTk3OTBEMDBDREQzQTQgLyogRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkExNDk5NzkwRDAwQ0REM0E0IC8qIEZFR2F1c3Np
YW5CbHVyTkVPTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkMxNDk5NzkwRDAwQ0REM0E0
IC8qIEZFTGlnaHRpbmdORU9OLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BPREFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUE9EQXJlbmEuaAkocmV2aXNpb24gMTAyOTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUE9EQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEwICsxMTIsOSBAQCBwdWJsaWM6
CiAgICAgfTsKIAogcHJvdGVjdGVkOgotICAgIH5QT0RBcmVuYSgpIHsgfQorICAgIHZpcnR1YWwg
flBPREFyZW5hKCkgeyB9CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxQT0RBcmVu
YT47CiAKLXByaXZhdGU6CiAgICAgUE9EQXJlbmEoKQogICAgICAgICA6IG1fYWxsb2NhdG9yKEZh
c3RNYWxsb2NBbGxvY2F0b3I6OmNyZWF0ZSgpKQogICAgICAgICAsIG1fY3VycmVudCgwKQpAQCAt
MTczLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gRnJlZXMgdGhlIG1lbW9yeSBh
bGxvY2F0ZWQgZnJvbSB0aGUgQWxsb2NhdG9yIGluIHRoZQogICAgICAgICAvLyBjb25zdHJ1Y3Rv
ci4KLSAgICAgICAgfkNodW5rKCkKKyAgICAgICAgdmlydHVhbCB+Q2h1bmsoKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+ZnJlZShtX2Jhc2UpOwogICAgICAgICB9CkBAIC0x
OTQsNyArMTkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KIAotICAgIHByaXZhdGU6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBBbGxvY2F0b3Iq
IG1fYWxsb2NhdG9yOwogICAgICAgICB1aW50OF90KiBtX2Jhc2U7CiAgICAgICAgIHNpemVfdCBt
X3NpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RGcmVlTGlzdEFyZW5hLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ERnJlZUxpc3RBcmVuYS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ERnJlZUxpc3RBcmVu
YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBP
REZyZWVMaXN0QXJlbmFfaAorI2RlZmluZSBQT0RGcmVlTGlzdEFyZW5hX2gKKworI2luY2x1ZGUg
IlBPREFyZW5hLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPGNsYXNzIFQ+
CitjbGFzcyBQT0RGcmVlTGlzdEFyZW5hIDogcHVibGljIFBPREFyZW5hIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q2h1bms+ID4gQ2h1bmtWZWN0b3I7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQT0RGcmVlTGlzdEFyZW5hPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQT0RGcmVlTGlzdEFyZW5hKTsKKyAgICB9CisKKyAgICAvLyBD
cmVhdGVzIGEgbmV3IFBPREFyZW5hIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gQWxsb2NhdG9y
LgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBPREZyZWVMaXN0QXJlbmE+IGNyZWF0ZShQYXNzUmVm
UHRyPEFsbG9jYXRvcj4gYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQT0RGcmVlTGlzdEFyZW5hKGFsbG9jYXRvcikpOworICAgIH0KKworICAgIHRlbXBsYXRl
PGNsYXNzIEFyZ3VtZW50MVR5cGU+IFQqIGFsbG9jYXRlT2JqZWN0KGNvbnN0IEFyZ3VtZW50MVR5
cGUmIGFyZ3VtZW50MSkKKyAgICB7CisgICAgICAgIHNpemVfdCByb3VuZGVkU2l6ZSA9IHJvdW5k
VXAoc2l6ZW9mKFQpLCBtaW5BbGlnbm1lbnQ8VD4oKSk7CisgICAgICAgIHZvaWQqIHB0ciA9IGFs
bG9jYXRlKHJvdW5kZWRTaXplKTsKKyAgICAgICAgaWYgKHB0cikgeworICAgICAgICAgICAgLy8g
VXNlIHBsYWNlbWVudCBvcGVyYXRvciBuZXcgdG8gYWxsb2NhdGUgYSBUIGF0IHRoaXMgbG9jYXRp
b24uCisgICAgICAgICAgICBuZXcocHRyKSBUKGFyZ3VtZW50MSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOworICAgIH0KKworICAgIHZvaWQgZnJlZU9i
amVjdChUKiBwdHIpCisgICAgeworICAgICAgICBDaHVua1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9jaHVua3MuZW5kKCk7CisgICAgICAgIGZvciAoQ2h1bmtWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9jaHVua3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBGcmVlTGlzdENodW5rKiBjaHVuayA9IHN0YXRpY19jYXN0PEZyZWVMaXN0Q2h1bmsqPihp
dC0+Z2V0KCkpOworICAgICAgICAgICAgaWYgKGNodW5rLT5jb250YWlucyhwdHIpKQorICAgICAg
ICAgICAgICAgIGNodW5rLT5mcmVlKHB0cik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6
CisgICAgUE9ERnJlZUxpc3RBcmVuYSgpCisgICAgICAgIDogUE9EQXJlbmEoKSB7IH0KKworICAg
IGV4cGxpY2l0IFBPREZyZWVMaXN0QXJlbmEoUGFzc1JlZlB0cjxBbGxvY2F0b3I+IGFsbG9jYXRv
cikKKyAgICAgICAgOiBQT0RBcmVuYShhbGxvY2F0b3IpIHsgfQorCisgICAgdm9pZCogYWxsb2Nh
dGUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICB2b2lkKiBwdHIgPSAwOworICAgICAgICBp
ZiAobV9jdXJyZW50KSB7CisgICAgICAgICAgICAvLyBGaXJzdCBhbGxvY2F0ZSBmcm9tIHRoZSBj
dXJyZW50IGNodW5rLgorICAgICAgICAgICAgcHRyID0gbV9jdXJyZW50LT5hbGxvY2F0ZShzaXpl
KTsKKyAgICAgICAgICAgIGlmICghcHRyKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UgY2FuIGFsbG9jYXRlIGZyb20gb3RoZXIgY2h1bmtzJyBmcmVlIGxpc3QuCisgICAgICAgICAg
ICAgICAgQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2h1bmtzLmVuZCgpOwor
ICAgICAgICAgICAgICAgIGZvciAoQ2h1bmtWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9j
aHVua3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIEZy
ZWVMaXN0Q2h1bmsqIGNodW5rID0gc3RhdGljX2Nhc3Q8RnJlZUxpc3RDaHVuayo+KGl0LT5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuay0+aGFzRnJlZUxpc3QoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHRyID0gY2h1bmstPmFsbG9jYXRlKHNpemUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHRyKSB7CisgICAgICAgICAgICBpZiAo
c2l6ZSA+IG1fY3VycmVudENodW5rU2l6ZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRDaHVu
a1NpemUgPSBzaXplOworICAgICAgICAgICAgbV9jaHVua3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBG
cmVlTGlzdENodW5rKG1fYWxsb2NhdG9yLmdldCgpLCBtX2N1cnJlbnRDaHVua1NpemUpKSk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnQgPSBtX2NodW5rcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAg
ICBwdHIgPSBtX2N1cnJlbnQtPmFsbG9jYXRlKHNpemUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgY2xhc3MgRnJlZUxpc3RDaHVuayA6IHB1YmxpYyBQT0RB
cmVuYTo6Q2h1bmsgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdENodW5r
KTsKKworICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgeworICAgICAgICAgICAgRnJlZUNlbGwgKm1f
bmV4dDsKKyAgICAgICAgfTsKKyAgICBwdWJsaWM6CisgICAgICAgIEZyZWVMaXN0Q2h1bmsoQWxs
b2NhdG9yKiBhbGxvY2F0b3IsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBDaHVuayhhbGxv
Y2F0b3IsIHNpemUpCisgICAgICAgICAgICAsIG1fZnJlZUxpc3QoMCkgeyB9CisKKyAgICAgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X2ZyZWVMaXN0KSB7CisgICAgICAgICAgICAgICAgLy8gUmV1c2UgYSBjZWxsIGZyb20gdGhlIGZy
ZWUgbGlzdC4KKyAgICAgICAgICAgICAgICB2b2lkICpjZWxsID0gbV9mcmVlTGlzdDsKKyAgICAg
ICAgICAgICAgICBtX2ZyZWVMaXN0ID0gbV9mcmVlTGlzdC0+bV9uZXh0OworICAgICAgICAgICAg
ICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gQ2h1
bms6OmFsbG9jYXRlKHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmcmVlKHZvaWQq
IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQWRkIHRoZSBwb2ludGVyIHRvIGZyZWUg
bGlzdC4KKyAgICAgICAgICAgIEFTU0VSVChjb250YWlucyhwdHIpKTsKKworICAgICAgICAgICAg
RnJlZUNlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4ocHRyKTsKKyAgICAg
ICAgICAgIGNlbGwtPm1fbmV4dCA9IG1fZnJlZUxpc3Q7CisgICAgICAgICAgICBtX2ZyZWVMaXN0
ID0gY2VsbDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcHRyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHRyID49IG1fYmFzZSAmJiBwdHIg
PCBtX2Jhc2UgKyBtX3NpemU7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc0ZyZWVMaXN0
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3Q7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEZyZWVDZWxsICptX2ZyZWVMaXN0OworICAg
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUE9EUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDEwMjk3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw3IEBACiAjaWZuZGVmIFBPRFJlZEJsYWNrVHJlZV9oCiAjZGVmaW5lIFBP
RFJlZEJsYWNrVHJlZV9oCiAKLSNpbmNsdWRlICJQT0RBcmVuYS5oIgorI2luY2x1ZGUgIlBPREZy
ZWVMaXN0QXJlbmEuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTk3LDYgKzk3LDgg
QEAgZW51bSBVbmluaXRpYWxpemVkVHJlZUVudW0gewogdGVtcGxhdGU8Y2xhc3MgVD4KIGNsYXNz
IFBPRFJlZEJsYWNrVHJlZSB7CiBwdWJsaWM6CisgICAgY2xhc3MgTm9kZTsKKwogICAgIC8vIFZp
c2l0b3IgaW50ZXJmYWNlIGZvciB3YWxraW5nIGFsbCBvZiB0aGUgdHJlZSdzIGVsZW1lbnRzLgog
ICAgIGNsYXNzIFZpc2l0b3IgewogICAgIHB1YmxpYzoKQEAgLTExOSw5ICsxMjEsOSBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxs
b2NhdGluZyB0ZW1wb3Jhcnkgb2JqZWN0cwotICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3Rl
ZCBQT0RBcmVuYS4KKyAgICAvLyBmcm9tIGEgbmV3bHkgY29uc3RydWN0ZWQgUE9ERnJlZUxpc3RB
cmVuYS4KICAgICBQT0RSZWRCbGFja1RyZWUoKQotICAgICAgICA6IG1fYXJlbmEoUE9EQXJlbmE6
OmNyZWF0ZSgpKQorICAgICAgICA6IG1fYXJlbmEoUE9ERnJlZUxpc3RBcmVuYTxOb2RlPjo6Y3Jl
YXRlKCkpCiAgICAgICAgICwgbV9yb290KDApCiAgICAgICAgICwgbV9uZWVkc0Z1bGxPcmRlcmlu
Z0NvbXBhcmlzb25zKGZhbHNlKQogI2lmbmRlZiBOREVCVUcKQEAgLTEzMiw3ICsxMzQsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBDb25zdHJ1Y3RzIGEgbmV3IHJlZC1ibGFjayB0cmVlLCBhbGxvY2F0
aW5nIHRlbXBvcmFyeSBvYmplY3RzCiAgICAgLy8gZnJvbSB0aGUgZ2l2ZW4gUE9EQXJlbmEuCi0g
ICAgZXhwbGljaXQgUE9EUmVkQmxhY2tUcmVlKFBhc3NSZWZQdHI8UE9EQXJlbmE+IGFyZW5hKQor
ICAgIGV4cGxpY2l0IFBPRFJlZEJsYWNrVHJlZShQYXNzUmVmUHRyPFBPREZyZWVMaXN0QXJlbmE8
Tm9kZT4gPiBhcmVuYSkKICAgICAgICAgOiBtX2FyZW5hKGFyZW5hKQogICAgICAgICAsIG1fcm9v
dCgwKQogICAgICAgICAsIG1fbmVlZHNGdWxsT3JkZXJpbmdDb21wYXJpc29ucyhmYWxzZSkKQEAg
LTE0OCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgLy8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVy
biBmYWxzZS4KICAgICB2b2lkIGNsZWFyKCkKICAgICB7CisgICAgICAgIG1hcmtGcmVlKG1fcm9v
dCk7CiAgICAgICAgIG1fYXJlbmEgPSAwOwogICAgICAgICBtX3Jvb3QgPSAwOwogICAgIH0KQEAg
LTE2MCwxMyArMTYzLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRJZk5lZWRlZCgpCiAgICAg
ewogICAgICAgICBpZiAoIW1fYXJlbmEpCi0gICAgICAgICAgICBtX2FyZW5hID0gUE9EQXJlbmE6
OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9hcmVuYSA9IFBPREZyZWVMaXN0QXJlbmE8Tm9kZT46
OmNyZWF0ZSgpOworICAgIH0KKworICAgIHZvaWQgaW5pdElmTmVlZGVkKFBPREZyZWVMaXN0QXJl
bmE8Tm9kZT4qIGFyZW5hKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FyZW5hKQorICAgICAgICAg
ICAgbV9hcmVuYSA9IGFyZW5hOwogICAgIH0KIAogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKLSAgICAgICAgTm9kZSog
bm9kZSA9IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PE5vZGUsIFQ+KGRhdGEpOworICAgICAgICBO
b2RlKiBub2RlID0gbV9hcmVuYS0+dGVtcGxhdGUgYWxsb2NhdGVPYmplY3Q8VD4oZGF0YSk7CiAg
ICAgICAgIGluc2VydE5vZGUobm9kZSk7CiAgICAgfQogCkBAIC0yMzUsNyArMjQ0LDYgQEAgcHVi
bGljOgogICAgIH0KICNlbmRpZgogCi1wcm90ZWN0ZWQ6CiAgICAgZW51bSBDb2xvciB7CiAgICAg
ICAgIFJlZCA9IDEsCiAgICAgICAgIEJsYWNrCkBAIC0yOTAsNiArMjk4LDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICBUIG1fZGF0YTsKICAgICB9OwogCitwcm90ZWN0ZWQ6CiAgICAgLy8gUmV0dXJu
cyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgd2hpY2ggaXMgbmVlZGVkIGJ5IHNvbWUgc3ViY2xhc3Nl
cy4KICAgICBOb2RlKiByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9CiAKQEAgLTY5MCw2
ICs2OTksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlVXBkYXRlcyh4UGFyZW50
KTsKICAgICAgICAgaWYgKHktPmNvbG9yKCkgPT0gQmxhY2spCiAgICAgICAgICAgICBkZWxldGVG
aXh1cCh4LCB4UGFyZW50KTsKKworICAgICAgICBtX2FyZW5hLT5mcmVlT2JqZWN0KHkpOwogICAg
IH0KIAogICAgIC8vIFZpc2l0cyB0aGUgc3VidHJlZSByb290ZWQgYXQgdGhlIGdpdmVuIG5vZGUg
aW4gb3JkZXIuCkBAIC03MDIsNiArNzEzLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2aXNp
dElub3JkZXJJbXBsKG5vZGUtPnJpZ2h0KCksIHZpc2l0b3IpOwogICAgIH0KIAorICAgIHZvaWQg
bWFya0ZyZWUoTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAobm9kZS0+bGVmdCgpKQorICAgICAgICAgICAgbWFy
a0ZyZWUobm9kZS0+bGVmdCgpKTsKKyAgICAgICAgaWYgKG5vZGUtPnJpZ2h0KCkpCisgICAgICAg
ICAgICBtYXJrRnJlZShub2RlLT5yaWdodCgpKTsKKyAgICAgICAgbV9hcmVuYS0+ZnJlZU9iamVj
dChub2RlKTsKKyAgICB9CisKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBIZWxwZXIgY2xh
c3MgZm9yIHNpemUoKQogCkBAIC03OTIsNyArODE1LDcgQEAgcHJpdmF0ZToKICAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICAgICAvLyBEYXRhIG1lbWJlcnMKIAotICAgIFJlZlB0cjxQT0RBcmVuYT4gbV9h
cmVuYTsKKyAgICBSZWZQdHI8UE9ERnJlZUxpc3RBcmVuYTxOb2RlPiA+IG1fYXJlbmE7CiAgICAg
Tm9kZSogbV9yb290OwogICAgIGJvb2wgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zOwog
I2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkocmV2aXNpb24gMTAyOTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklu
bGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxh
eW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBPREZyZWVMaXN0QXJlbmEuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94UmVn
aW9uSW5mby5oIgpAQCAtMzI3MSw3ICszMjcyLDcgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0KiBSZW5kZXJCbG9jawogCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2Jq
ZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09i
amVjdHMoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdHModGhpcywgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9i
amVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKICAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwpAQCAtMzkzNiw3ICszOTM3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3Zl
cmhhbmdpbmdGbAogCiAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBv
YmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0
cykKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcg
RmxvYXRpbmdPYmplY3RzKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3Rz
KHRoaXMsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKIAogICAgICAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQpAQCAtNDAw
OSw3ICs0MDEwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRp
bmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIo
bmV3IEZsb2F0aW5nT2JqZWN0cyhpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2Jq
ZWN0cyh0aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTcwMTAsNyArNzAxMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0czo6Y29tcHUKICAgICBBU1NFUlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVk
KCkpOwogICAgIGlmIChtX3NldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Bs
YWNlZEZsb2F0c1RyZWUuaW5pdElmTmVlZGVkKCk7CisgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmlu
aXRJZk5lZWRlZChtX3JlbmRlcmVyLT52aWV3KCktPmludGVydmFsQXJlbmEoKSk7CiAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7CiAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKICAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2
aXNpb24gMTAyOTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxNiw3ICs5MTYsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQpIGNvbnN0OwogICAgIFJlbmRlclJl
Z2lvbiogY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhSZW5kZXJSZWdpb24qKSBjb25zdDsKIAot
cHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rp
b25zIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmplY3QqIGtleSkg
eyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5LT5tX3JlbmRl
cmVyKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVjdCogYSwgRmxv
YXRpbmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPm1fcmVuZGVyZXIgPT0gYi0+bV9yZW5kZXJlcjsg
fQpAQCAtOTMwLDYgKzkzMCw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVj
dFNldDo6Y29uc3RfaXRlcmF0b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKICAgICB0eXBl
ZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVy
dmFsOwogICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGludCwgRmxvYXRpbmdPYmplY3QqPiBG
bG9hdGluZ09iamVjdFRyZWU7CisgICAgdHlwZWRlZiBQT0RGcmVlTGlzdEFyZW5hPFBPRFJlZEJs
YWNrVHJlZTxGbG9hdGluZ09iamVjdEludGVydmFsPjo6Tm9kZT4gSW50ZXJ2YWxBcmVuYTsKICAg
ICAKICAgICB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5cGUgRmxvYXRUeXBlVmFsdWU+CiAg
ICAgY2xhc3MgRmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXIgewpAQCAtOTU3LDEyICs5NTgsMTMg
QEAgcHJpdmF0ZToKIAogICAgIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7CiAgICAgcHVibGljOgot
ICAgICAgICBGbG9hdGluZ09iamVjdHMoYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGJvb2wgaG9y
aXpvbnRhbFdyaXRpbmdNb2RlKQogICAgICAgICAgICAgOiBtX3BsYWNlZEZsb2F0c1RyZWUoVW5p
bml0aWFsaXplZFRyZWUpCiAgICAgICAgICAgICAsIG1fbGVmdE9iamVjdHNDb3VudCgwKQogICAg
ICAgICAgICAgLCBtX3JpZ2h0T2JqZWN0c0NvdW50KDApCiAgICAgICAgICAgICAsIG1fcG9zaXRp
b25lZE9iamVjdHNDb3VudCgwKQogICAgICAgICAgICAgLCBtX2hvcml6b250YWxXcml0aW5nTW9k
ZShob3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC05OTksNiArMTAwMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAgICAgIHVuc2lnbmVk
IG1fcG9zaXRpb25lZE9iamVjdHNDb3VudDsKICAgICAgICAgYm9vbCBtX2hvcml6b250YWxXcml0
aW5nTW9kZTsKKyAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIG1fcmVuZGVyZXI7CiAgICAgfTsK
ICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDEwMjk3
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTI1LDQgKzkyNSwxMSBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dFJlbmRlckZs
b3dUaHJlYWRzCiAgICAgfQogfQogCitSZW5kZXJCbG9jazo6SW50ZXJ2YWxBcmVuYSogUmVuZGVy
Vmlldzo6aW50ZXJ2YWxBcmVuYSgpCit7CisgICAgaWYgKCFtX2ludGVydmFsQXJlbmEpCisgICAg
ICAgIG1faW50ZXJ2YWxBcmVuYSA9IEludGVydmFsQXJlbmE6OmNyZWF0ZSgpOworICAgIHJldHVy
biBtX2ludGVydmFsQXJlbmEuZ2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMTAyOTc3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTGF5
b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJQT0RGcmVlTGlzdEFyZW5hLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CkBAIC0xOTIsNiArMTkzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAK
KyAgICBJbnRlcnZhbEFyZW5hKiBpbnRlcnZhbEFyZW5hKCk7CisKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1T
dGF0ZSYsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1hcEFi
c29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKQEAgLTIzNCw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiAgICAgZnJpZW5kIGNsYXNzIExh
eW91dFN0YXRlRGlzYWJsZXI7Ci0gICAgICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgRnJhbWVWaWV3
KiBtX2ZyYW1lVmlldzsKIApAQCAtMjc4LDYgKzI4MSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFJlbmRlckZsb3dUaHJlYWRMaXN0PiBtX3JlbmRlckZsb3dUaHJlYWRMaXN0OwogICAgIFJlbmRl
ckZsb3dUaHJlYWQqIG1fY3VycmVudFJlbmRlckZsb3dUaHJlYWQ7CiAgICAgUmVuZGVyUmVnaW9u
KiBtX2N1cnJlbnRSZW5kZXJSZWdpb247CisgICAgUmVmUHRyPEludGVydmFsQXJlbmE+IG1faW50
ZXJ2YWxBcmVuYTsKIH07CiAKIGlubGluZSBSZW5kZXJWaWV3KiB0b1JlbmRlclZpZXcoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
MTAyOTc3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0xMi0xNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5f
emhhbmdAYXBwbGUuY29tPgorCisgICAgICAgIFBPREludGVydmFsVHJlZSB0YWtlcyAxLjdNQiBt
ZW1vcnkgb24gd3d3Lm55dGltZXMuY29tLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2UgdGhlIHRlc3QgY29kZSBpbiBjaHJvbWl1bSBwb3J0IHNp
bmNlIFBPRFJlZEJsYWNrVHJlZSBub3cgdGFrZXMgUE9ERnJlZUxpc3RBcmVuYTxUPgorICAgICAg
ICBpbiBpdHMgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiB0ZXN0cy9QT0RSZWRCbGFja1RyZWVU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTEyLTE1ICBUb21teSBX
aWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWVk
aWFTdHJlYW0gQVBJOiBGaXhpbmcgI2luY2x1ZGUgc3RhdGVtZW50cyBhbmQgcmVtb3ZpbmcgZm9y
d2FyZGluZyBoZWFkZXIgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Q
T0RSZWRCbGFja1RyZWVUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwCShyZXZpc2lvbiAxMDI5NzcpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIFRFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVz
dFRyZWVBbGxvY2EKIHsKICAgICBSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4gYWxsb2NhdG9yID0g
VHJhY2tlZEFsbG9jYXRvcjo6Y3JlYXRlKCk7CiAgICAgewotICAgICAgICBSZWZQdHI8UE9EQXJl
bmE+IGFyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZShhbGxvY2F0b3IpOworICAgICAgICB0eXBlZGVm
IFBPREZyZWVMaXN0QXJlbmE8UE9EUmVkQmxhY2tUcmVlPGludD46Ok5vZGU+IFBPREludGVnZXJB
cmVuYTsKKyAgICAgICAgUmVmUHRyPFBPREludGVnZXJBcmVuYT4gYXJlbmEgPSBQT0RJbnRlZ2Vy
QXJlbmE6OmNyZWF0ZShhbGxvY2F0b3IpOwogICAgICAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0
cmVlKGFyZW5hKTsKICAgICAgICAgaW50IG51bUFkZGl0aW9ucyA9IDIgKiBQT0RBcmVuYTo6RGVm
YXVsdENodW5rU2l6ZSAvIHNpemVvZihpbnQpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUFkZGl0aW9uczsgKytpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>