<?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>10735</bug_id>
          
          <creation_ts>2006-09-04 21:36:24 -0700</creation_ts>
          <short_desc>Clicking in SVG results causes WebKit to consume 100% CPU for several minutes</short_desc>
          <delta_ts>2007-02-20 08:12:05 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://bdash.net.nz/files/auckland.svg</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, NeedsReduction, SVGHitList</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Rowe (bdash)">mrowe</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>justin.garcia</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54809</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-09-04 21:36:24 -0700</bug_when>
    <thetext>Steps to reproduce:

1) Load URL
2) Wait for it to finish downloading + rendering
3) Click in the middle of the image
4) Note that Safari has become unresponsive
5) Wait patiently for it to finish processing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54810</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-09-04 21:37:05 -0700</bug_when>
    <thetext>I have tested with r16068 and r16225 and see the problem in both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55099</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-09-09 00:40:50 -0700</bug_when>
    <thetext>Most of the time is spent in one call to VisiblePosition::canonicalPosition(), and under that in one call to each of Position::upstream(), Position::downstream(), nextCandidate() and previousCandidate(). The position to canonicalize is sitting in a very wide tree of unrendered content. The above 4 calls are O(n^2) since they essentially loop using Position::next() which in turn half the time uses Node::nodeIndex() which is O(n).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55361</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-12 23:32:34 -0700</bug_when>
    <thetext>I&apos;m raising this to a P1 since this is effectively a crash.

It looks like SVG (possibly because of how many nodes it generates as opposed to HTML) just sent the position code off the deep end.  It&apos;s also possible that this is caused by bounding-box calculation issues in SVG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55362</commentid>
    <comment_count>4</comment_count>
      <attachid>10523</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-12 23:33:03 -0700</bug_when>
    <thetext>Created attachment 10523
Sample during the hang.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35933</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-01-10 04:01:46 -0800</bug_when>
    <thetext>Maybe try subclassing positionForCoordinates on all SVG objects to return an empty VisiblePosition... with no element at all.... e.g., VisiblePosition(0, 0, DOWNSTREAM);

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33341</commentid>
    <comment_count>6</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2007-01-22 16:51:06 -0800</bug_when>
    <thetext>In Radar
&lt;rdar://problem/4946826&gt;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22797</commentid>
    <comment_count>7</comment_count>
      <attachid>13216</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-17 15:26:05 -0800</bug_when>
    <thetext>Created attachment 13216
[WIP] use an iterator that doesn&apos;t maintain child indices

Passes all the editing tests but I need to review it once more to verify that it is correct, look for more places that can benefit from using the new PositionIterator, possibly split it out into its own files, and figure out if PositionIterator needs to be optimized for the common(?) case of not iterating at all (the optimization would be to cache the initial Position in the PositionIterator, not initialize its other member variables until the first increment/decrement, and if those were never called, do the conversion to Position by returning the cached one).

Some bits of correctness I&apos;m concerned about include editingIgnoresContent()-positive nodes, &lt;br&gt;s and negative offsets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22601</commentid>
    <comment_count>8</comment_count>
      <attachid>13228</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-18 12:38:28 -0800</bug_when>
    <thetext>Created attachment 13228
Use an iterator that doesn&apos;t maintain child indices

No layout test regressions.

Note that there used to be a PositionIterator class in WebCore, but it was quite different than the proposed one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22641</commentid>
    <comment_count>9</comment_count>
      <attachid>13237</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-19 08:03:44 -0800</bug_when>
    <thetext>Created attachment 13237
Use an iterator that doesn&apos;t maintain child indices

See comment #8. Fixed typos and removed one redundant statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22642</commentid>
    <comment_count>10</comment_count>
      <attachid>13237</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-19 08:27:39 -0800</bug_when>
    <thetext>Comment on attachment 13237
Use an iterator that doesn&apos;t maintain child indices

+friend class PositionIterator;

Normaly we&apos;d indent this kind of friend declaration.

Could we make the helper functions public instead of private? Then PositionIterator would not need to be a friend.

Why does Position need to be a friend of PositionIterator?

r=me, anyway</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22657</commentid>
    <comment_count>11</comment_count>
      <attachid>13237</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-19 11:18:03 -0800</bug_when>
    <thetext>Comment on attachment 13237
Use an iterator that doesn&apos;t maintain child indices

Going to make a new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22659</commentid>
    <comment_count>12</comment_count>
      <attachid>13243</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-19 11:56:24 -0800</bug_when>
    <thetext>Created attachment 13243
Use an iterator that doesn&apos;t maintain child indices

(In reply to comment #10)
&gt; Could we make the helper functions public instead of private? Then
&gt; PositionIterator would not need to be a friend.

Done.

&gt; Why does Position need to be a friend of PositionIterator?

The Position(const PositionIterator&amp;) constructor accesses private members. I left it this way in this patch because it&apos;s the lesser evil of the alternatives I could think of.

Also fixed the indentation of the friend declaration and moved another star.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22694</commentid>
    <comment_count>13</comment_count>
      <attachid>13243</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-02-19 15:04:29 -0800</bug_when>
    <thetext>Comment on attachment 13243
Use an iterator that doesn&apos;t maintain child indices

r=me

I&apos;d like to see makefiles updated for platforms other than Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22712</commentid>
    <comment_count>14</comment_count>
      <attachid>13258</attachid>
    <who name="">mitz</who>
    <bug_when>2007-02-19 17:07:47 -0800</bug_when>
    <thetext>Created attachment 13258
Use an iterator that doesn&apos;t maintain child indices

(In reply to comment #13)
&gt; I&apos;d like to see makefiles updated for platforms other than Mac.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22715</commentid>
    <comment_count>15</comment_count>
      <attachid>13258</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-02-19 17:12:51 -0800</bug_when>
    <thetext>Comment on attachment 13258
Use an iterator that doesn&apos;t maintain child indices

Really only reviewing the updates to the makefiles/build systems for non-mac platforms.  r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22540</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-02-20 08:12:05 -0800</bug_when>
    <thetext>Landed in r19734.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10523</attachid>
            <date>2006-09-12 23:33:03 -0700</date>
            <delta_ts>2006-09-12 23:33:03 -0700</delta_ts>
            <desc>Sample during the hang.</desc>
            <filename>Safari_18482.sample.txt</filename>
            <type>text/plain</type>
            <size>11198</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">QW5hbHlzaXMgb2Ygc2FtcGxpbmcgcGlkIDE4NDgyIGV2ZXJ5IDEwLjAwMDAwMCBtaWxsaXNlY29u
ZHMKQ2FsbCBncmFwaDoKICAgIDk5OSBUaHJlYWRfMGYwNwogICAgICA5OTkgMHg1ZjZmOQogICAg
ICAgIDk5OSAweDVmN2RlCiAgICAgICAgICA5OTkgTlNBcHBsaWNhdGlvbk1haW4KICAgICAgICAg
ICAgOTk5IC1bTlNBcHBsaWNhdGlvbiBydW5dCiAgICAgICAgICAgICAgOTk5IDB4MjJmMWUKICAg
ICAgICAgICAgICAgIDk5OSAtW05TQXBwbGljYXRpb24gc2VuZEV2ZW50Ol0KICAgICAgICAgICAg
ICAgICAgOTk5IDB4MjMzOGUKICAgICAgICAgICAgICAgICAgICA5OTkgLVtOU1dpbmRvdyBzZW5k
RXZlbnQ6XQogICAgICAgICAgICAgICAgICAgICAgOTk5IC1bV2ViSFRNTFZpZXcgbW91c2VEb3du
Ol0KICAgICAgICAgICAgICAgICAgICAgICAgOTk5IC1bV2ViQ29yZUZyYW1lQnJpZGdlIG1vdXNl
RG93bjpdCiAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IFdlYkNvcmU6OkZyYW1lTWFjOjpt
b3VzZURvd24oTlNFdmVudCopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgV2ViQ29y
ZTo6RnJhbWVWaWV3OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoV2ViQ29yZTo6UGxhdGZvcm1Nb3Vz
ZUV2ZW50IGNvbnN0JikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IFdlYkNvcmU6
OkZyYW1lTWFjOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyBjb25zdCYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5
IFdlYkNvcmU6OkZyYW1lOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBjb25zdCYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA5OTkgV2ViQ29yZTo6RnJhbWU6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNr
KFdlYkNvcmU6Ok1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgY29uc3QmKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpwb3Np
dGlvbkZvclBvaW50KFdlYkNvcmU6OkludFBvaW50IGNvbnN0JikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA5OTkgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpwb3NpdGlvbkZv
ckNvb3JkaW5hdGVzKGludCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOTk5IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uW2luLWNo
YXJnZV0oV2ViQ29yZTo6Tm9kZSosIGludCwgV2ViQ29yZTo6RUFmZmluaXR5KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uOjppbml0KFdlYkNvcmU6OlBvc2l0aW9uIGNvbnN0JiwgV2ViQ29yZTo6RUFmZmluaXR5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSBXZWJDb3JlOjpW
aXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0aW9uKFdlYkNvcmU6OlBvc2l0aW9uIGNvbnN0
JikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSBXZWJD
b3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA5OTkgV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKFdl
YkNvcmU6OkVVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycykgY29uc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTYgV2ViQ29yZTo6Tm9kZTo6bm9kZUlu
ZGV4KCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQ4OSBXZWJDb3JlOjpOb2RlOjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODkgV2ViQ29y
ZTo6Tm9kZTo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgV2ViQ29yZTo6Tm9kZTo6bm9kZUluZGV4KCkg
Y29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0
OTMgV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6Y2hpbGROb2RlKHVuc2lnbmVkKSBjb25zdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg0IFdlYkNv
cmU6Ok5vZGU6Om5leHRTaWJsaW5nKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg0IFdlYkNvcmU6Ok5vZGU6Om5leHRTaWJsaW5n
KCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDkgV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6Y2hpbGROb2RlKHVuc2lnbmVkKSBjb25zdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggV2ViQ29y
ZTo6Tm9kZTo6bmV4dFNpYmxpbmcoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOCBXZWJDb3JlOjpOb2RlOjpuZXh0U2libGluZygpIGNv
bnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBX
ZWJDb3JlOjpOb2RlOjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBXZWJDb3JlOjpOb2RlOjpwcmV2aW91
c1NpYmxpbmcoKSBjb25zdAogICAgOTk5IFRocmVhZF8xMDAzCiAgICAgIDk5OSBfcHRocmVhZF9i
b2R5CiAgICAgICAgOTk5IF9fYXBlX2FnZW50CiAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAog
ICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAogICAgOTk5IFRocmVhZF8xMTAzCiAgICAgIDk5
OSBfcHRocmVhZF9ib2R5CiAgICAgICAgOTk5IHNlbGVjdAogICAgICAgICAgOTk5IHNlbGVjdAog
ICAgOTk5IFRocmVhZF8xMjAzCiAgICAgIDk5OSBfcHRocmVhZF9ib2R5CiAgICAgICAgOTk5IGZv
cmtUaHJlYWRGb3JGdW5jdGlvbgogICAgICAgICAgOTk5IC1bQXN5bmNEQiBfcnVuOl0KICAgICAg
ICAgICAgOTk5IC1bTlNDb25kaXRpb25Mb2NrIGxvY2tXaGVuQ29uZGl0aW9uOl0KICAgICAgICAg
ICAgICA5OTkgc2VtYXBob3JlX3dhaXRfc2lnbmFsX3RyYXAKICAgICAgICAgICAgICAgIDk5OSBz
ZW1hcGhvcmVfd2FpdF9zaWduYWxfdHJhcAogICAgOTk5IFRocmVhZF8xMzAzCiAgICAgIDk5OSBf
cHRocmVhZF9ib2R5CiAgICAgICAgOTk5IGZvcmtUaHJlYWRGb3JGdW5jdGlvbgogICAgICAgICAg
OTk5ICtbTlNVUkxDb25uZWN0aW9uKE5TVVJMQ29ubmVjdGlvbkludGVybmFsKSBfcmVzb3VyY2VM
b2FkTG9vcDpdCiAgICAgICAgICAgIDk5OSBDRlJ1bkxvb3BSdW5Jbk1vZGUKICAgICAgICAgICAg
ICA5OTkgQ0ZSdW5Mb29wUnVuU3BlY2lmaWMKICAgICAgICAgICAgICAgIDk5OSBtYWNoX21zZ190
cmFwCiAgICAgICAgICAgICAgICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICA5OTkgVGhyZWFkXzE0
MDMKICAgICAgOTk5IF9wdGhyZWFkX2JvZHkKICAgICAgICA5OTkgZm9ya1RocmVhZEZvckZ1bmN0
aW9uCiAgICAgICAgICA5OTkgK1tOU1VSTENhY2hlIF9kaXNrQ2FjaGVTeW5jTG9vcDpdCiAgICAg
ICAgICAgIDk5OSBDRlJ1bkxvb3BSdW5Jbk1vZGUKICAgICAgICAgICAgICA5OTkgQ0ZSdW5Mb29w
UnVuU3BlY2lmaWMKICAgICAgICAgICAgICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICAgICAgICAg
ICAgICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICA5OTkgVGhyZWFkXzE1MDMKICAgICAgOTk5IF9w
dGhyZWFkX2JvZHkKICAgICAgICA5OTkgQ01NQ29udlRhc2sodm9pZCopCiAgICAgICAgICA5OTkg
cHRocmVhZFNlbWFwaG9yZVdhaXQodF9wdGhyZWFkU2VtYXBob3JlKikKICAgICAgICAgICAgOTk5
IHNlbWFwaG9yZV93YWl0X3NpZ25hbF90cmFwCiAgICAgICAgICAgICAgOTk5IHNlbWFwaG9yZV93
YWl0X3NpZ25hbF90cmFwCiAgICA5OTkgVGhyZWFkXzE2MDMKICAgICAgOTk5IF9wdGhyZWFkX2Jv
ZHkKICAgICAgICA5OTkgZ2xjRGVidWdMaXN0ZW5lcgogICAgICAgICAgOTk5IG1hY2hfbXNnX3Ry
YXAKICAgICAgICAgICAgOTk5IG1hY2hfbXNnX3RyYXAKICAgIDk5OSBUaHJlYWRfMTcwMwogICAg
ICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBQcml2YXRlTVBFbnRyeVBvaW50CiAgICAg
ICAgICA5OTkga2V2ZW50CiAgICAgICAgICAgIDk5OSBrZXZlbnQKICAgIDk5OSBUaHJlYWRfMTgw
MwogICAgICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBQcml2YXRlTVBFbnRyeVBvaW50
CiAgICAgICAgICA5OTkgVE5vZGVTeW5jVGFzazo6U3luY1Rhc2tQcm9jKHZvaWQqKQogICAgICAg
ICAgICA5OTkgTVBXYWl0T25RdWV1ZQogICAgICAgICAgICAgIDk5OSBzZW1hcGhvcmVfd2FpdF9z
aWduYWxfdHJhcAogICAgICAgICAgICAgICAgOTk5IHNlbWFwaG9yZV93YWl0X3NpZ25hbF90cmFw
CiAgICA5OTkgVGhyZWFkXzE5MDMKICAgICAgOTk5IF9wdGhyZWFkX2JvZHkKICAgICAgICA5OTkg
Zm9ya1RocmVhZEZvckZ1bmN0aW9uCiAgICAgICAgICA5OTkgLVtOU1VJSGVhcnRCZWF0IF9oZWFy
dEJlYXRUaHJlYWQ6XQogICAgICAgICAgICA5OTkgLVtOU0NvbmRpdGlvbkxvY2sgbG9ja1doZW5D
b25kaXRpb246XQogICAgICAgICAgICAgIDk5OSBzZW1hcGhvcmVfd2FpdF9zaWduYWxfdHJhcAog
ICAgICAgICAgICAgICAgOTk5IHNlbWFwaG9yZV93YWl0X3NpZ25hbF90cmFwCiAgICA5OTkgVGhy
ZWFkXzFhMDMKICAgICAgOTk5IF9wdGhyZWFkX2JvZHkKICAgICAgICA5OTkgSk5JX0NyZWF0ZUph
dmFWTV9JbXBsCiAgICAgICAgICA5OTkgSk5JX0NyZWF0ZUphdmFWTV9JbXBsCiAgICAgICAgICAg
IDk5OSBKTklfQ3JlYXRlSmF2YVZNX0ltcGwKICAgICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJh
cAogICAgICAgICAgICAgICAgOTk5IG1hY2hfbXNnX3RyYXAKICAgIDk5OSBUaHJlYWRfMWIwMwog
ICAgICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBKTklfQ3JlYXRlSmF2YVZNX0ltcGwK
ICAgICAgICAgIDk5OSBqaW9fc25wcmludGYKICAgICAgICAgICAgOTk5IGppb19zbnByaW50Zgog
ICAgICAgICAgICAgIDk5OSBqaW9fc25wcmludGYKICAgICAgICAgICAgICAgIDk5OCBqaW9fc25w
cmludGYKICAgICAgICAgICAgICAgICAgOTk4IG1hY2hfbXNnX3RyYXAKICAgICAgICAgICAgICAg
ICAgICA5OTggbWFjaF9tc2dfdHJhcAogICAgICAgICAgICAgICAgMSBqaW9fc25wcmludGYKICAg
IDk5OSBUaHJlYWRfMWMwMwogICAgICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBKTklf
Q3JlYXRlSmF2YVZNX0ltcGwKICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAg
ICAgOTk5IEpWTV9TdGFydFRocmVhZAogICAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQK
ICAgICAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgICAgICAgOTk5
IGppb19zbnByaW50ZgogICAgICAgICAgICAgICAgICAgIDk5OSAweDMzYmMyMTVkCiAgICAgICAg
ICAgICAgICAgICAgICA5OTkgMHgzM2JjNDkxMwogICAgICAgICAgICAgICAgICAgICAgICA5OTkg
MHgzM2JjNDkxMwogICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSAweDMzYmNhMWQxCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDk5OSBKVk1fTW9uaXRvcldhaXQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA5OTkgamlvX3NucHJpbnRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOTk5IG1hY2hfbXNnX3RyYXAKICAgIDk5OSBUaHJlYWRfMWQwMwogICAgICA5OTkgX3B0aHJl
YWRfYm9keQogICAgICAgIDk5OSBKTklfQ3JlYXRlSmF2YVZNX0ltcGwKICAgICAgICAgIDk5OSBK
Vk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgOTk5IEpWTV9TdGFydFRocmVhZAogICAgICAgICAg
ICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJl
YWQKICAgICAgICAgICAgICAgICAgOTk5IGppb19zbnByaW50ZgogICAgICAgICAgICAgICAgICAg
IDk5OSAweDMzYmMyMTVkCiAgICAgICAgICAgICAgICAgICAgICA5OTkgMHgzM2JjNDllYQogICAg
ICAgICAgICAgICAgICAgICAgICA5OTkgMHgzM2JjNDllYQogICAgICAgICAgICAgICAgICAgICAg
ICAgIDk5OSAweDMzYmM0OTEzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgMHgzM2Jj
YTFkMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IEpWTV9Nb25pdG9yV2FpdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IEpWTV9Nb25pdG9yV2FpdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgamlvX3NucHJpbnRmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOTk5IG1hY2hfbXNnX3RyYXAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICA5OTkgVGhyZWFk
XzFlMDMKICAgICAgOTk5IF9wdGhyZWFkX2JvZHkKICAgICAgICA5OTkgSk5JX0NyZWF0ZUphdmFW
TV9JbXBsCiAgICAgICAgICA5OTkgSlZNX1N0YXJ0VGhyZWFkCiAgICAgICAgICAgIDk5OSBKVk1f
UmVnaXN0ZXJTaWduYWwKICAgICAgICAgICAgICA5OTkgc2VtYXBob3JlX3dhaXRfdHJhcAogICAg
ICAgICAgICAgICAgOTk5IHNlbWFwaG9yZV93YWl0X3RyYXAKICAgIDk5OSBUaHJlYWRfMWYwMwog
ICAgICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBKTklfQ3JlYXRlSmF2YVZNX0ltcGwK
ICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgOTk5IEpWTV9SZWdpc3Rl
clNpZ25hbAogICAgICAgICAgICAgIDk5OSBKVk1fUmVnaXN0ZXJTaWduYWwKICAgICAgICAgICAg
ICAgIDk5OSBqaW9fc25wcmludGYKICAgICAgICAgICAgICAgICAgOTk5IGppb19zbnByaW50Zgog
ICAgICAgICAgICAgICAgICAgIDk5OSBtYWNoX21zZ190cmFwCiAgICAgICAgICAgICAgICAgICAg
ICA5OTkgbWFjaF9tc2dfdHJhcAogICAgOTk5IFRocmVhZF8yMDAzCiAgICAgIDk5OSBfcHRocmVh
ZF9ib2R5CiAgICAgICAgOTk5IEpOSV9DcmVhdGVKYXZhVk1fSW1wbAogICAgICAgICAgOTk5IEpW
TV9TdGFydFRocmVhZAogICAgICAgICAgICA5OTkgSlZNX1JlZ2lzdGVyU2lnbmFsCiAgICAgICAg
ICAgICAgOTk5IGppb19zbnByaW50ZgogICAgICAgICAgICAgICAgOTk5IGppb19zbnByaW50Zgog
ICAgICAgICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAogICAgICAgICAgICAgICAgICAgIDk5
OSBtYWNoX21zZ190cmFwCiAgICA5OTkgVGhyZWFkXzIxMDMKICAgICAgOTk5IF9wdGhyZWFkX2Jv
ZHkKICAgICAgICA5OTkgSk5JX0NyZWF0ZUphdmFWTV9JbXBsCiAgICAgICAgICA5OTkgSlZNX1Jl
Z2lzdGVyU2lnbmFsCiAgICAgICAgICAgIDk5OSBKVk1fUmVnaXN0ZXJTaWduYWwKICAgICAgICAg
ICAgICA5OTUgamlvX3NucHJpbnRmCiAgICAgICAgICAgICAgICA5OTUgbWFjaF9tc2dfdHJhcAog
ICAgICAgICAgICAgICAgICA5OTUgbWFjaF9tc2dfdHJhcAogICAgICAgICAgICAgIDQgSlZNX1Jl
Z2lzdGVyU2lnbmFsCiAgICA5OTkgVGhyZWFkXzIyMDMKICAgICAgOTk5IF9wdGhyZWFkX2JvZHkK
ICAgICAgICA5OTkgSk5JX0NyZWF0ZUphdmFWTV9JbXBsCiAgICAgICAgICA5OTkgSlZNX1N0YXJ0
VGhyZWFkCiAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgICA5OTkg
SlZNX1N0YXJ0VGhyZWFkCiAgICAgICAgICAgICAgICA5OTkgSlZNX1N0YXJ0VGhyZWFkCiAgICAg
ICAgICAgICAgICAgIDk5OSBqaW9fc25wcmludGYKICAgICAgICAgICAgICAgICAgICA5OTkgMHgz
M2JjMjE1ZAogICAgICAgICAgICAgICAgICAgICAgOTk5IDB4MzNiYzRjMTkKICAgICAgICAgICAg
ICAgICAgICAgICAgOTk5IDB4MzNiYzQ5ZWEKICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkg
MHgzM2JjNDllYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IDB4MzNiYzQ5MTMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IDB4MzNiY2ExZDEKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDk5OSBKVk1fTW9uaXRvcldhaXQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA5OTkgamlvX3NucHJpbnRmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAogICAgOTk5IFRocmVhZF8yMzAzCiAg
ICAgIDk5OSBfcHRocmVhZF9ib2R5CiAgICAgICAgOTk5IEpOSV9DcmVhdGVKYXZhVk1fSW1wbAog
ICAgICAgICAgOTk5IEpWTV9TdGFydFRocmVhZAogICAgICAgICAgICA5OTkgSlZNX1N0YXJ0VGhy
ZWFkCiAgICAgICAgICAgICAgOTk5IEpWTV9TdGFydFRocmVhZAogICAgICAgICAgICAgICAgOTk5
IEpWTV9TdGFydFRocmVhZAogICAgICAgICAgICAgICAgICA5OTkgamlvX3NucHJpbnRmCiAgICAg
ICAgICAgICAgICAgICAgOTk5IDB4MzNiYzIxNWQKICAgICAgICAgICAgICAgICAgICAgIDk5OSAw
eDMzYmM0YzE5CiAgICAgICAgICAgICAgICAgICAgICAgIDk5OSAweDMzYmM0OTEzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgOTk5IDB4MzNiYzQ5MTMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDk5OSAweDMzYmNhMWQxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSBKVk1f
TW9uaXRvcldhaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgSlZNX01vbml0
b3JXYWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JX
YWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSBqaW9fc25wcmludGYK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgbWFjaF9tc2dfdHJhcAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5IG1hY2hfbXNnX3RyYXAK
ICAgIDk5OSBUaHJlYWRfMjQwMwogICAgICA5OTkgX3B0aHJlYWRfYm9keQogICAgICAgIDk5OSBK
TklfQ3JlYXRlSmF2YVZNX0ltcGwKICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAg
ICAgICAgOTk5IEpWTV9TdGFydFRocmVhZAogICAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJl
YWQKICAgICAgICAgICAgICAgIDk5OSBKVk1fU3RhcnRUaHJlYWQKICAgICAgICAgICAgICAgICAg
OTk5IGppb19zbnByaW50ZgogICAgICAgICAgICAgICAgICAgIDk5OSAweDMzYmMyMTVkCiAgICAg
ICAgICAgICAgICAgICAgICA5OTkgMHgzM2JjNGMxOQogICAgICAgICAgICAgICAgICAgICAgICA5
OTkgMHgzM2MzNmNjMAogICAgICAgICAgICAgICAgICAgICAgICAgIDk5OSAweDMzYzdhZTI0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA5OTkgMHgzM2M3YTVkMQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA5OTkgSlZNX01vbml0b3JXYWl0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOTk5IEpWTV9Nb25pdG9yV2FpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOTk5IEpWTV9Nb25pdG9yV2FpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA5OTkgamlvX3NucHJpbnRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOTk5IG1hY2hfbXNnX3RyYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDk5OSBtYWNoX21zZ190cmFwCgpUb3RhbCBudW1iZXIgaW4gc3RhY2sgKHJlY3Vyc2l2ZSBj
b3VudGVkIG11bHRpcGxlLCB3aGVuID49NSk6CiAgICAgICAgMjMgICAgICAgSlZNX1N0YXJ0VGhy
ZWFkCiAgICAgICAgMjEgICAgICAgX3B0aHJlYWRfYm9keQogICAgICAgIDE5ICAgICAgIGppb19z
bnByaW50ZgogICAgICAgIDE1ICAgICAgIEpWTV9Nb25pdG9yV2FpdAogICAgICAgIDE0ICAgICAg
IG1hY2hfbXNnX3RyYXAKICAgICAgICAxMyAgICAgICBKTklfQ3JlYXRlSmF2YVZNX0ltcGwKICAg
ICAgICA2ICAgICAgIDB4MzNiYzQ5MTMKICAgICAgICA2ICAgICAgIEpWTV9SZWdpc3RlclNpZ25h
bAogICAgICAgIDUgICAgICAgMHgzM2JjMjE1ZAoKU29ydCBieSB0b3Agb2Ygc3RhY2ssIHNhbWUg
Y29sbGFwc2VkICh3aGVuID49IDUpOgogICAgICAgIG1hY2hfbXNnX3RyYXAgICAgICAgIDEzOTgx
CiAgICAgICAgc2VtYXBob3JlX3dhaXRfc2lnbmFsX3RyYXAgICAgICAgIDM5OTYKICAgICAgICBr
ZXZlbnQgICAgICAgIDk5OQogICAgICAgIHNlbGVjdCAgICAgICAgOTk5CiAgICAgICAgc2VtYXBo
b3JlX3dhaXRfdHJhcCAgICAgICAgOTk5CiAgICAgICAgV2ViQ29yZTo6Tm9kZTo6bmV4dFNpYmxp
bmcoKSBjb25zdCAgICAgICAgNDkyCiAgICAgICAgV2ViQ29yZTo6Tm9kZTo6cHJldmlvdXNTaWJs
aW5nKCkgY29uc3QgICAgICAgIDQ5MQogICAgICAgIFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmNo
aWxkTm9kZSh1bnNpZ25lZCkgY29uc3QgICAgICAgIDkKICAgICAgICBXZWJDb3JlOjpOb2RlOjpu
b2RlSW5kZXgoKSBjb25zdCAgICAgICAgNwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13216</attachid>
            <date>2007-02-17 15:26:05 -0800</date>
            <delta_ts>2007-02-18 12:38:28 -0800</delta_ts>
            <desc>[WIP] use an iterator that doesn&apos;t maintain child indices</desc>
            <filename>10735_WIP.patch</filename>
            <type>text/plain</type>
            <size>14746</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE5NjgzKQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSwxNCBAQCBzdGF0aWMgTm9kZSAqcHJldmlv
dXNSZW5kZXJlZEVkaXRhYmxlKE5vCiB9CiAKIFBvc2l0aW9uOjpQb3NpdGlvbihOb2RlICpub2Rl
LCBpbnQgb2Zmc2V0KSAKLSAgICA6IG1fbm9kZShub2RlKSwgbV9vZmZzZXQob2Zmc2V0KSAKKyAg
ICA6IG1fbm9kZShub2RlKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KSAKK3sKK30KKworUG9zaXRp
b246OlBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uSXRlcmF0b3ImIGl0KQorICAgIDogbV9ub2RlKGl0
Lm1fcGFyZW50KQorICAgICwgbV9vZmZzZXQoaXQubV9jaGlsZCA/IGl0Lm1fY2hpbGQtPm5vZGVJ
bmRleCgpIDogKGl0Lm1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgPyBtYXhEZWVwT2Zmc2V0KGl0
Lm1fcGFyZW50KSArIDEgOiBpdC5tX29mZnNldCkpCiB7CiB9CiAKQEAgLTI2NSwxNSArMjcyLDE1
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9zaXRpb24KIAogLy8gdXBzdHJl
YW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8gcmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBl
aXRoZXIgaW4gYQogLy8gdGV4dCBub2RlIG9yIGF0IGp1c3QgYmVmb3JlIGEgbm9uLXRleHQgbm9k
ZS4gIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhhdC4KLXN0YXRpYyBib29sIGlzU3RyZWFtZXIo
Y29uc3QgUG9zaXRpb24gJnBvcykKK3N0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3QgUG9zaXRp
b25JdGVyYXRvciYgcG9zKQogewotICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgaWYgKCFwb3Mu
bm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgaWYgKGlzQXRvbWlj
Tm9kZShwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJl
dHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKKyAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsK
IH0KIAogLy8gcC51cHN0cmVhbSgpIHJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiBw
b3NpdGlvbnMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIGFzIFAuCkBAIC0y
ODEsMTggKzI4OCwxNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogewog
ICAgIC8vIHN0YXJ0IGF0IGVxdWl2YWxlbnQgZGVlcCBwb3NpdGlvbgogICAgIFBvc2l0aW9uIHN0
YXJ0ID0gKnRoaXM7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAg
ICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9t
IHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2Nr
ID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9
ICp0aGlzOwotICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0
VmlzaWJsZSA9ICp0aGlzOworICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IHN0YXJ0
OwogICAgIE5vZGUqIG9yaWdpbmFsUm9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwotICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50
UG9zLnByZXZpb3VzKFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzKSkgewotICAgICAgICBOb2RlICpj
dXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNl
dCA9IGN1cnJlbnRQb3Mub2Zmc2V0KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQo
KTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgeworICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9
IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkgIT0gb3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDMsNyArMzA5LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QK
ICAgICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0
aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0
ICpyZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVu
ZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIApAQCAtMzEyLDIyICszMTgsMjAg
QEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIGxhc3RW
aXNpYmxlID0gY3VycmVudFBvczsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGxlYXZlIGEg
YmxvY2sgZmxvdyBvciB0YWJsZSBlbGVtZW50LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3Zl
IHRvIHRlcm1pbmF0ZSBhbmQgCi0gICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUg
bmV4dCBpdGVyYXRpb24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgY2FsbGluZyBw
cmV2aW91cygpCi0gICAgICAgIC8vIGJlY2VhdXNlIHByZXZpb3VzKCkgZm9yIGFuIG9mZnNldCAw
IHBvc2l0aW9uIGNhbGxzIG5vZGVJbmRleCgpLCB3aGljaCBpcyBPKG4pLgotICAgICAgICAvLyBG
SVhNRTogQXZvaWQgY2FsbGluZyBwcmV2aW91cyBvbiBvdGhlciBvZmZzZXQgMCBwb3NpdGlvbnMu
Ci0gICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBlbmNsb3NpbmdCbG9jayhjdXJyZW50Tm9kZSkg
JiYgY3VycmVudE9mZnNldCA9PSAwKQorICAgICAgICAvLyByZXR1cm4gbGFzdFZpc2libGUgb24g
dGhlIG5leHQgaXRlcmF0aW9uLCBidXQgd2UgdGVybWluYXRlIGVhcmx5LgorICAgICAgICBpZiAo
Y3VycmVudE5vZGUgPT0gZW5jbG9zaW5nQmxvY2soY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3Mu
YXRTdGFydE9mTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogICAgICAg
ICAgICAgCiAgICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBhZnRlciBicnMsIHRhYmxlcywgYW5k
IG5vZGVzIHdoaWNoIGhhdmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBp
ZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCByZW5kZXJlci0+aXNCUigp
IHx8IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaW50IG1heE9m
ZnNldCA9IG1heERlZXBPZmZzZXQoY3VycmVudE5vZGUpOwotICAgICAgICAgICAgaWYgKGN1cnJl
bnRPZmZzZXQgPj0gbWF4T2Zmc2V0KQorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRP
Zk5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIG1h
eE9mZnNldCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IHJldHVybiBjdXJyZW50IHBvc2l0aW9uIGlmIGl0IGlzIGluIHJlbmRlcmVkIHRleHQKLSAgICAg
ICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJl
bmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQo
KSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkg
ewogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGZpcmVzIGluIGxheW91dCB0ZXN0cyBpbiB0aGUgY2Fz
ZS10cmFuc2Zvcm0uaHRtbCB0ZXN0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAvLyBvZiBhIG1p
eC11cCBiZXR3ZWVuIG9mZnNldHMgaW4gdGhlIHRleHQgaW4gdGhlIERPTSB0cmVlIHdpdGggdGV4
dCBpbiB0aGUKQEAgLTMzNywxMiArMzQxLDkgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFt
KCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJl
bmRlcmVyLT5jYXJldE1heE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGN1cnJlbnRPZmZzZXQgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLSAgICAgICAgICAg
IFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVu
ZGVyZXIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVy
ZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9k
ZSgpOworICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCog
Ym94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRU
ZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3RhcnQo
KSAmJiB0ZXh0T2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTM2
MSwyNSArMzYyLDI0IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gc3RhcnQg
PSAqdGhpczsKLSAgICBOb2RlICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSog
c3RhcnROb2RlID0gc3RhcnQubm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBs
b29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2NrID0gZW5jbG9z
aW5nQmxvY2soc3RhcnROb2RlKTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9ICp0aGlzOwot
ICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9jayA9IGVuY2xv
c2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9
ICp0aGlzOworICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IHN0YXJ0OwogICAgIE5v
ZGUqIG9yaWdpbmFsUm9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZv
ciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zID0gY3VycmVudFBvcy5uZXh0KFVz
aW5nQ29tcG9zZWRDaGFyYWN0ZXJzKSkgeyAgIAotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9
IGN1cnJlbnRQb3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCA9IGN1cnJlbnRQ
b3Mub2Zmc2V0KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3Mu
aW5jcmVtZW50KCkpIHsgICAKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9z
Lm5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpICE9IG9yaWdpbmFsUm9vdCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IC8vIHN0b3AgYmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1cCBpbnRvIHRoZSBoZWFkCiAg
ICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAg
ICAgIGlmIChjdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiBjdXJyZW50T2Zmc2V0
ID49IChpbnQpIGN1cnJlbnROb2RlLT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICBpZiAoY3Vy
cmVudE5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykgJiYgY3VycmVudFBvcy5hdEVuZE9mTm9kZSgp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gRG8gbm90IGVu
dGVyIGEgbmV3IGVuY2xvc2luZyBibG9jayBmbG93IG9yIHRhYmxlIGVsZW1lbnQsIGFuZCBkb24n
dCBsZWF2ZSB0aGUgb3JpZ2luYWwgb25lLgpAQCAtMzg3LDcgKzM4Nyw3IEBAIFBvc2l0aW9uIFBv
c2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJs
ZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxl
IG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKQEAgLTM5NywyNSArMzk3LDIyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkg
Y29uc3QKIAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYmVmb3JlIGJycywgdGFibGVzLCBh
bmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAg
IGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IHJlbmRlcmVyLT5pc0JS
KCkgfHwgaXNUYWJsZUVsZW1lbnQoY3VycmVudE5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudE9mZnNldCA8PSByZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSkKKyAgICAgICAgICAgIGlm
IChjdXJyZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKSA8PSByZW5kZXJlci0+Y2FyZXRNaW5PZmZz
ZXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRl
cmVyLT5jYXJldE1pbk9mZnNldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gcmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVy
ZWQgdGV4dAotICAgICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJl
bmRlclRleHQgKj4ocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkgeworICAgICAgICBpZiAocmVu
ZGVyZXItPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlciktPmZp
cnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3RhcnROb2Rl
KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGN1cnJlbnRPZmZzZXQgPT0gMCk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0KGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1pbk9mZnNl
dCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPCAw
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9m
ZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpOwogCi0gICAgICAgICAgICB1bnNp
Z25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLQotICAgICAgICAgICAgUmVuZGVyVGV4
dCAqdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcik7Ci0g
ICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RU
ZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVy
ZXIpOworICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXIt
PmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAg
ICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0ID49IGJveC0+c3RhcnQoKSAmJiB0ZXh0T2Zmc2V0IDw9
IGJveC0+ZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAg
ICAgICAgICAgICAgIApAQCAtNzA3LDYgKzcwNCwxMTkgQEAgUG9zaXRpb24gZW5kUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIpCiAgICAgcmV0dXJuIFBvc2l0aW9uKHItPmVuZENvbnRhaW5lcihlYyks
IHItPmVuZE9mZnNldChlYykpOwogfQogCit2b2lkIFBvc2l0aW9uSXRlcmF0b3I6OmluY3JlbWVu
dCgpCit7CisgICAgQVNTRVJUKG1fcGFyZW50KTsKKworICAgIGlmICghbV9jaGlsZCkgeworICAg
ICAgICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgbV9vZmZzZXQgPCBtYXhEZWVw
T2Zmc2V0KG1fcGFyZW50KSkKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPm5leHRP
ZmZzZXQobV9vZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fY2hpbGQgPSBt
X3BhcmVudDsKKyAgICAgICAgICAgIG1fcGFyZW50ID0gbV9jaGlsZC0+cGFyZW50Tm9kZSgpOwor
ICAgICAgICAgICAgbV9jaGlsZCA9IG1fY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICBtX29mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3BhcmVu
dCA9IG1fY2hpbGQ7CisgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICAgICAgbV9jaGlsZCA9IG1f
cGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgPyBtX3BhcmVudC0+Zmlyc3RDaGlsZCgpIDogMDsKKyAg
ICB9Cit9CisKK3ZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKK3sKKyAgICBBU1NF
UlQobV9wYXJlbnQpOworCisgICAgaWYgKCFtX2NoaWxkKSB7CisgICAgICAgIGlmIChtX29mZnNl
dCkgeworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+cHJldmlvdXNPZmZzZXQobV9v
ZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcGFyZW50LT5oYXND
aGlsZE5vZGVzKCkpIHsKKyAgICAgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFyZW50LT5sYXN0
Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkp
CisgICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0ID0gbWF4RGVlcE9mZnNldChtX3BhcmVudCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fY2hpbGQgPSBtX3BhcmVu
dDsKKyAgICAgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFyZW50LT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgICAgICAgICAgbV9vZmZzZXQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9wYXJlbnQgPSBtX2NoaWxkLT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICAgICAgaWYgKG1fcGFyZW50KSB7CisgICAgICAgICAgICBtX2NoaWxkID0gMDsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSA/IDAgOiBtYXhE
ZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fY2hp
bGQgPSBtX2NoaWxkLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBtX3BhcmVudCA9IG1fY2hp
bGQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICAgICAgfQor
ICAgIH0KK30KKworYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIW1fcGFy
ZW50LT5wYXJlbnROb2RlKCkgJiYgKCFtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpICYmICFtX29m
ZnNldCB8fCBtX2NoaWxkICYmICFtX2NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7Cit9CisKK2Jv
b2wgUG9zaXRpb25JdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAgIGlmICghbV9wYXJlbnQp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2NoaWxkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuICFtX3BhcmVudC0+cGFyZW50Tm9kZSgpICYmICghbV9wYXJlbnQt
Pmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KSk7
Cit9CisKK2Jvb2wgUG9zaXRpb25JdGVyYXRvcjo6YXRTdGFydE9mTm9kZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX2NoaWxk
KQorICAgICAgICByZXR1cm4gIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgIW1fb2Zmc2V0
OworICAgIHJldHVybiBtX3BhcmVudC0+Zmlyc3RDaGlsZCgpID09IG1fY2hpbGQ7Cit9CisKK2Jv
b2wgUG9zaXRpb25JdGVyYXRvcjo6YXRFbmRPZk5vZGUoKSBjb25zdAoreworICAgIGlmICghbV9w
YXJlbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2NoaWxkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgIW1f
b2Zmc2V0IHx8ICFtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpICYmIG1fb2Zmc2V0ID49IG1heERl
ZXBPZmZzZXQobV9wYXJlbnQpOworfQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlk
YXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9wYXJlbnQtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChy
ZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQorICAgICAgICByZXR1cm4gIW1f
b2Zmc2V0ICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudC0+cGFyZW50KCkpOworCisg
ICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCp0aGlz
KS5pblJlbmRlcmVkVGV4dCgpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudCk7CisK
KyAgICBpZiAoaXNUYWJsZUVsZW1lbnQobV9wYXJlbnQpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVu
dChtX3BhcmVudCkpCisgICAgICAgIHJldHVybiAoYXRTdGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZO
b2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudC0+cGFyZW50KCkpOworCisg
ICAgaWYgKCFtX3BhcmVudC0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+aXNCbG9j
a0Zsb3coKSAmJiAhaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQo
cmVuZGVyZXIpICYmCisgICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBtX3BhcmVudC0+aGFz
VGFnTmFtZShib2R5VGFnKSkpCisgICAgICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgJiYgIW5v
ZGVJc1VzZXJTZWxlY3ROb25lKG1fcGFyZW50KTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNv
cmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uaAko
cmV2aXNpb24gMTk2ODMpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFBvc2l0aW9uSXRlcmF0
b3I7CiBjbGFzcyBSYW5nZTsKIAogZW51bSBFVXNpbmdDb21wb3NlZENoYXJhY3RlcnMgeyBOb3RV
c2luZ0NvbXBvc2VkQ2hhcmFjdGVycyA9IGZhbHNlLCBVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyA9
IHRydWUgfTsKQEAgLTQyLDYgKzQzLDcgQEAgY2xhc3MgUG9zaXRpb24KIHB1YmxpYzoKICAgICBQ
b3NpdGlvbigpIDogbV9ub2RlKDApLCBtX29mZnNldCgwKSB7IH0KICAgICBQb3NpdGlvbihOb2Rl
KiwgaW50IG9mZnNldCk7CisgICAgUG9zaXRpb24oY29uc3QgUG9zaXRpb25JdGVyYXRvciYpOwog
CiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC04MSw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAgICAgCitmcmllbmQgY2xhc3MgUG9z
aXRpb25JdGVyYXRvcjsKIHByaXZhdGU6CiAgICAgaW50IHJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7
CiAKQEAgLTEwNiw2ICsxMDksNDEgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3Np
dGlvbiAmYQogUG9zaXRpb24gc3RhcnRQb3NpdGlvbihjb25zdCBSYW5nZSopOwogUG9zaXRpb24g
ZW5kUG9zaXRpb24oY29uc3QgUmFuZ2UqKTsKIAorY2xhc3MgUG9zaXRpb25JdGVyYXRvciB7Citw
dWJsaWM6CisgICAgUG9zaXRpb25JdGVyYXRvcigpCisgICAgICAgIDogbV9wYXJlbnQoMCkKKyAg
ICAgICAgLCBtX2NoaWxkKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQor
CisgICAgUG9zaXRpb25JdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgcG9zKQorICAgICAgICA6IG1f
cGFyZW50KHBvcy5ub2RlKCkpCisgICAgICAgICwgbV9jaGlsZChtX3BhcmVudC0+Y2hpbGROb2Rl
KHBvcy5vZmZzZXQoKSkpCisgICAgICAgICwgbV9vZmZzZXQobV9jaGlsZCA/IDAgOiBwb3Mub2Zm
c2V0KCkpCisgICAgeworICAgIH0KKworICAgIHZvaWQgaW5jcmVtZW50KCk7CisgICAgdm9pZCBk
ZWNyZW1lbnQoKTsKKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsg
fQorICAgIGludCBvZmZzZXRJbkxlYWZOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
KworICAgIGJvb2wgYXRTdGFydCgpIGNvbnN0OworICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKyAg
ICBib29sIGF0U3RhcnRPZk5vZGUoKSBjb25zdDsKKyAgICBib29sIGF0RW5kT2ZOb2RlKCkgY29u
c3Q7CisgICAgYm9vbCBpc0NhbmRpZGF0ZSgpIGNvbnN0OworCitmcmllbmQgY2xhc3MgUG9zaXRp
b247Citwcml2YXRlOgorICAgIE5vZGUqIG1fcGFyZW50OworICAgIE5vZGUqIG1fY2hpbGQ7Cisg
ICAgaW50IG1fb2Zmc2V0OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVm
IE5ERUJVRwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxOTY4MykKKysr
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw5
ICsxOTUsOSBAQCBib29sIGlzQ29udGVudEVkaXRhYmxlKE5vZGUqIG5vZGUpCiAKIFBvc2l0aW9u
IG5leHRDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIFBvc2l0aW9u
IHAgPSBwb3NpdGlvbjsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIHAgPSBwb3NpdGlvbjsKICAgICB3
aGlsZSAoIXAuYXRFbmQoKSkgewotICAgICAgICBwID0gcC5uZXh0KFVzaW5nQ29tcG9zZWRDaGFy
YWN0ZXJzKTsKKyAgICAgICAgcC5pbmNyZW1lbnQoKTsKICAgICAgICAgaWYgKHAuaXNDYW5kaWRh
dGUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwogICAgIH0KQEAgLTIxOCw5ICsyMTgsOSBAQCBQ
b3NpdGlvbiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShjCiAKIFBvc2l0aW9uIHByZXZp
b3VzQ2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBQb3NpdGlvbiBw
ID0gcG9zaXRpb247CisgICAgUG9zaXRpb25JdGVyYXRvciBwID0gcG9zaXRpb247CiAgICAgd2hp
bGUgKCFwLmF0U3RhcnQoKSkgewotICAgICAgICBwID0gcC5wcmV2aW91cyhVc2luZ0NvbXBvc2Vk
Q2hhcmFjdGVycyk7CisgICAgICAgIHAuZGVjcmVtZW50KCk7CiAgICAgICAgIGlmIChwLmlzQ2Fu
ZGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13228</attachid>
            <date>2007-02-18 12:38:28 -0800</date>
            <delta_ts>2007-02-19 08:03:44 -0800</delta_ts>
            <desc>Use an iterator that doesn&apos;t maintain child indices</desc>
            <filename>10735_r1.patch</filename>
            <type>text/plain</type>
            <size>26843</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDctMDItMTggIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzM1CisgICAgICAgICAg
Q2xpY2tpbmcgaW4gU1ZHIHJlc3VsdHMgY2F1c2VzIFdlYktpdCB0byBjb25zdW1lIDEwMCUgQ1BV
IGZvciBzZXZlcmFsIG1pbnV0ZXMKKworICAgICAgICBObyB0ZXN0IHNpbmNlIHRoZXJlIGlzIG5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCBQb3NpdGlvbkl0ZXJhdG9yLntjcHAsaH0uCisgICAgICAg
ICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlv
bik6IEFkZGVkIGNvbnZlcnRpbmcgY29uc3RydWN0b3IgZnJvbQorICAgICAgICBQb3NpdGlvbkl0
ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKTogQ2hhbmdlZCBh
c3NlcnQoKSB0byBBU1NFUlQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpuZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1N0cmVhbWVyKTogQ2hhbmdlZCB0aGUgYXJndW1l
bnQgdG8gYSBQb3NpdGlvbkl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVw
c3RyZWFtKTogQ2hhbmdlZCB0byB1c2UgUG9zaXRpb25JdGVyYXRvci4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQpOiBDaGFu
Z2VkCisgICAgICAgIGludG8gYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKTogRGl0dG8uCisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwOiBBZGRl
ZC4gQSBQb3NpdGlvbiBpdGVyYXRvciB3aXRoIGNvbnN0YW50LXRpbWUKKyAgICAgICAgaW5jcmVt
ZW50LCBkZWNyZW1lbnQsIGFuZCBzZXZlcmFsIHByZWRpY2F0ZXMgb24gdGhlIFBvc2l0aW9uIGl0
IGlzIGF0LgorICAgICAgICBDb252ZXJzaW9uIHRvL2Zyb20gUG9zaXRpb24gaXMgTyhuKSBpbiB0
aGUgb2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aW5jcmVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmRlY3JlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
SXRlcmF0b3I6OmF0U3RhcnRPZk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVy
YXRvcjo6YXRFbmRPZk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6
aXNDYW5kaWRhdGUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6UG9zaXRpb25JdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uSXRlcmF0b3I6Om9mZnNldEluTGVhZk5vZGUpOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENhbmRpZGF0ZSk6IENo
YW5nZWQgdG8gdXNlIFBvc2l0aW9uSXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91
c0NhbmRpZGF0ZSk6IENoYW5nZWQgdG8gdXNlIFBvc2l0aW9uSXRlcmF0b3IuCisKIDIwMDctMDIt
MTggIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEh5YXR0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5Njk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsOCBAQAogCQkxQ0ZDRUVENTBBQUND
NjY5MDAzNDg3NTAgLyogRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZS5oIGluIENvcHkg
R2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNG
Q0VFRDQwQUFDQzY1RDAwMzQ4NzUwIC8qIERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUu
aCAqLzsgfTsKIAkJMUNGQ0VFREYwQUFDQzZBMzAwMzQ4NzUwIC8qIERPTUhUTUxQcmVFbGVtZW50
UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUNGQ0VFREEwQUFDQzY4MzAwMzQ4NzUwIC8qIERPTUhUTUxQcmVFbGVt
ZW50UHJpdmF0ZS5oICovOyB9OwogCQkxQ0ZDRUVGQTBBQUNDN0E3MDAzNDg3NTAgLyogRE9NSFRN
TElucHV0RWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkNFRUY5MEFBQ0M3OTAwMDM0ODc1MCAvKiBE
T01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oICovOyB9OworCQkzNzkxOUMyMzBCN0QxODg2MDBB
NTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25J
dGVyYXRvci5jcHAgKi87IH07CisJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlv
bkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5
RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmggKi87IH07CiAJCTQ0OEEyOUMwMEE0NkQ5Q0IwMDMwNzU5RiAvKiBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk0NDhBRDI3QzBBNDgxMzdBMDAyM0QxNzkgLyogSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTMzNDksNiArMzM1MSw4IEBACiAJ
CTFDRkNFRUY5MEFBQ0M3OTAwMDM0ODc1MCAvKiBET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1MSW5wdXRFbGVtZW50UHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2
QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2
RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTM3OTE5QzIxMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8q
IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QUQyN0EwQTQ4
MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDAsNiArOTYwNCw4IEBA
CiAJCQkJMUEwRDU3MzgwQTVDNzgxMjAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaWRsICovLAog
CQkJCUJFOTFGQzhDMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5jcHAgKi8sCiAJCQkJQkU5
MUZDOEIwNjEzMzY2NjAwNUUzNzkwIC8qIFBvc2l0aW9uLmggKi8sCisJCQkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovLAorCQkJCTM3OTE5QzIyMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8sCiAJCQkJQThFQTdFQjUwQTE5
NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgKi8sCiAJCQkJQThFQTdF
QjQwQTE5NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oICovLAogCQkJCTkz
RUVDMUY1MDlDMjg3NzcwMEM1MTVEMSAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsICovLApA
QCAtMTExMjIsNiArMTExMjgsNyBAQAogCQkJCTkzM0ExNDMwMEI3RDE4ODYwMEE1M0ZGRCAvKiBU
ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzM0ExNEI5MEI3RDFENTIwMEE1M0ZGRCAv
KiBKU1RleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRERFNjNFRDUwQjdENDVBODAwMjI2
OTk4IC8qIERPTVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzc5MTlDMjQwQjdEMTg4
NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTI0ODEs
NiArMTI0ODgsNyBAQAogCQkJCTkzM0ExNEI4MEI3RDFENTIwMEE1M0ZGRCAvKiBKU1RleHRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NGQjNEMTBCN0VEMTBBMDA3MEMzMkQgLyogRHJh
Z0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAv
KiBEcmFnSW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzNzkxOUMyMzBCN0QxODg2MDBB
NTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAJKHJldmlzaW9uIDE5Njk2KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTcx
LDcgKzcyLDE0IEBAIHN0YXRpYyBOb2RlICpwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm8KIH0K
IAogUG9zaXRpb246OlBvc2l0aW9uKE5vZGUgKm5vZGUsIGludCBvZmZzZXQpIAotICAgIDogbV9u
b2RlKG5vZGUpLCBtX29mZnNldChvZmZzZXQpIAorICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBt
X29mZnNldChvZmZzZXQpIAoreworfQorCitQb3NpdGlvbjo6UG9zaXRpb24oY29uc3QgUG9zaXRp
b25JdGVyYXRvciYgaXQpCisgICAgOiBtX25vZGUoaXQubV9wYXJlbnQpCisgICAgLCBtX29mZnNl
dChpdC5tX2NoaWxkID8gaXQubV9jaGlsZC0+bm9kZUluZGV4KCkgOiAoaXQubV9wYXJlbnQtPmhh
c0NoaWxkTm9kZXMoKSA/IG1heERlZXBPZmZzZXQoaXQubV9wYXJlbnQpIDogaXQubV9vZmZzZXQp
KQogewogfQogCkBAIC0xMTMsNyArMTIxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3Vz
KEVVc2luZ0NvbXBvcwogICAgIAogICAgIGludCBvID0gb2Zmc2V0KCk7CiAgICAgLy8gRklYTUU6
IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0
aGlzIGVhcmxpZXIuCi0gICAgYXNzZXJ0KG8gPj0gMCk7CisgICAgQVNTRVJUKG8gPj0gMCk7CiAK
ICAgICBpZiAobyA+IDApIHsKICAgICAgICAgTm9kZSAqY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAt
IDEpOwpAQCAtMTQzLDcgKzE1MSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KEVVc2luZ0Nv
bXBvc2VkQ2gKICAgICAKICAgICBpbnQgbyA9IG9mZnNldCgpOwogICAgIC8vIEZJWE1FOiBOZWdh
dGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBl
YXJsaWVyLgotICAgIGFzc2VydChvID49IDApOworICAgIEFTU0VSVChvID49IDApOwogCiAgICAg
Tm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7CiAgICAgaWYgKGNoaWxkIHx8ICFuLT5oYXND
aGlsZE5vZGVzKCkgJiYgbyA8IG1heERlZXBPZmZzZXQobikpIHsKQEAgLTI2NSwzNCArMjczLDMx
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9zaXRpb24KIAogLy8gdXBzdHJl
YW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8gcmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBl
aXRoZXIgaW4gYQogLy8gdGV4dCBub2RlIG9yIGF0IGp1c3QgYmVmb3JlIGEgbm9uLXRleHQgbm9k
ZS4gIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhhdC4KLXN0YXRpYyBib29sIGlzU3RyZWFtZXIo
Y29uc3QgUG9zaXRpb24gJnBvcykKK3N0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3QgUG9zaXRp
b25JdGVyYXRvciYgcG9zKQogewotICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgaWYgKCFwb3Mu
bm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgaWYgKGlzQXRvbWlj
Tm9kZShwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJl
dHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKKyAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsK
IH0KIAogLy8gcC51cHN0cmVhbSgpIHJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiBw
b3NpdGlvbnMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIGFzIFAuCiBQb3Np
dGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogewotICAgIC8vIHN0YXJ0IGF0IGVxdWl2
YWxlbnQgZGVlcCBwb3NpdGlvbgotICAgIFBvc2l0aW9uIHN0YXJ0ID0gKnRoaXM7Ci0gICAgTm9k
ZSAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG5vZGUo
KTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAg
CiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxp
ZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2Rl
KTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9ICp0aGlzOwotICAgIFBvc2l0aW9uIGN1cnJl
bnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9k
ZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOworICAgIFBvc2l0
aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIE5vZGUqIG9yaWdpbmFs
Um9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoOyAhY3VycmVu
dFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKFVzaW5nQ29t
cG9zZWRDaGFyYWN0ZXJzKSkgewotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9IGN1cnJlbnRQ
b3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0
KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1l
bnQoKSkgeworICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkg
IT0gb3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDMsNyArMzA4LDcgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBs
YXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3Ig
aW52aXNpYmxlIG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGN1cnJlbnRO
b2RlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVu
dE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgIApAQCAtMzEyLDIyICszMTcsMTkgQEAgUG9zaXRpb24gUG9zaXRpb246
OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsK
ICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGxlYXZlIGEgYmxvY2sgZmxvdyBvciB0YWJsZSBl
bGVtZW50LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0ZSBhbmQgCi0g
ICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24sIGJ1dCB3
ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgY2FsbGluZyBwcmV2aW91cygpCi0gICAgICAgIC8v
IGJlY2VhdXNlIHByZXZpb3VzKCkgZm9yIGFuIG9mZnNldCAwIHBvc2l0aW9uIGNhbGxzIG5vZGVJ
bmRleCgpLCB3aGljaCBpcyBPKG4pLgotICAgICAgICAvLyBGSVhNRTogQXZvaWQgY2FsbGluZyBw
cmV2aW91cyBvbiBvdGhlciBvZmZzZXQgMCBwb3NpdGlvbnMuCi0gICAgICAgIGlmIChjdXJyZW50
Tm9kZSA9PSBlbmNsb3NpbmdCbG9jayhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE9mZnNldCA9PSAw
KQorICAgICAgICAvLyByZXR1cm4gbGFzdFZpc2libGUgb24gdGhlIG5leHQgaXRlcmF0aW9uLCBi
dXQgd2UgdGVybWluYXRlIGVhcmx5LgorICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gZW5jbG9z
aW5nQmxvY2soY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFJl
dHVybiBwb3NpdGlvbiBhZnRlciBicnMsIHRhYmxlcywgYW5kIG5vZGVzIHdoaWNoIGhhdmUgY29u
dGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250
ZW50KGN1cnJlbnROb2RlKSB8fCByZW5kZXJlci0+aXNCUigpIHx8IGlzVGFibGVFbGVtZW50KGN1
cnJlbnROb2RlKSkgewotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IG1heERlZXBPZmZzZXQo
Y3VycmVudE5vZGUpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPj0gbWF4T2Zmc2V0
KQotICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgbWF4T2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXhEZWVwT2Zmc2V0KGN1cnJlbnRO
b2RlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHJl
dHVybiBjdXJyZW50IHBvc2l0aW9uIGlmIGl0IGlzIGluIHJlbmRlcmVkIHRleHQKLSAgICAgICAg
aWYgKHJlbmRlcmVyLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRl
cmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSAm
JiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkgewog
ICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGZpcmVzIGluIGxheW91dCB0ZXN0cyBpbiB0aGUgY2FzZS10
cmFuc2Zvcm0uaHRtbCB0ZXN0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAvLyBvZiBhIG1peC11
cCBiZXR3ZWVuIG9mZnNldHMgaW4gdGhlIHRleHQgaW4gdGhlIERPTSB0cmVlIHdpdGggdGV4dCBp
biB0aGUKQEAgLTMzNywxMiArMzM5LDkgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkg
Y29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRl
cmVyLT5jYXJldE1heE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KGN1cnJlbnRPZmZzZXQgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLSAgICAgICAgICAgIFJl
bmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVuZGVy
ZXIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXIt
PmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgp
OworICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94
ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0
Qm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3RhcnQoKSAm
JiB0ZXh0T2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTM2MCwy
NiArMzU5LDI0IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAvLyBQLmRv
d25zdHJlYW0oKSByZXR1cm5zIHRoZSBlbmQgb2YgdGhlIHJhbmdlIG9mIHBvc2l0aW9ucyB0aGF0
IG1hcCB0byB0aGUgc2FtZSBWaXNpYmxlUG9zaXRpb24gYXMgUC4KIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBzdGFydCA9ICp0aGlzOwotICAg
IE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBu
b2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwog
CiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlm
aWVkIHBvc2l0aW9uCi0gICAgTm9kZSAqYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUp
OwotICAgIFBvc2l0aW9uIGxhc3RWaXNpYmxlID0gKnRoaXM7Ci0gICAgUG9zaXRpb24gY3VycmVu
dFBvcyA9IHN0YXJ0OworICAgIE5vZGUqIGJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2Rl
KTsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gKnRoaXM7CisgICAgUG9zaXRp
b25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgTm9kZSogb3JpZ2luYWxS
b290ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgZm9yICg7ICFjdXJyZW50
UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5leHQoVXNpbmdDb21wb3NlZENo
YXJhY3RlcnMpKSB7ICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0gY3VycmVudFBvcy5u
b2RlKCk7Ci0gICAgICAgIGludCBjdXJyZW50T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXQoKTsK
KyAgICBmb3IgKDsgIWN1cnJlbnRQb3MuYXRFbmQoKTsgY3VycmVudFBvcy5pbmNyZW1lbnQoKSkg
eyAgIAorICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0g
b3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gc3RvcCBiZWZv
cmUgZ29pbmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0
dXJuIHRoZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJl
bnROb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3Vy
cmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFz
VGFnTmFtZShib2R5VGFnKSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBEbyBub3QgZW50ZXIgYSBuZXcgZW5j
bG9zaW5nIGJsb2NrIGZsb3cgb3IgdGFibGUgZWxlbWVudCwgYW5kIGRvbid0IGxlYXZlIHRoZSBv
cmlnaW5hbCBvbmUuCkBAIC0zODcsNyArMzg0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25z
dHJlYW0oKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogCiAgICAgICAg
IC8vIHNraXAgcG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQotICAgICAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMzk3LDI1
ICszOTQsMjIgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogCiAgICAg
ICAgIC8vIFJldHVybiBwb3NpdGlvbiBiZWZvcmUgYnJzLCB0YWJsZXMsIGFuZCBub2RlcyB3aGlj
aCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVkaXRpbmdJ
Z25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgcmVuZGVyZXItPmlzQlIoKSB8fCBpc1RhYmxl
RWxlbWVudChjdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0IDw9
IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpIDw9IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWlu
T2Zmc2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpZiBpdCBpcyBpbiByZW5kZXJlZCB0ZXh0Ci0gICAg
ICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihy
ZW5kZXJlciktPmZpcnN0VGV4dEJveCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0
KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkp
IHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKLSAgICAgICAg
ICAgICAgICBhc3NlcnQoY3VycmVudE9mZnNldCA9PSAwKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoY3VycmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBQ
b3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY3VycmVudE9mZnNldCA8IDApCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJy
ZW50T2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpOwogCi0gICAgICAgICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVyKTsKLSAgICAgICAgICAgIGZv
ciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHRl
eHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlcik7CisgICAgICAg
ICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHRleHRPZmZzZXQgPj0gYm94LT5zdGFydCgpICYmIHRleHRPZmZzZXQgPD0gYm94LT5lbmQoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAgICAgICAgICAgICAgICAg
CkBAIC00MzEsNyArNDI1LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25z
dAogICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIH0KIAotc3RhdGljIGJvb2wgaGFzUmVuZGVyZWRO
b25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0ICpyZW5kZXJlcikK
K2Jvb2wgUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0g
cmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpvID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgbyAmJiBvICE9IHN0b3A7IG8gPSBv
LT5uZXh0SW5QcmVPcmRlcigpKQpAQCAtNDQxLDcgKzQzNSw3IEBAIHN0YXRpYyBib29sIGhhc1Jl
bmRlcmVkTm9uQW5vbnltb3VzRGVzY2UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBi
b29sIG5vZGVJc1VzZXJTZWxlY3ROb25lKE5vZGUqIG5vZGUpCitib29sIFBvc2l0aW9uOjpub2Rl
SXNVc2VyU2VsZWN0Tm9uZShOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlICYmIG5vZGUt
PnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlclNlbGVjdCgpID09
IFNFTEVDVF9OT05FOwogfQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiAxOTY5NikKKysrIFdlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBF
bGVtZW50OworY2xhc3MgUG9zaXRpb25JdGVyYXRvcjsKIGNsYXNzIFJhbmdlOwogCiBlbnVtIEVV
c2luZ0NvbXBvc2VkQ2hhcmFjdGVycyB7IE5vdFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gZmFs
c2UsIFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gdHJ1ZSB9OwpAQCAtNDIsNiArNDMsNyBAQCBj
bGFzcyBQb3NpdGlvbgogcHVibGljOgogICAgIFBvc2l0aW9uKCkgOiBtX25vZGUoMCksIG1fb2Zm
c2V0KDApIHsgfQogICAgIFBvc2l0aW9uKE5vZGUqLCBpbnQgb2Zmc2V0KTsKKyAgICBQb3NpdGlv
bihjb25zdCBQb3NpdGlvbkl0ZXJhdG9yJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTgx
LDYgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAj
ZW5kaWYKICAgICAKK2ZyaWVuZCBjbGFzcyBQb3NpdGlvbkl0ZXJhdG9yOwogcHJpdmF0ZToKICAg
ICBpbnQgcmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKIApAQCAtODgsNiArOTEsOCBAQCBwcml2YXRl
OgogCiAgICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkpIGNv
bnN0OwogICAgIFBvc2l0aW9uIG5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkpIGNvbnN0
OworICAgIHN0YXRpYyBib29sIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRo
SGVpZ2h0KFJlbmRlck9iamVjdCopOworICAgIHN0YXRpYyBib29sIG5vZGVJc1VzZXJTZWxlY3RO
b25lKE5vZGUqKTsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIGludCBtX29m
ZnNldDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgorCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKwordm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQoreworICAgIGlmICgh
bV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoaWxkKSB7CisgICAgICAg
IG1fcGFyZW50ID0gbV9jaGlsZDsKKyAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50LT5maXJzdENo
aWxkKCk7CisgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiBtX29mZnNldCA8IG1heERlZXBP
ZmZzZXQobV9wYXJlbnQpKQorICAgICAgICBtX29mZnNldCA9IG1fcGFyZW50LT5uZXh0T2Zmc2V0
KG1fb2Zmc2V0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50OworICAg
ICAgICBtX3BhcmVudCA9IG1fY2hpbGQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgbV9jaGlsZCA9
IG1fY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICB9Cit9
CisKK3ZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKK3sKKyAgICBpZiAoIW1fcGFy
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGlsZCkgeworICAgICAgICBtX3Bh
cmVudCA9IG1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICBpZiAobV9wYXJlbnQp
IHsKKyAgICAgICAgICAgIG1fY2hpbGQgPSAwOworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3Bh
cmVudC0+aGFzQ2hpbGROb2RlcygpID8gMCA6IG1heERlZXBPZmZzZXQobV9wYXJlbnQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jaGlsZCA9IG1fY2hpbGQtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgIG1fcGFyZW50ID0gbV9jaGlsZC0+cGFyZW50Tm9kZSgpOworICAgICAg
ICAgICAgbV9vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9vZmZzZXQpIHsKKyAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+cHJldmlv
dXNPZmZzZXQobV9vZmZzZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BhcmVudC0+
aGFzQ2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFyZW50LT5sYXN0
Q2hpbGQoKTsKKyAgICAgICAgICAgIGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkKKyAg
ICAgICAgICAgICAgICBtX29mZnNldCA9IG1heERlZXBPZmZzZXQobV9wYXJlbnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50OworICAgICAgICAgICAg
bV9wYXJlbnQgPSBtX3BhcmVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgbV9vZmZzZXQg
PSAwOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0U3Rh
cnQoKSBjb25zdAoreworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChtX3BhcmVudC0+cGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuICFtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpICYmICFtX29mZnNldCB8fCBtX2No
aWxkICYmICFtX2NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKK30KKworYm9vbCBQb3NpdGlvbkl0
ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG1fY2hpbGQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gIW1fcGFyZW50LT5wYXJlbnROb2RlKCkgJiYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVz
KCkgfHwgbV9vZmZzZXQgPj0gbWF4RGVlcE9mZnNldChtX3BhcmVudCkpOworfQorCitib29sIFBv
c2l0aW9uSXRlcmF0b3I6OmF0U3RhcnRPZk5vZGUoKSBjb25zdAoreworICAgIGlmICghbV9wYXJl
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9jaGlsZCkKKyAgICAgICAgcmV0
dXJuICFtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpICYmICFtX29mZnNldDsKKyAgICByZXR1cm4g
IW1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOworfQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6
OmF0RW5kT2ZOb2RlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAobV9jaGlsZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0ID49IG1heERlZXBPZmZz
ZXQobV9wYXJlbnQpOworfQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9wYXJlbnQtPnJlbmRlcmVyKCk7CisgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQorICAgICAgICByZXR1cm4gIW1fb2Zmc2V0
ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9wYXJlbnQtPnBhcmVudCgpKTsK
KworICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkpCisgICAgICAgIHJldHVybiBQb3NpdGlvbigq
dGhpcykuaW5SZW5kZXJlZFRleHQoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25l
KG1fcGFyZW50KTsKKworICAgIGlmIChpc1RhYmxlRWxlbWVudChtX3BhcmVudCkgfHwgZWRpdGlu
Z0lnbm9yZXNDb250ZW50KG1fcGFyZW50KSkKKyAgICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2Rl
KCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZSht
X3BhcmVudC0+cGFyZW50KCkpOworCisgICAgaWYgKCFtX3BhcmVudC0+aGFzVGFnTmFtZShodG1s
VGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVk
Tm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgorICAgICAgIChy
ZW5kZXJlci0+aGVpZ2h0KCkgfHwgbV9wYXJlbnQtPmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAg
ICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUobV9wYXJlbnQpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQb3NpdGlvbkl0ZXJhdG9yX2gKKyNkZWZpbmUgUG9zaXRpb25JdGVyYXRvcl9oCisK
KyNpbmNsdWRlICJQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBv
c2l0aW9uSXRlcmF0b3IgeworcHVibGljOgorICAgIFBvc2l0aW9uSXRlcmF0b3IoKQorICAgICAg
ICA6IG1fcGFyZW50KDApCisgICAgICAgICwgbV9jaGlsZCgwKQorICAgICAgICAsIG1fb2Zmc2V0
KDApCisgICAgeworICAgIH0KKworICAgIFBvc2l0aW9uSXRlcmF0b3IoY29uc3QgUG9zaXRpb24m
IHBvcykKKyAgICAgICAgOiBtX3BhcmVudChwb3Mubm9kZSgpKQorICAgICAgICAsIG1fY2hpbGQo
bV9wYXJlbnQtPmNoaWxkTm9kZShwb3Mub2Zmc2V0KCkpKQorICAgICAgICAsIG1fb2Zmc2V0KG1f
Y2hpbGQgPyAwIDogcG9zLm9mZnNldCgpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluY3Jl
bWVudCgpOworICAgIHZvaWQgZGVjcmVtZW50KCk7CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBpbnQgb2Zmc2V0SW5MZWFmTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisKKyAgICBib29sIGF0U3RhcnQoKSBjb25zdDsKKyAgICBib29s
IGF0RW5kKCkgY29uc3Q7CisgICAgYm9vbCBhdFN0YXJ0T2ZOb2RlKCkgY29uc3Q7CisgICAgYm9v
bCBhdEVuZE9mTm9kZSgpIGNvbnN0OworICAgIGJvb2wgaXNDYW5kaWRhdGUoKSBjb25zdDsKKwor
ZnJpZW5kIGNsYXNzIFBvc2l0aW9uOworcHJpdmF0ZToKKyAgICBOb2RlKiBtX3BhcmVudDsKKyAg
ICBOb2RlKiBtX2NoaWxkOworICAgIGludCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBvc2l0aW9uSXRlcmF0b3JfaApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxOTY5NikKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlJhbmdl
LmgiCkBAIC0xOTUsOSArMTk2LDkgQEAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZShOb2RlKiBub2Rl
KQogCiBQb3NpdGlvbiBuZXh0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsK
LSAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CisgICAgUG9zaXRpb25JdGVyYXRvciBwID0gcG9z
aXRpb247CiAgICAgd2hpbGUgKCFwLmF0RW5kKCkpIHsKLSAgICAgICAgcCA9IHAubmV4dChVc2lu
Z0NvbXBvc2VkQ2hhcmFjdGVycyk7CisgICAgICAgIHAuaW5jcmVtZW50KCk7CiAgICAgICAgIGlm
IChwLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICB9CkBAIC0yMTgs
OSArMjE5LDkgQEAgUG9zaXRpb24gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoYwogCiBQ
b3NpdGlvbiBwcmV2aW91c0NhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0g
ICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOworICAgIFBvc2l0aW9uSXRlcmF0b3IgcCA9IHBvc2l0
aW9uOwogICAgIHdoaWxlICghcC5hdFN0YXJ0KCkpIHsKLSAgICAgICAgcCA9IHAucHJldmlvdXMo
VXNpbmdDb21wb3NlZENoYXJhY3RlcnMpOworICAgICAgICBwLmRlY3JlbWVudCgpOwogICAgICAg
ICBpZiAocC5pc0NhbmRpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13237</attachid>
            <date>2007-02-19 08:03:44 -0800</date>
            <delta_ts>2007-02-19 11:56:24 -0800</delta_ts>
            <desc>Use an iterator that doesn&apos;t maintain child indices</desc>
            <filename>10735_r2.patch</filename>
            <type>text/plain</type>
            <size>26810</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDctMDItMTggIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzM1CisgICAgICAgICAg
Q2xpY2tpbmcgaW4gU1ZHIHJlc3VsdHMgY2F1c2VzIFdlYktpdCB0byBjb25zdW1lIDEwMCUgQ1BV
IGZvciBzZXZlcmFsIG1pbnV0ZXMKKworICAgICAgICBObyB0ZXN0IHNpbmNlIHRoZXJlIGlzIG5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCBQb3NpdGlvbkl0ZXJhdG9yLntjcHAsaH0uCisgICAgICAg
ICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlv
bik6IEFkZGVkIGNvbnZlcnRpbmcgY29uc3RydWN0b3IgZnJvbQorICAgICAgICBQb3NpdGlvbkl0
ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKTogQ2hhbmdlZCBh
c3NlcnQoKSB0byBBU1NFUlQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpuZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1N0cmVhbWVyKTogQ2hhbmdlZCB0aGUgYXJndW1l
bnQgdG8gYSBQb3NpdGlvbkl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVw
c3RyZWFtKTogQ2hhbmdlZCB0byB1c2UgUG9zaXRpb25JdGVyYXRvci4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQpOiBDaGFu
Z2VkCisgICAgICAgIGludG8gYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKTogRGl0dG8uCisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwOiBBZGRl
ZC4gQSBQb3NpdGlvbiBpdGVyYXRvciB3aXRoIGNvbnN0YW50LXRpbWUKKyAgICAgICAgaW5jcmVt
ZW50LCBkZWNyZW1lbnQsIGFuZCBzZXZlcmFsIHByZWRpY2F0ZXMgb24gdGhlIFBvc2l0aW9uIGl0
IGlzIGF0LgorICAgICAgICBDb252ZXJzaW9uIHRvL2Zyb20gUG9zaXRpb24gaXMgTyhuKSBpbiB0
aGUgb2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aW5jcmVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmRlY3JlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
SXRlcmF0b3I6OmF0U3RhcnRPZk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVy
YXRvcjo6YXRFbmRPZk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6
aXNDYW5kaWRhdGUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6UG9zaXRpb25JdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uSXRlcmF0b3I6Om9mZnNldEluTGVhZk5vZGUpOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENhbmRpZGF0ZSk6IENo
YW5nZWQgdG8gdXNlIFBvc2l0aW9uSXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91
c0NhbmRpZGF0ZSk6IENoYW5nZWQgdG8gdXNlIFBvc2l0aW9uSXRlcmF0b3IuCisKIDIwMDctMDIt
MTggIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEh5YXR0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5Njk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsOCBAQAogCQkxQ0ZDRUVENTBBQUND
NjY5MDAzNDg3NTAgLyogRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZS5oIGluIENvcHkg
R2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNG
Q0VFRDQwQUFDQzY1RDAwMzQ4NzUwIC8qIERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUu
aCAqLzsgfTsKIAkJMUNGQ0VFREYwQUFDQzZBMzAwMzQ4NzUwIC8qIERPTUhUTUxQcmVFbGVtZW50
UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUNGQ0VFREEwQUFDQzY4MzAwMzQ4NzUwIC8qIERPTUhUTUxQcmVFbGVt
ZW50UHJpdmF0ZS5oICovOyB9OwogCQkxQ0ZDRUVGQTBBQUNDN0E3MDAzNDg3NTAgLyogRE9NSFRN
TElucHV0RWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkNFRUY5MEFBQ0M3OTAwMDM0ODc1MCAvKiBE
T01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oICovOyB9OworCQkzNzkxOUMyMzBCN0QxODg2MDBB
NTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25J
dGVyYXRvci5jcHAgKi87IH07CisJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlv
bkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5
RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmggKi87IH07CiAJCTQ0OEEyOUMwMEE0NkQ5Q0IwMDMwNzU5RiAvKiBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk0NDhBRDI3QzBBNDgxMzdBMDAyM0QxNzkgLyogSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTMzNDksNiArMzM1MSw4IEBACiAJ
CTFDRkNFRUY5MEFBQ0M3OTAwMDM0ODc1MCAvKiBET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1MSW5wdXRFbGVtZW50UHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2
QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2
RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTM3OTE5QzIxMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8q
IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QUQyN0EwQTQ4
MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDAsNiArOTYwNCw4IEBA
CiAJCQkJMUEwRDU3MzgwQTVDNzgxMjAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaWRsICovLAog
CQkJCUJFOTFGQzhDMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5jcHAgKi8sCiAJCQkJQkU5
MUZDOEIwNjEzMzY2NjAwNUUzNzkwIC8qIFBvc2l0aW9uLmggKi8sCisJCQkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovLAorCQkJCTM3OTE5QzIyMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8sCiAJCQkJQThFQTdFQjUwQTE5
NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgKi8sCiAJCQkJQThFQTdF
QjQwQTE5NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oICovLAogCQkJCTkz
RUVDMUY1MDlDMjg3NzcwMEM1MTVEMSAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsICovLApA
QCAtMTExMjIsNiArMTExMjgsNyBAQAogCQkJCTkzM0ExNDMwMEI3RDE4ODYwMEE1M0ZGRCAvKiBU
ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzM0ExNEI5MEI3RDFENTIwMEE1M0ZGRCAv
KiBKU1RleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRERFNjNFRDUwQjdENDVBODAwMjI2
OTk4IC8qIERPTVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzc5MTlDMjQwQjdEMTg4
NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTI0ODEs
NiArMTI0ODgsNyBAQAogCQkJCTkzM0ExNEI4MEI3RDFENTIwMEE1M0ZGRCAvKiBKU1RleHRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NGQjNEMTBCN0VEMTBBMDA3MEMzMkQgLyogRHJh
Z0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAv
KiBEcmFnSW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzNzkxOUMyMzBCN0QxODg2MDBB
NTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAJKHJldmlzaW9uIDE5Njk2KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTcx
LDcgKzcyLDE0IEBAIHN0YXRpYyBOb2RlICpwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm8KIH0K
IAogUG9zaXRpb246OlBvc2l0aW9uKE5vZGUgKm5vZGUsIGludCBvZmZzZXQpIAotICAgIDogbV9u
b2RlKG5vZGUpLCBtX29mZnNldChvZmZzZXQpIAorICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBt
X29mZnNldChvZmZzZXQpIAoreworfQorCitQb3NpdGlvbjo6UG9zaXRpb24oY29uc3QgUG9zaXRp
b25JdGVyYXRvciYgaXQpCisgICAgOiBtX25vZGUoaXQubV9wYXJlbnQpCisgICAgLCBtX29mZnNl
dChpdC5tX2NoaWxkID8gaXQubV9jaGlsZC0+bm9kZUluZGV4KCkgOiAoaXQubV9wYXJlbnQtPmhh
c0NoaWxkTm9kZXMoKSA/IG1heERlZXBPZmZzZXQoaXQubV9wYXJlbnQpIDogaXQubV9vZmZzZXQp
KQogewogfQogCkBAIC0xMTMsNyArMTIxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3Vz
KEVVc2luZ0NvbXBvcwogICAgIAogICAgIGludCBvID0gb2Zmc2V0KCk7CiAgICAgLy8gRklYTUU6
IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0
aGlzIGVhcmxpZXIuCi0gICAgYXNzZXJ0KG8gPj0gMCk7CisgICAgQVNTRVJUKG8gPj0gMCk7CiAK
ICAgICBpZiAobyA+IDApIHsKICAgICAgICAgTm9kZSAqY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAt
IDEpOwpAQCAtMTQzLDcgKzE1MSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KEVVc2luZ0Nv
bXBvc2VkQ2gKICAgICAKICAgICBpbnQgbyA9IG9mZnNldCgpOwogICAgIC8vIEZJWE1FOiBOZWdh
dGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBl
YXJsaWVyLgotICAgIGFzc2VydChvID49IDApOworICAgIEFTU0VSVChvID49IDApOwogCiAgICAg
Tm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7CiAgICAgaWYgKGNoaWxkIHx8ICFuLT5oYXND
aGlsZE5vZGVzKCkgJiYgbyA8IG1heERlZXBPZmZzZXQobikpIHsKQEAgLTI2NSwzNCArMjczLDMx
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9zaXRpb24KIAogLy8gdXBzdHJl
YW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8gcmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBl
aXRoZXIgaW4gYQogLy8gdGV4dCBub2RlIG9yIGF0IGp1c3QgYmVmb3JlIGEgbm9uLXRleHQgbm9k
ZS4gIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhhdC4KLXN0YXRpYyBib29sIGlzU3RyZWFtZXIo
Y29uc3QgUG9zaXRpb24gJnBvcykKK3N0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3QgUG9zaXRp
b25JdGVyYXRvciYgcG9zKQogewotICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgaWYgKCFwb3Mu
bm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgaWYgKGlzQXRvbWlj
Tm9kZShwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJl
dHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKKyAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsK
IH0KIAogLy8gcC51cHN0cmVhbSgpIHJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiBw
b3NpdGlvbnMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIGFzIFAuCiBQb3Np
dGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogewotICAgIC8vIHN0YXJ0IGF0IGVxdWl2
YWxlbnQgZGVlcCBwb3NpdGlvbgotICAgIFBvc2l0aW9uIHN0YXJ0ID0gKnRoaXM7Ci0gICAgTm9k
ZSAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG5vZGUo
KTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAg
CiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxp
ZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2Rl
KTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9ICp0aGlzOwotICAgIFBvc2l0aW9uIGN1cnJl
bnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9k
ZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOworICAgIFBvc2l0
aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIE5vZGUqIG9yaWdpbmFs
Um9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoOyAhY3VycmVu
dFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKFVzaW5nQ29t
cG9zZWRDaGFyYWN0ZXJzKSkgewotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9IGN1cnJlbnRQ
b3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0
KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1l
bnQoKSkgeworICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkg
IT0gb3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDMsNyArMzA4LDcgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBs
YXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3Ig
aW52aXNpYmxlIG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGN1cnJlbnRO
b2RlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVu
dE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgIApAQCAtMzEyLDIyICszMTcsMTkgQEAgUG9zaXRpb24gUG9zaXRpb246
OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsK
ICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGxlYXZlIGEgYmxvY2sgZmxvdyBvciB0YWJsZSBl
bGVtZW50LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0ZSBhbmQgCi0g
ICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24sIGJ1dCB3
ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgY2FsbGluZyBwcmV2aW91cygpCi0gICAgICAgIC8v
IGJlY2VhdXNlIHByZXZpb3VzKCkgZm9yIGFuIG9mZnNldCAwIHBvc2l0aW9uIGNhbGxzIG5vZGVJ
bmRleCgpLCB3aGljaCBpcyBPKG4pLgotICAgICAgICAvLyBGSVhNRTogQXZvaWQgY2FsbGluZyBw
cmV2aW91cyBvbiBvdGhlciBvZmZzZXQgMCBwb3NpdGlvbnMuCi0gICAgICAgIGlmIChjdXJyZW50
Tm9kZSA9PSBlbmNsb3NpbmdCbG9jayhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE9mZnNldCA9PSAw
KQorICAgICAgICAvLyByZXR1cm4gbGFzdFZpc2libGUgb24gdGhlIG5leHQgaXRlcmF0aW9uLCBi
dXQgd2UgdGVybWluYXRlIGVhcmx5LgorICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gZW5jbG9z
aW5nQmxvY2soY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFJl
dHVybiBwb3NpdGlvbiBhZnRlciBicnMsIHRhYmxlcywgYW5kIG5vZGVzIHdoaWNoIGhhdmUgY29u
dGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250
ZW50KGN1cnJlbnROb2RlKSB8fCByZW5kZXJlci0+aXNCUigpIHx8IGlzVGFibGVFbGVtZW50KGN1
cnJlbnROb2RlKSkgewotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IG1heERlZXBPZmZzZXQo
Y3VycmVudE5vZGUpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPj0gbWF4T2Zmc2V0
KQotICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgbWF4T2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXhEZWVwT2Zmc2V0KGN1cnJlbnRO
b2RlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHJl
dHVybiBjdXJyZW50IHBvc2l0aW9uIGlmIGl0IGlzIGluIHJlbmRlcmVkIHRleHQKLSAgICAgICAg
aWYgKHJlbmRlcmVyLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRl
cmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSAm
JiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkgewog
ICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGZpcmVzIGluIGxheW91dCB0ZXN0cyBpbiB0aGUgY2FzZS10
cmFuc2Zvcm0uaHRtbCB0ZXN0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAvLyBvZiBhIG1peC11
cCBiZXR3ZWVuIG9mZnNldHMgaW4gdGhlIHRleHQgaW4gdGhlIERPTSB0cmVlIHdpdGggdGV4dCBp
biB0aGUKQEAgLTMzNywxMiArMzM5LDkgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkg
Y29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRl
cmVyLT5jYXJldE1heE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KGN1cnJlbnRPZmZzZXQgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLSAgICAgICAgICAgIFJl
bmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVuZGVy
ZXIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXIt
PmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgp
OworICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94
ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0
Qm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IGJveC0+c3RhcnQoKSAm
JiB0ZXh0T2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTM2MCwy
NiArMzU5LDI0IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAvLyBQLmRv
d25zdHJlYW0oKSByZXR1cm5zIHRoZSBlbmQgb2YgdGhlIHJhbmdlIG9mIHBvc2l0aW9ucyB0aGF0
IG1hcCB0byB0aGUgc2FtZSBWaXNpYmxlUG9zaXRpb24gYXMgUC4KIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBzdGFydCA9ICp0aGlzOwotICAg
IE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBu
b2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwog
CiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlm
aWVkIHBvc2l0aW9uCi0gICAgTm9kZSAqYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUp
OwotICAgIFBvc2l0aW9uIGxhc3RWaXNpYmxlID0gKnRoaXM7Ci0gICAgUG9zaXRpb24gY3VycmVu
dFBvcyA9IHN0YXJ0OworICAgIE5vZGUqIGJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2Rl
KTsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gKnRoaXM7CisgICAgUG9zaXRp
b25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgTm9kZSogb3JpZ2luYWxS
b290ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgZm9yICg7ICFjdXJyZW50
UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5leHQoVXNpbmdDb21wb3NlZENo
YXJhY3RlcnMpKSB7ICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0gY3VycmVudFBvcy5u
b2RlKCk7Ci0gICAgICAgIGludCBjdXJyZW50T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXQoKTsK
KyAgICBmb3IgKDsgIWN1cnJlbnRQb3MuYXRFbmQoKTsgY3VycmVudFBvcy5pbmNyZW1lbnQoKSkg
eyAgIAorICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0g
b3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gc3RvcCBiZWZv
cmUgZ29pbmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0
dXJuIHRoZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJl
bnROb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3Vy
cmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFz
VGFnTmFtZShib2R5VGFnKSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBEbyBub3QgZW50ZXIgYSBuZXcgZW5j
bG9zaW5nIGJsb2NrIGZsb3cgb3IgdGFibGUgZWxlbWVudCwgYW5kIGRvbid0IGxlYXZlIHRoZSBv
cmlnaW5hbCBvbmUuCkBAIC0zODcsNyArMzg0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25z
dHJlYW0oKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogCiAgICAgICAg
IC8vIHNraXAgcG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQotICAgICAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CisgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMzk3LDI1
ICszOTQsMjIgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogCiAgICAg
ICAgIC8vIFJldHVybiBwb3NpdGlvbiBiZWZvcmUgYnJzLCB0YWJsZXMsIGFuZCBub2RlcyB3aGlj
aCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVkaXRpbmdJ
Z25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgcmVuZGVyZXItPmlzQlIoKSB8fCBpc1RhYmxl
RWxlbWVudChjdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0IDw9
IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpIDw9IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWlu
T2Zmc2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpZiBpdCBpcyBpbiByZW5kZXJlZCB0ZXh0Ci0gICAg
ICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihy
ZW5kZXJlciktPmZpcnN0VGV4dEJveCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0
KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkp
IHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKLSAgICAgICAg
ICAgICAgICBhc3NlcnQoY3VycmVudE9mZnNldCA9PSAwKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoY3VycmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBQ
b3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY3VycmVudE9mZnNldCA8IDApCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJy
ZW50T2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpOwogCi0gICAgICAgICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVyKTsKLSAgICAgICAgICAgIGZv
ciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHRl
eHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlcik7CisgICAgICAg
ICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHRleHRPZmZzZXQgPj0gYm94LT5zdGFydCgpICYmIHRleHRPZmZzZXQgPD0gYm94LT5lbmQoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAgICAgICAgICAgICAgICAg
CkBAIC00MzEsNyArNDI1LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25z
dAogICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIH0KIAotc3RhdGljIGJvb2wgaGFzUmVuZGVyZWRO
b25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0ICpyZW5kZXJlcikK
K2Jvb2wgUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0g
cmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwogICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpvID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgbyAmJiBvICE9IHN0b3A7IG8gPSBv
LT5uZXh0SW5QcmVPcmRlcigpKQpAQCAtNDQxLDcgKzQzNSw3IEBAIHN0YXRpYyBib29sIGhhc1Jl
bmRlcmVkTm9uQW5vbnltb3VzRGVzY2UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBi
b29sIG5vZGVJc1VzZXJTZWxlY3ROb25lKE5vZGUqIG5vZGUpCitib29sIFBvc2l0aW9uOjpub2Rl
SXNVc2VyU2VsZWN0Tm9uZShOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlICYmIG5vZGUt
PnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlclNlbGVjdCgpID09
IFNFTEVDVF9OT05FOwogfQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiAxOTY5NikKKysrIFdlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBF
bGVtZW50OworY2xhc3MgUG9zaXRpb25JdGVyYXRvcjsKIGNsYXNzIFJhbmdlOwogCiBlbnVtIEVV
c2luZ0NvbXBvc2VkQ2hhcmFjdGVycyB7IE5vdFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gZmFs
c2UsIFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gdHJ1ZSB9OwpAQCAtNDIsNiArNDMsNyBAQCBj
bGFzcyBQb3NpdGlvbgogcHVibGljOgogICAgIFBvc2l0aW9uKCkgOiBtX25vZGUoMCksIG1fb2Zm
c2V0KDApIHsgfQogICAgIFBvc2l0aW9uKE5vZGUqLCBpbnQgb2Zmc2V0KTsKKyAgICBQb3NpdGlv
bihjb25zdCBQb3NpdGlvbkl0ZXJhdG9yJik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTgx
LDYgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAj
ZW5kaWYKICAgICAKK2ZyaWVuZCBjbGFzcyBQb3NpdGlvbkl0ZXJhdG9yOwogcHJpdmF0ZToKICAg
ICBpbnQgcmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKIApAQCAtODgsNiArOTEsOCBAQCBwcml2YXRl
OgogCiAgICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkpIGNv
bnN0OwogICAgIFBvc2l0aW9uIG5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkpIGNvbnN0
OworICAgIHN0YXRpYyBib29sIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRo
SGVpZ2h0KFJlbmRlck9iamVjdCopOworICAgIHN0YXRpYyBib29sIG5vZGVJc1VzZXJTZWxlY3RO
b25lKE5vZGUqKTsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIGludCBtX29m
ZnNldDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgorCisjaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKwordm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQoreworICAgIGlmICghbV9w
YXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoaWxkKSB7CisgICAgICAgIG1f
cGFyZW50ID0gbV9jaGlsZDsKKyAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50LT5maXJzdENoaWxk
KCk7CisgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiBtX29mZnNldCA8IG1heERlZXBPZmZz
ZXQobV9wYXJlbnQpKQorICAgICAgICBtX29mZnNldCA9IG1fcGFyZW50LT5uZXh0T2Zmc2V0KG1f
b2Zmc2V0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50OworICAgICAg
ICBtX3BhcmVudCA9IG1fY2hpbGQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgbV9jaGlsZCA9IG1f
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fb2Zmc2V0ID0gMDsKKyAgICB9Cit9CisK
K3ZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKK3sKKyAgICBpZiAoIW1fcGFyZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGlsZCkgeworICAgICAgICBtX3BhcmVu
dCA9IG1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICBpZiAobV9wYXJlbnQpIHsK
KyAgICAgICAgICAgIG1fY2hpbGQgPSAwOworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVu
dC0+aGFzQ2hpbGROb2RlcygpID8gMCA6IG1heERlZXBPZmZzZXQobV9wYXJlbnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9jaGlsZCA9IG1fY2hpbGQtPnBhcmVudE5vZGUoKTsK
KyAgICAgICAgICAgIG1fcGFyZW50ID0gbV9jaGlsZC0+cGFyZW50Tm9kZSgpOworICAgICAgICAg
ICAgbV9vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9vZmZzZXQpIHsKKyAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+cHJldmlvdXNP
ZmZzZXQobV9vZmZzZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BhcmVudC0+aGFz
Q2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFyZW50LT5sYXN0Q2hp
bGQoKTsKKyAgICAgICAgICAgIGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkKKyAgICAg
ICAgICAgICAgICBtX29mZnNldCA9IG1heERlZXBPZmZzZXQobV9wYXJlbnQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9jaGlsZCA9IG1fcGFyZW50OworICAgICAgICAgICAgbV9w
YXJlbnQgPSBtX3BhcmVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0U3RhcnQoKSBjb25zdAoreworICAgIGlmICghbV9wYXJl
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3BhcmVudC0+cGFyZW50Tm9kZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX3BhcmVudC0+aGFzQ2hpbGRO
b2RlcygpICYmICFtX29mZnNldCB8fCBtX2NoaWxkICYmICFtX2NoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKTsKK30KKworYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fY2hpbGQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1fcGFyZW50LT5wYXJlbnROb2RlKCkg
JiYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgbV9vZmZzZXQgPj0gbWF4RGVlcE9mZnNl
dChtX3BhcmVudCkpOworfQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0U3RhcnRPZk5vZGUo
KSBjb25zdAoreworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmICghbV9jaGlsZCkKKyAgICAgICAgcmV0dXJuICFtX3BhcmVudC0+aGFzQ2hpbGROb2Rlcygp
ICYmICFtX29mZnNldDsKKyAgICByZXR1cm4gIW1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOwor
fQorCitib29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kT2ZOb2RlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9jaGlsZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3BhcmVudC0+aGFzQ2hpbGROb2Rlcygp
IHx8IG1fb2Zmc2V0ID49IG1heERlZXBPZmZzZXQobV9wYXJlbnQpOworfQorCitib29sIFBvc2l0
aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9w
YXJlbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChyZW5kZXJlci0+aXNCUigp
KQorICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUobV9wYXJlbnQtPnBhcmVudCgpKTsKKworICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkp
CisgICAgICAgIHJldHVybiBQb3NpdGlvbigqdGhpcykuaW5SZW5kZXJlZFRleHQoKSAmJiAhUG9z
aXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fcGFyZW50KTsKKworICAgIGlmIChpc1RhYmxl
RWxlbWVudChtX3BhcmVudCkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fcGFyZW50KSkKKyAg
ICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2RlKCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0
aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudC0+cGFyZW50KCkpOworCisgICAgaWYg
KCFtX3BhcmVudC0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3co
KSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KHJlbmRlcmVyKSAmJgorICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkgfHwgbV9wYXJlbnQt
Pmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYm
ICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9wYXJlbnQpOworICAgIAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9k
b20vUG9zaXRpb25JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3Iu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb3NpdGlvbkl0ZXJhdG9yX2gKKyNkZWZp
bmUgUG9zaXRpb25JdGVyYXRvcl9oCisKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBvc2l0aW9uSXRlcmF0b3IgeworcHVibGljOgorICAgIFBv
c2l0aW9uSXRlcmF0b3IoKQorICAgICAgICA6IG1fcGFyZW50KDApCisgICAgICAgICwgbV9jaGls
ZCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKworICAgIFBvc2l0aW9u
SXRlcmF0b3IoY29uc3QgUG9zaXRpb24mIHBvcykKKyAgICAgICAgOiBtX3BhcmVudChwb3Mubm9k
ZSgpKQorICAgICAgICAsIG1fY2hpbGQobV9wYXJlbnQtPmNoaWxkTm9kZShwb3Mub2Zmc2V0KCkp
KQorICAgICAgICAsIG1fb2Zmc2V0KG1fY2hpbGQgPyAwIDogcG9zLm9mZnNldCgpKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpOworICAgIHZvaWQgZGVjcmVtZW50KCk7CisK
KyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBpbnQgb2Zm
c2V0SW5MZWFmTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKKyAgICBib29sIGF0
U3RhcnQoKSBjb25zdDsKKyAgICBib29sIGF0RW5kKCkgY29uc3Q7CisgICAgYm9vbCBhdFN0YXJ0
T2ZOb2RlKCkgY29uc3Q7CisgICAgYm9vbCBhdEVuZE9mTm9kZSgpIGNvbnN0OworICAgIGJvb2wg
aXNDYW5kaWRhdGUoKSBjb25zdDsKKworZnJpZW5kIGNsYXNzIFBvc2l0aW9uOworcHJpdmF0ZToK
KyAgICBOb2RlKiBtX3BhcmVudDsKKyAgICBOb2RlKiBtX2NoaWxkOworICAgIGludCBtX29mZnNl
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBvc2l0aW9uSXRl
cmF0b3JfaApJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxOTY5NikKKysr
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnRlcmNo
YW5nZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVz
c2lvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCkBAIC0xOTUsOSArMTk2LDkgQEAgYm9vbCBpc0Nv
bnRlbnRFZGl0YWJsZShOb2RlKiBub2RlKQogCiBQb3NpdGlvbiBuZXh0Q2FuZGlkYXRlKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CisgICAg
UG9zaXRpb25JdGVyYXRvciBwID0gcG9zaXRpb247CiAgICAgd2hpbGUgKCFwLmF0RW5kKCkpIHsK
LSAgICAgICAgcCA9IHAubmV4dChVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyk7CisgICAgICAgIHAu
aW5jcmVtZW50KCk7CiAgICAgICAgIGlmIChwLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gcDsKICAgICB9CkBAIC0yMTgsOSArMjE5LDkgQEAgUG9zaXRpb24gbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUoYwogCiBQb3NpdGlvbiBwcmV2aW91c0NhbmRpZGF0ZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOworICAgIFBv
c2l0aW9uSXRlcmF0b3IgcCA9IHBvc2l0aW9uOwogICAgIHdoaWxlICghcC5hdFN0YXJ0KCkpIHsK
LSAgICAgICAgcCA9IHAucHJldmlvdXMoVXNpbmdDb21wb3NlZENoYXJhY3RlcnMpOworICAgICAg
ICBwLmRlY3JlbWVudCgpOwogICAgICAgICBpZiAocC5pc0NhbmRpZGF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHA7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13243</attachid>
            <date>2007-02-19 11:56:24 -0800</date>
            <delta_ts>2007-02-20 00:38:48 -0800</delta_ts>
            <desc>Use an iterator that doesn&apos;t maintain child indices</desc>
            <filename>10735_r3.patch</filename>
            <type>text/plain</type>
            <size>27185</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTcwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDctMDItMTkgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzM1CisgICAgICAgICAg
Q2xpY2tpbmcgaW4gU1ZHIHJlc3VsdHMgY2F1c2VzIFdlYktpdCB0byBjb25zdW1lIDEwMCUgQ1BV
IGZvciBzZXZlcmFsIG1pbnV0ZXMKKworICAgICAgICBObyB0ZXN0IHNpbmNlIHRoZXJlIGlzIG5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCBQb3NpdGlvbkl0ZXJhdG9yLntjcHAsaH0uCisgICAgICAg
ICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlv
bik6IEFkZGVkIGNvbnZlcnRpbmcgY29uc3RydWN0b3IgZnJvbQorICAgICAgICBQb3NpdGlvbkl0
ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKTogQ2hhbmdlZCBh
c3NlcnQoKSB0byBBU1NFUlQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpuZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1N0cmVhbWVyKTogQ2hhbmdlZCB0aGUgYXJndW1l
bnQgdG8gYSBQb3NpdGlvbkl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVw
c3RyZWFtKTogQ2hhbmdlZCB0byB1c2UgUG9zaXRpb25JdGVyYXRvci4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6aW5SZW5kZXJlZFRleHQpOiBNYWRlIHB1YmxpYy4KKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodCk6IENo
YW5nZWQKKyAgICAgICAgaW50byBhIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUpOiBEaXR0by4KKyAgICAgICAg
KiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6IEFk
ZGVkLiBBIFBvc2l0aW9uIGl0ZXJhdG9yIHdpdGggY29uc3RhbnQtdGltZQorICAgICAgICBpbmNy
ZW1lbnQsIGRlY3JlbWVudCwgYW5kIHNldmVyYWwgcHJlZGljYXRlcyBvbiB0aGUgUG9zaXRpb24g
aXQgaXMgYXQuCisgICAgICAgIENvbnZlcnNpb24gdG8vZnJvbSBQb3NpdGlvbiBpcyBPKG4pIGlu
IHRoZSBvZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b25JdGVyYXRvcjo6YXRTdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0
ZXJhdG9yOjphdEVuZE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9y
Ojppc0NhbmRpZGF0ZSk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpQb3NpdGlvbkl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6Om5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6b2Zmc2V0SW5MZWFmTm9kZSk6CisgICAgICAgICogZWRp
dGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q2FuZGlkYXRlKTog
Q2hhbmdlZCB0byB1c2UgUG9zaXRpb25JdGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OnByZXZp
b3VzQ2FuZGlkYXRlKTogQ2hhbmdlZCB0byB1c2UgUG9zaXRpb25JdGVyYXRvci4KKwogMjAwNy0w
Mi0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTWl0ei4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTcwNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1LDggQEAKIAkJMUNGQ0VFRDUw
QUFDQzY2OTAwMzQ4NzUwIC8qIERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDRkNFRUQ0MEFBQ0M2NUQwMDM0ODc1MCAvKiBET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2
YXRlLmggKi87IH07CiAJCTFDRkNFRURGMEFBQ0M2QTMwMDM0ODc1MCAvKiBET01IVE1MUHJlRWxl
bWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkNFRURBMEFBQ0M2ODMwMDM0ODc1MCAvKiBET01IVE1MUHJl
RWxlbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJMUNGQ0VFRkEwQUFDQzdBNzAwMzQ4NzUwIC8qIERP
TUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZDRUVGOTBBQUNDNzkwMDAzNDg3NTAg
LyogRE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCAqLzsgfTsKKwkJMzc5MTlDMjMwQjdEMTg4
NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MTlDMjEwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0
aW9uSXRlcmF0b3IuY3BwICovOyB9OworCQkzNzkxOUMyNDBCN0QxODg2MDBBNTY5OTggLyogUG9z
aXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAz
MDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5oICovOyB9OwogCQk0NDhBMjlDMDBBNDZEOUNCMDAzMDc1OUYg
LyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8q
IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CkBAIC0zMzUyLDYgKzMzNTQsOCBA
QAogCQkxQ0ZDRUVGOTBBQUNDNzkwMDAzNDg3NTAgLyogRE9NSFRNTElucHV0RWxlbWVudFByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTElucHV0RWxlbWVu
dFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkz
NzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5Mzcw
MDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQkzNzkxOUMyMTBC
N0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5
RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEFEMjdB
MEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlv
bkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjAxLDYgKzk2MDUs
OCBAQAogCQkJCTFBMEQ1NzM4MEE1Qzc4MTIwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmlkbCAq
LywKIAkJCQlCRTkxRkM4QzA2MTMzNjY2MDA1RTM3OTAgLyogUG9zaXRpb24uY3BwICovLAogCQkJ
CUJFOTFGQzhCMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5oICovLAorCQkJCTM3OTE5QzIx
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLywKKwkJCQkzNzkxOUMy
MjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovLAogCQkJCUE4RUE3RUI1
MEExOTQ1RDAwMEE4RUY1RiAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwICovLAogCQkJCUE4
RUE3RUI0MEExOTQ1RDAwMEE4RUY1RiAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCAqLywKIAkJ
CQk5M0VFQzFGNTA5QzI4Nzc3MDBDNTE1RDEgLyogUHJvY2Vzc2luZ0luc3RydWN0aW9uLmlkbCAq
LywKQEAgLTExMTIyLDYgKzExMTI4LDcgQEAKIAkJCQk5MzNBMTQzMDBCN0QxODg2MDBBNTNGRkQg
LyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzNBMTRCOTBCN0QxRDUyMDBBNTNG
RkQgLyogSlNUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCURERTYzRUQ1MEI3RDQ1QTgw
MDIyNjk5OCAvKiBET01UZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTM3OTE5QzI0MEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEy
NDgxLDYgKzEyNDg4LDcgQEAKIAkJCQk5MzNBMTRCODBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDRkIzRDEwQjdFRDEwQTAwNzBDMzJEIC8q
IERyYWdJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NGQjNENTBCN0VEMTE4MDA3MEMz
MkQgLyogRHJhZ0ltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzc5MTlDMjMwQjdEMTg4
NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCShyZXZpc2lvbiAxOTcwNykKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBA
IC03MCw4ICs3MSwxNSBAQCBzdGF0aWMgTm9kZSAqcHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKE5v
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBvc2l0aW9uOjpQb3NpdGlvbihOb2RlICpub2RlLCBpbnQg
b2Zmc2V0KSAKLSAgICA6IG1fbm9kZShub2RlKSwgbV9vZmZzZXQob2Zmc2V0KSAKK1Bvc2l0aW9u
OjpQb3NpdGlvbihOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KSAKKyAgICA6IG1fbm9kZShub2RlKQor
ICAgICwgbV9vZmZzZXQob2Zmc2V0KSAKK3sKK30KKworUG9zaXRpb246OlBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uSXRlcmF0b3ImIGl0KQorICAgIDogbV9ub2RlKGl0Lm1fcGFyZW50KQorICAgICwg
bV9vZmZzZXQoaXQubV9jaGlsZCA/IGl0Lm1fY2hpbGQtPm5vZGVJbmRleCgpIDogKGl0Lm1fcGFy
ZW50LT5oYXNDaGlsZE5vZGVzKCkgPyBtYXhEZWVwT2Zmc2V0KGl0Lm1fcGFyZW50KSA6IGl0Lm1f
b2Zmc2V0KSkKIHsKIH0KIApAQCAtMTEzLDcgKzEyMSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpw
cmV2aW91cyhFVXNpbmdDb21wb3MKICAgICAKICAgICBpbnQgbyA9IG9mZnNldCgpOwogICAgIC8v
IEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQg
Y2F0Y2ggdGhpcyBlYXJsaWVyLgotICAgIGFzc2VydChvID49IDApOworICAgIEFTU0VSVChvID49
IDApOwogCiAgICAgaWYgKG8gPiAwKSB7CiAgICAgICAgIE5vZGUgKmNoaWxkID0gbi0+Y2hpbGRO
b2RlKG8gLSAxKTsKQEAgLTE0Myw3ICsxNTEsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChF
VXNpbmdDb21wb3NlZENoCiAgICAgCiAgICAgaW50IG8gPSBvZmZzZXQoKTsKICAgICAvLyBGSVhN
RTogTmVnYXRpdmUgb2Zmc2V0cyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4gV2Ugc2hvdWxkIGNhdGNo
IHRoaXMgZWFybGllci4KLSAgICBhc3NlcnQobyA+PSAwKTsKKyAgICBBU1NFUlQobyA+PSAwKTsK
IAogICAgIE5vZGUqIGNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwogICAgIGlmIChjaGlsZCB8fCAh
bi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBtYXhEZWVwT2Zmc2V0KG4pKSB7CkBAIC0yNjUsMzQg
KzI3MywzMSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uCiAKIC8v
IHVwc3RyZWFtKCkgYW5kIGRvd25zdHJlYW0oKSB3YW50IHRvIHJldHVybiBwb3NpdGlvbnMgdGhh
dCBhcmUgZWl0aGVyIGluIGEKIC8vIHRleHQgbm9kZSBvciBhdCBqdXN0IGJlZm9yZSBhIG5vbi10
ZXh0IG5vZGUuICBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIHRoYXQuCi1zdGF0aWMgYm9vbCBpc1N0
cmVhbWVyKGNvbnN0IFBvc2l0aW9uICZwb3MpCitzdGF0aWMgYm9vbCBpc1N0cmVhbWVyKGNvbnN0
IFBvc2l0aW9uSXRlcmF0b3ImIHBvcykKIHsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIGlm
ICghcG9zLm5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGlmIChp
c0F0b21pY05vZGUocG9zLm5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAK
LSAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7CisgICAgcmV0dXJuIHBvcy5hdFN0YXJ0T2ZO
b2RlKCk7CiB9CiAKIC8vIHAudXBzdHJlYW0oKSByZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgcmFu
Z2Ugb2YgcG9zaXRpb25zIHRoYXQgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiBhcyBQ
LgogUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKIHsKLSAgICAvLyBzdGFydCBh
dCBlcXVpdmFsZW50IGRlZXAgcG9zaXRpb24KLSAgICBQb3NpdGlvbiBzdGFydCA9ICp0aGlzOwot
ICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUg
PSBub2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigp
OwogICAgIAogICAgIC8vIGl0ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3Ig
YSBxdWFsaWZpZWQgcG9zaXRpb24KLSAgICBOb2RlICpibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0
YXJ0Tm9kZSk7Ci0gICAgUG9zaXRpb24gbGFzdFZpc2libGUgPSAqdGhpczsKLSAgICBQb3NpdGlv
biBjdXJyZW50UG9zID0gc3RhcnQ7CisgICAgTm9kZSogYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhz
dGFydE5vZGUpOworICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKKyAg
ICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBOb2RlKiBv
cmlnaW5hbFJvb3QgPSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBmb3IgKDsg
IWN1cnJlbnRQb3MuYXRTdGFydCgpOyBjdXJyZW50UG9zID0gY3VycmVudFBvcy5wcmV2aW91cyhV
c2luZ0NvbXBvc2VkQ2hhcmFjdGVycykpIHsKLSAgICAgICAgTm9kZSAqY3VycmVudE5vZGUgPSBj
dXJyZW50UG9zLm5vZGUoKTsKLSAgICAgICAgaW50IGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50UG9z
Lm9mZnNldCgpOworICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3Mu
ZGVjcmVtZW50KCkpIHsKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5v
ZGUoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpICE9IG9yaWdpbmFsUm9vdCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzAzLDcgKzMw
OCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAgICAgICAgICBy
ZXR1cm4gbGFzdFZpc2libGU7CiAKICAgICAgICAgLy8gc2tpcCBwb3NpdGlvbiBpbiB1bnJlbmRl
cmVkIG9yIGludmlzaWJsZSBub2RlCi0gICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBj
dXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRl
cmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAKQEAgLTMxMiwyMiArMzE3LDE5IEBAIFBvc2l0aW9uIFBv
c2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJl
bnRQb3M7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBsZWF2ZSBhIGJsb2NrIGZsb3cgb3Ig
dGFibGUgZWxlbWVudC4gIFdlIGNvdWxkIHJlbHkgb24gY29kZSBhYm92ZSB0byB0ZXJtaW5hdGUg
YW5kIAotICAgICAgICAvLyByZXR1cm4gbGFzdFZpc2libGUgb24gdGhlIG5leHQgaXRlcmF0aW9u
LCBidXQgd2UgdGVybWluYXRlIGVhcmx5IHRvIGF2b2lkIGNhbGxpbmcgcHJldmlvdXMoKQotICAg
ICAgICAvLyBiZWNlYXVzZSBwcmV2aW91cygpIGZvciBhbiBvZmZzZXQgMCBwb3NpdGlvbiBjYWxs
cyBub2RlSW5kZXgoKSwgd2hpY2ggaXMgTyhuKS4KLSAgICAgICAgLy8gRklYTUU6IEF2b2lkIGNh
bGxpbmcgcHJldmlvdXMgb24gb3RoZXIgb2Zmc2V0IDAgcG9zaXRpb25zLgotICAgICAgICBpZiAo
Y3VycmVudE5vZGUgPT0gZW5jbG9zaW5nQmxvY2soY3VycmVudE5vZGUpICYmIGN1cnJlbnRPZmZz
ZXQgPT0gMCkKKyAgICAgICAgLy8gcmV0dXJuIGxhc3RWaXNpYmxlIG9uIHRoZSBuZXh0IGl0ZXJh
dGlvbiwgYnV0IHdlIHRlcm1pbmF0ZSBlYXJseS4KKyAgICAgICAgaWYgKGN1cnJlbnROb2RlID09
IGVuY2xvc2luZ0Jsb2NrKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUo
KSkKICAgICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKICAgICAgICAgICAgIAogICAgICAg
ICAvLyBSZXR1cm4gcG9zaXRpb24gYWZ0ZXIgYnJzLCB0YWJsZXMsIGFuZCBub2RlcyB3aGljaCBo
YXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVkaXRpbmdJZ25v
cmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgcmVuZGVyZXItPmlzQlIoKSB8fCBpc1RhYmxlRWxl
bWVudChjdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBtYXhEZWVw
T2Zmc2V0KGN1cnJlbnROb2RlKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ID49IG1h
eE9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIG1h
eE9mZnNldCk7CisgICAgICAgICAgICBpZiAoY3VycmVudFBvcy5hdEVuZE9mTm9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgbWF4RGVlcE9mZnNldChj
dXJyZW50Tm9kZSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpZiBpdCBpcyBpbiByZW5kZXJlZCB0ZXh0Ci0g
ICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihyZW5kZXJlciktPmZpcnN0VGV4dEJveCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNU
ZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94
KCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGFzc2VydGlvbiBmaXJlcyBpbiBsYXlvdXQgdGVzdHMgaW4gdGhl
IGNhc2UtdHJhbnNmb3JtLmh0bWwgdGVzdCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8gb2Yg
YSBtaXgtdXAgYmV0d2VlbiBvZmZzZXRzIGluIHRoZSB0ZXh0IGluIHRoZSBET00gdHJlZSB3aXRo
IHRleHQgaW4gdGhlCkBAIC0zMzcsMTIgKzMzOSw5IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0
cmVhbSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2Rl
LCByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50T2Zmc2V0IDwgMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRPZmZzZXQ7Ci0gICAgICAg
ICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+
KHJlbmRlcmVyKTsKLSAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJl
bmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVh
Zk5vZGUoKTsKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0YXRpY19j
YXN0PFJlbmRlclRleHQqPihyZW5kZXJlcik7CisgICAgICAgICAgICBmb3IgKElubGluZVRleHRC
b3gqIGJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5u
ZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPiBib3gtPnN0
YXJ0KCkgJiYgdGV4dE9mZnNldCA8PSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKICAgICAgICAgICAgICAgICAgICAgCkBA
IC0zNjAsMjYgKzM1OSwyNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAog
Ly8gUC5kb3duc3RyZWFtKCkgcmV0dXJucyB0aGUgZW5kIG9mIHRoZSByYW5nZSBvZiBwb3NpdGlv
bnMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIGFzIFAuCiBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiB7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSAqdGhp
czsKLSAgICBOb2RlICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnRO
b2RlID0gbm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gUG9zaXRp
b24oKTsKIAogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBh
IHF1YWxpZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3Rh
cnROb2RlKTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9ICp0aGlzOwotICAgIFBvc2l0aW9u
IGN1cnJlbnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0
YXJ0Tm9kZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOworICAg
IFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIE5vZGUqIG9y
aWdpbmFsUm9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoOyAh
Y3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zID0gY3VycmVudFBvcy5uZXh0KFVzaW5nQ29t
cG9zZWRDaGFyYWN0ZXJzKSkgeyAgIAotICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9IGN1cnJl
bnRQb3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCA9IGN1cnJlbnRQb3Mub2Zm
c2V0KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MuaW5jcmVt
ZW50KCkpIHsgICAKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpICE9IG9yaWdpbmFsUm9vdCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIHN0
b3AgYmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1cCBpbnRvIHRoZSBoZWFkCiAgICAgICAg
IC8vIHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAgICAgIGlm
IChjdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiBjdXJyZW50T2Zmc2V0ID49IChp
bnQpIGN1cnJlbnROb2RlLT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICBpZiAoY3VycmVudE5v
ZGUtPmhhc1RhZ05hbWUoYm9keVRhZykgJiYgY3VycmVudFBvcy5hdEVuZE9mTm9kZSgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gRG8gbm90IGVudGVyIGEg
bmV3IGVuY2xvc2luZyBibG9jayBmbG93IG9yIHRhYmxlIGVsZW1lbnQsIGFuZCBkb24ndCBsZWF2
ZSB0aGUgb3JpZ2luYWwgb25lLgpAQCAtMzg3LDcgKzM4NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIAog
ICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUK
LSAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigp
OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKQEAg
LTM5NywyNSArMzk0LDIyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QK
IAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYmVmb3JlIGJycywgdGFibGVzLCBhbmQgbm9k
ZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlmIChl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IHJlbmRlcmVyLT5pc0JSKCkgfHwg
aXNUYWJsZUVsZW1lbnQoY3VycmVudE5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE9m
ZnNldCA8PSByZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSkKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKSA8PSByZW5kZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5j
YXJldE1pbk9mZnNldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gcmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVyZWQgdGV4
dAotICAgICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4ocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkgeworICAgICAgICBpZiAocmVuZGVyZXIt
PmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlciktPmZpcnN0VGV4
dEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgYXNzZXJ0KGN1cnJlbnRPZmZzZXQgPT0gMCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPCAwKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0
ID0gY3VycmVudE9mZnNldDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJy
ZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKTsKIAotICAgICAgICAgICAgUmVuZGVyVGV4dCAqdGV4
dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcik7Ci0gICAgICAg
ICAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJU
ZXh0KiB0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpOwor
ICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0
VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAg
ICAgIGlmICh0ZXh0T2Zmc2V0ID49IGJveC0+c3RhcnQoKSAmJiB0ZXh0T2Zmc2V0IDw9IGJveC0+
ZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAg
ICAgICAgIApAQCAtNDMxLDcgKzQyNSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFt
KCkgY29uc3QKICAgICByZXR1cm4gbGFzdFZpc2libGU7CiB9CiAKLXN0YXRpYyBib29sIGhhc1Jl
bmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIpCitib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRz
V2l0aEhlaWdodChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIFJlbmRlck9iamVjdCog
c3RvcCA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKICAgICBmb3Ig
KFJlbmRlck9iamVjdCAqbyA9IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7IG8gJiYgbyAhPSBzdG9w
OyBvID0gby0+bmV4dEluUHJlT3JkZXIoKSkKQEAgLTQ0MSw3ICs0MzUsNyBAQCBzdGF0aWMgYm9v
bCBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1z
dGF0aWMgYm9vbCBub2RlSXNVc2VyU2VsZWN0Tm9uZShOb2RlKiBub2RlKQorYm9vbCBQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZSAm
JiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJTZWxl
Y3QoKSA9PSBTRUxFQ1RfTk9ORTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uaAkocmV2aXNpb24gMTk3MDcpCisrKyBX
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOwog
Y2xhc3MgRWxlbWVudDsKK2NsYXNzIFBvc2l0aW9uSXRlcmF0b3I7CiBjbGFzcyBSYW5nZTsKIAog
ZW51bSBFVXNpbmdDb21wb3NlZENoYXJhY3RlcnMgeyBOb3RVc2luZ0NvbXBvc2VkQ2hhcmFjdGVy
cyA9IGZhbHNlLCBVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyA9IHRydWUgfTsKQEAgLTQyLDYgKzQz
LDcgQEAgY2xhc3MgUG9zaXRpb24KIHB1YmxpYzoKICAgICBQb3NpdGlvbigpIDogbV9ub2RlKDAp
LCBtX29mZnNldCgwKSB7IH0KICAgICBQb3NpdGlvbihOb2RlKiwgaW50IG9mZnNldCk7CisgICAg
UG9zaXRpb24oY29uc3QgUG9zaXRpb25JdGVyYXRvciYpOwogCiAgICAgdm9pZCBjbGVhcigpOwog
CkBAIC03MSw5ICs3MywxMyBAQCBwdWJsaWM6CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbSgpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgaXNDYW5kaWRhdGUoKSBjb25zdDsKKyAgICBib29sIGluUmVu
ZGVyZWRUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBpc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3Q7
CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9z
KSBjb25zdDsKICAgICAKKyAgICBzdGF0aWMgYm9vbCBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rl
c2NlbmRhbnRzV2l0aEhlaWdodChSZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBub2Rl
SXNVc2VyU2VsZWN0Tm9uZShOb2RlKik7CisgICAgCiAgICAgdm9pZCBkZWJ1Z1Bvc2l0aW9uKGNv
bnN0IGNoYXIqIG1zZyA9ICIiKSBjb25zdDsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTg0LDExICs5
MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgaW50IHJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7
CiAKLSAgICBib29sIGluUmVuZGVyZWRUZXh0KCkgY29uc3Q7Ci0KICAgICBQb3NpdGlvbiBwcmV2
aW91c0NoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7CiAgICAgUG9zaXRpb24gbmV4
dENoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7Ci0gICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwpJbmRleDogV2ViQ29yZS9kb20vUG9z
aXRpb25JdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb25JdGVy
YXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
b3NpdGlvbkl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2b2lkIFBvc2l0aW9uSXRlcmF0b3I6
OmluY3JlbWVudCgpCit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fY2hpbGQpIHsKKyAgICAgICAgbV9wYXJlbnQgPSBtX2NoaWxkOworICAgICAgICBt
X2NoaWxkID0gbV9wYXJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgbV9vZmZzZXQgPSAwOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BhcmVudC0+aGFzQ2hpbGROb2Rl
cygpICYmIG1fb2Zmc2V0IDwgbWF4RGVlcE9mZnNldChtX3BhcmVudCkpCisgICAgICAgIG1fb2Zm
c2V0ID0gbV9wYXJlbnQtPm5leHRPZmZzZXQobV9vZmZzZXQpOworICAgIGVsc2UgeworICAgICAg
ICBtX2NoaWxkID0gbV9wYXJlbnQ7CisgICAgICAgIG1fcGFyZW50ID0gbV9jaGlsZC0+cGFyZW50
Tm9kZSgpOworICAgICAgICBtX2NoaWxkID0gbV9jaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgbV9vZmZzZXQgPSAwOworICAgIH0KK30KKwordm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjpkZWNy
ZW1lbnQoKQoreworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2NoaWxkKSB7CisgICAgICAgIG1fcGFyZW50ID0gbV9jaGlsZC0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgIGlmIChtX3BhcmVudCkgeworICAgICAgICAgICAgbV9jaGlsZCA9IDA7Cisg
ICAgICAgICAgICBtX29mZnNldCA9IG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgPyAwIDogbWF4
RGVlcE9mZnNldChtX3BhcmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2No
aWxkID0gbV9jaGlsZC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgbV9wYXJlbnQgPSBtX2No
aWxkLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBtX29mZnNldCA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX29mZnNldCkgeworICAgICAgICBt
X29mZnNldCA9IG1fcGFyZW50LT5wcmV2aW91c09mZnNldChtX29mZnNldCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpIHsKKyAgICAgICAgICAg
IG1fcGFyZW50ID0gbV9wYXJlbnQtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgaWYgKCFtX3Bh
cmVudC0+aGFzQ2hpbGROb2RlcygpKQorICAgICAgICAgICAgICAgIG1fb2Zmc2V0ID0gbWF4RGVl
cE9mZnNldChtX3BhcmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2NoaWxk
ID0gbV9wYXJlbnQ7CisgICAgICAgICAgICBtX3BhcmVudCA9IG1fcGFyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUG9zaXRpb25JdGVyYXRvcjo6YXRTdGFy
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKG1fcGFyZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgIW1fb2Zmc2V0IHx8IG1fY2hp
bGQgJiYgIW1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOworfQorCitib29sIFBvc2l0aW9uSXRl
cmF0b3I6OmF0RW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAobV9jaGlsZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiAhbV9wYXJlbnQtPnBhcmVudE5vZGUoKSAmJiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMo
KSB8fCBtX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KSk7Cit9CisKK2Jvb2wgUG9z
aXRpb25JdGVyYXRvcjo6YXRTdGFydE9mTm9kZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcmVu
dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX2NoaWxkKQorICAgICAgICByZXR1
cm4gIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgIW1fb2Zmc2V0OworICAgIHJldHVybiAh
bV9jaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Cit9CisKK2Jvb2wgUG9zaXRpb25JdGVyYXRvcjo6
YXRFbmRPZk5vZGUoKSBjb25zdAoreworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChtX2NoaWxkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgbV9vZmZzZXQgPj0gbWF4RGVlcE9mZnNl
dChtX3BhcmVudCk7Cit9CisKK2Jvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBj
b25zdAoreworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX3BhcmVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlbmRlcmVy
LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCisgICAgICAgIHJldHVybiAhbV9vZmZzZXQg
JiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3BhcmVudC0+cGFyZW50KCkpOwor
CisgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCp0
aGlzKS5pblJlbmRlcmVkVGV4dCgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUo
bV9wYXJlbnQpOworCisgICAgaWYgKGlzVGFibGVFbGVtZW50KG1fcGFyZW50KSB8fCBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQobV9wYXJlbnQpKQorICAgICAgICByZXR1cm4gKGF0U3RhcnRPZk5vZGUo
KSB8fCBhdEVuZE9mTm9kZSgpKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1f
cGFyZW50LT5wYXJlbnQoKSk7CisKKyAgICBpZiAoIW1fcGFyZW50LT5oYXNUYWdOYW1lKGh0bWxU
YWcpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmICFQb3NpdGlvbjo6aGFzUmVuZGVyZWRO
b25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpICYmCisgICAgICAgKHJl
bmRlcmVyLT5oZWlnaHQoKSB8fCBtX3BhcmVudC0+aGFzVGFnTmFtZShib2R5VGFnKSkpCisgICAg
ICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0
Tm9uZShtX3BhcmVudCk7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBvc2l0aW9uSXRlcmF0b3JfaAorI2RlZmluZSBQb3NpdGlvbkl0ZXJhdG9yX2gKKworI2lu
Y2x1ZGUgIlBvc2l0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUG9zaXRp
b25JdGVyYXRvciB7CitwdWJsaWM6CisgICAgUG9zaXRpb25JdGVyYXRvcigpCisgICAgICAgIDog
bV9wYXJlbnQoMCkKKyAgICAgICAgLCBtX2NoaWxkKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkK
KyAgICB7CisgICAgfQorCisgICAgUG9zaXRpb25JdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgcG9z
KQorICAgICAgICA6IG1fcGFyZW50KHBvcy5ub2RlKCkpCisgICAgICAgICwgbV9jaGlsZChtX3Bh
cmVudC0+Y2hpbGROb2RlKHBvcy5vZmZzZXQoKSkpCisgICAgICAgICwgbV9vZmZzZXQobV9jaGls
ZCA/IDAgOiBwb3Mub2Zmc2V0KCkpCisgICAgeworICAgIH0KKworICAgIHZvaWQgaW5jcmVtZW50
KCk7CisgICAgdm9pZCBkZWNyZW1lbnQoKTsKKworICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudDsgfQorICAgIGludCBvZmZzZXRJbkxlYWZOb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9vZmZzZXQ7IH0KKworICAgIGJvb2wgYXRTdGFydCgpIGNvbnN0OworICAgIGJvb2wgYXRF
bmQoKSBjb25zdDsKKyAgICBib29sIGF0U3RhcnRPZk5vZGUoKSBjb25zdDsKKyAgICBib29sIGF0
RW5kT2ZOb2RlKCkgY29uc3Q7CisgICAgYm9vbCBpc0NhbmRpZGF0ZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQb3NpdGlvbjsKKyAgICBOb2RlKiBtX3BhcmVudDsKKyAg
ICBOb2RlKiBtX2NoaWxkOworICAgIGludCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBvc2l0aW9uSXRlcmF0b3JfaApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxOTcwNykKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlJhbmdl
LmgiCkBAIC0xOTUsOSArMTk2LDkgQEAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZShOb2RlKiBub2Rl
KQogCiBQb3NpdGlvbiBuZXh0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsK
LSAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CisgICAgUG9zaXRpb25JdGVyYXRvciBwID0gcG9z
aXRpb247CiAgICAgd2hpbGUgKCFwLmF0RW5kKCkpIHsKLSAgICAgICAgcCA9IHAubmV4dChVc2lu
Z0NvbXBvc2VkQ2hhcmFjdGVycyk7CisgICAgICAgIHAuaW5jcmVtZW50KCk7CiAgICAgICAgIGlm
IChwLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICB9CkBAIC0yMTgs
OSArMjE5LDkgQEAgUG9zaXRpb24gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoYwogCiBQ
b3NpdGlvbiBwcmV2aW91c0NhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0g
ICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOworICAgIFBvc2l0aW9uSXRlcmF0b3IgcCA9IHBvc2l0
aW9uOwogICAgIHdoaWxlICghcC5hdFN0YXJ0KCkpIHsKLSAgICAgICAgcCA9IHAucHJldmlvdXMo
VXNpbmdDb21wb3NlZENoYXJhY3RlcnMpOworICAgICAgICBwLmRlY3JlbWVudCgpOwogICAgICAg
ICBpZiAocC5pc0NhbmRpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQo=
</data>
<flag name="review"
          id="5171"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13258</attachid>
            <date>2007-02-19 17:07:47 -0800</date>
            <delta_ts>2007-02-19 17:12:51 -0800</delta_ts>
            <desc>Use an iterator that doesn&apos;t maintain child indices</desc>
            <filename>10735_r4.patch</filename>
            <type>text/plain</type>
            <size>28507</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTk3MTQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC03OTEsNiArNzkxLDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIGRv
bS9Ob3RhdGlvbi5jcHAKICAgICBkb20vT3ZlcmZsb3dFdmVudC5jcHAKICAgICBkb20vUG9zaXRp
b24uY3BwCisgICAgZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCiAgICAgZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAKICAgICBkb20vUXVhbGlmaWVkTmFtZS5jcHAKICAgICBkb20vUmFuZ2Uu
Y3BwCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTk3MTQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQ3IEBACisyMDA3LTAyLTE5ICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDczNQorICAgICAg
ICAgIENsaWNraW5nIGluIFNWRyByZXN1bHRzIGNhdXNlcyBXZWJLaXQgdG8gY29uc3VtZSAxMDAl
IENQVSBmb3Igc2V2ZXJhbCBtaW51dGVzCisKKyAgICAgICAgTm8gdGVzdCBzaW5jZSB0aGVyZSBp
cyBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogQWRkZWQgUG9zaXRpb25JdGVyYXRvci57Y3BwLGh9LgorICAgICAgICAq
IFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uKTogQWRkZWQgY29udmVydGluZyBjb25zdHJ1
Y3RvciBmcm9tCisgICAgICAgIFBvc2l0aW9uSXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6cHJldmlvdXMpOiBDaGFuZ2VkIGFzc2VydCgpIHRvIEFTU0VSVCgpLgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Omlz
U3RyZWFtZXIpOiBDaGFuZ2VkIHRoZSBhcmd1bWVudCB0byBhIFBvc2l0aW9uSXRlcmF0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0pOiBDaGFuZ2VkIHRvIHVzZSBQb3Np
dGlvbkl0ZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppblJlbmRlcmVkVGV4dCk6IE1hZGUg
cHVibGljLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnlt
b3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KTogQ2hhbmdlZAorICAgICAgICBpbnRvIGEgc3RhdGlj
IG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZSk6IERpdHRvLgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOgorICAgICAgICAq
IGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDogQWRkZWQuIEEgUG9zaXRpb24gaXRlcmF0b3Igd2l0
aCBjb25zdGFudC10aW1lCisgICAgICAgIGluY3JlbWVudCwgZGVjcmVtZW50LCBhbmQgc2V2ZXJh
bCBwcmVkaWNhdGVzIG9uIHRoZSBQb3NpdGlvbiBpdCBpcyBhdC4KKyAgICAgICAgQ29udmVyc2lv
biB0by9mcm9tIFBvc2l0aW9uIGlzIE8obikgaW4gdGhlIG9mZnNldC4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uSXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbkl0ZXJhdG9yOjpkZWNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVy
YXRvcjo6YXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdEVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0T2ZOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kT2ZOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKiBk
b20vUG9zaXRpb25JdGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
SXRlcmF0b3I6OlBvc2l0aW9uSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25J
dGVyYXRvcjo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpvZmZz
ZXRJbkxlYWZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRDYW5kaWRhdGUpOiBDaGFuZ2VkIHRvIHVzZSBQb3NpdGlvbkl0ZXJh
dG9yLgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNDYW5kaWRhdGUpOiBDaGFuZ2VkIHRvIHVz
ZSBQb3NpdGlvbkl0ZXJhdG9yLgorCiAyMDA3LTAyLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhY2Fy
bHNzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gMTk3MTQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgsNiArMzE4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL05vdGF0aW9uLmNwcCBcCiAgICAg
ZG9tL092ZXJmbG93RXZlbnQuY3BwIFwKICAgICBkb20vUG9zaXRpb24uY3BwIFwKKyAgICBkb20v
UG9zaXRpb25JdGVyYXRvci5jcHAgXAogICAgIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3Bw
IFwKICAgICBkb20vUXVhbGlmaWVkTmFtZS5jcHAgXAogICAgIGRvbS9SYW5nZS5jcHAgXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDE5NzE0KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2ICs1NTUsNyBAQAogICAgICAgICBkb20vTm90
YXRpb24uY3BwCiAgICAgICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAogICAgICAgICBkb20vUG9z
aXRpb24uY3BwCisgICAgICAgIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAogICAgICAgICBkb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAogICAgICAgICBkb20vUXVhbGlmaWVkTmFtZS5jcHAK
ICAgICAgICAgZG9tL1JhbmdlLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzE0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsOCBAQAog
CQkxQ0ZDRUVENTBBQUNDNjY5MDAzNDg3NTAgLyogRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJp
dmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUNGQ0VFRDQwQUFDQzY1RDAwMzQ4NzUwIC8qIERPTUhUTUxPcHRpb25zQ29s
bGVjdGlvblByaXZhdGUuaCAqLzsgfTsKIAkJMUNGQ0VFREYwQUFDQzZBMzAwMzQ4NzUwIC8qIERP
TUhUTUxQcmVFbGVtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGQ0VFREEwQUFDQzY4MzAwMzQ4NzUwIC8q
IERPTUhUTUxQcmVFbGVtZW50UHJpdmF0ZS5oICovOyB9OwogCQkxQ0ZDRUVGQTBBQUNDN0E3MDAz
NDg3NTAgLyogRE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkNFRUY5MEFBQ0M3
OTAwMDM0ODc1MCAvKiBET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oICovOyB9OworCQkzNzkx
OUMyMzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5
OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CisJCTM3OTE5QzI0MEI3RDE4ODYwMEE1
Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVy
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTQ0OEEyOUJG
MEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3
NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi87IH07CiAJCTQ0OEEyOUMwMEE0NkQ5
Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYg
LyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwICovOyB9OwogCQk0NDhBRDI3QzBBNDgxMzdB
MDAyM0QxNzkgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QUQyN0EwQTQ4MTM3OTAwMjNE
MTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTMzNTIs
NiArMzM1NCw4IEBACiAJCTFDRkNFRUY5MEFBQ0M3OTAwMDM0ODc1MCAvKiBET01IVE1MSW5wdXRF
bGVtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1M
SW5wdXRFbGVtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDkw
NjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZE1hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMkQ5MDY2
MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaXBib2FyZE1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJ
CTM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0
aW9uSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkQwQTQ2
RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MDEsNiArOTYwNSw4IEBACiAJCQkJMUEwRDU3MzgwQTVDNzgxMjAwN0VERDRDIC8qIE92ZXJmbG93
RXZlbnQuaWRsICovLAogCQkJCUJFOTFGQzhDMDYxMzM2NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5j
cHAgKi8sCiAJCQkJQkU5MUZDOEIwNjEzMzY2NjAwNUUzNzkwIC8qIFBvc2l0aW9uLmggKi8sCisJ
CQkJMzc5MTlDMjEwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovLAor
CQkJCTM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi8sCiAJ
CQkJQThFQTdFQjUwQTE5NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAg
Ki8sCiAJCQkJQThFQTdFQjQwQTE5NDVEMDAwQThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oICovLAogCQkJCTkzRUVDMUY1MDlDMjg3NzcwMEM1MTVEMSAvKiBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaWRsICovLApAQCAtMTExMjIsNiArMTExMjgsNyBAQAogCQkJCTkzM0ExNDMwMEI3RDE4
ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzM0ExNEI5MEI3
RDFENTIwMEE1M0ZGRCAvKiBKU1RleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRERFNjNF
RDUwQjdENDVBODAwMjI2OTk4IC8qIERPTVRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Mzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMTI0ODEsNiArMTI0ODgsNyBAQAogCQkJCTkzM0ExNEI4MEI3RDFENTIwMEE1M0ZG
RCAvKiBKU1RleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NGQjNEMTBCN0VEMTBB
MDA3MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0ZCM0Q1MEI3
RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQkzNzkx
OUMyMzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE5NzE0KQorKysgV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKQEAgLTcwLDggKzcxLDE1IEBAIHN0YXRpYyBOb2RlICpwcmV2aW91c1JlbmRlcmVk
RWRpdGFibGUoTm8KICAgICByZXR1cm4gMDsKIH0KIAotUG9zaXRpb246OlBvc2l0aW9uKE5vZGUg
Km5vZGUsIGludCBvZmZzZXQpIAotICAgIDogbV9ub2RlKG5vZGUpLCBtX29mZnNldChvZmZzZXQp
IAorUG9zaXRpb246OlBvc2l0aW9uKE5vZGUqIG5vZGUsIGludCBvZmZzZXQpIAorICAgIDogbV9u
b2RlKG5vZGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpIAoreworfQorCitQb3NpdGlvbjo6UG9z
aXRpb24oY29uc3QgUG9zaXRpb25JdGVyYXRvciYgaXQpCisgICAgOiBtX25vZGUoaXQubV9wYXJl
bnQpCisgICAgLCBtX29mZnNldChpdC5tX2NoaWxkID8gaXQubV9jaGlsZC0+bm9kZUluZGV4KCkg
OiAoaXQubV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSA/IG1heERlZXBPZmZzZXQoaXQubV9wYXJl
bnQpIDogaXQubV9vZmZzZXQpKQogewogfQogCkBAIC0xMTMsNyArMTIxLDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OnByZXZpb3VzKEVVc2luZ0NvbXBvcwogICAgIAogICAgIGludCBvID0gb2Zmc2V0
KCk7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQu
IFdlIHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIuCi0gICAgYXNzZXJ0KG8gPj0gMCk7CisgICAg
QVNTRVJUKG8gPj0gMCk7CiAKICAgICBpZiAobyA+IDApIHsKICAgICAgICAgTm9kZSAqY2hpbGQg
PSBuLT5jaGlsZE5vZGUobyAtIDEpOwpAQCAtMTQzLDcgKzE1MSw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjpuZXh0KEVVc2luZ0NvbXBvc2VkQ2gKICAgICAKICAgICBpbnQgbyA9IG9mZnNldCgpOwog
ICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBz
aG91bGQgY2F0Y2ggdGhpcyBlYXJsaWVyLgotICAgIGFzc2VydChvID49IDApOworICAgIEFTU0VS
VChvID49IDApOwogCiAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7CiAgICAgaWYg
KGNoaWxkIHx8ICFuLT5oYXNDaGlsZE5vZGVzKCkgJiYgbyA8IG1heERlZXBPZmZzZXQobikpIHsK
QEAgLTI2NSwzNCArMjczLDMxIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9z
aXRpb24KIAogLy8gdXBzdHJlYW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8gcmV0dXJuIHBv
c2l0aW9ucyB0aGF0IGFyZSBlaXRoZXIgaW4gYQogLy8gdGV4dCBub2RlIG9yIGF0IGp1c3QgYmVm
b3JlIGEgbm9uLXRleHQgbm9kZS4gIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhhdC4KLXN0YXRp
YyBib29sIGlzU3RyZWFtZXIoY29uc3QgUG9zaXRpb24gJnBvcykKK3N0YXRpYyBib29sIGlzU3Ry
ZWFtZXIoY29uc3QgUG9zaXRpb25JdGVyYXRvciYgcG9zKQogewotICAgIGlmIChwb3MuaXNOdWxs
KCkpCisgICAgaWYgKCFwb3Mubm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
CiAgICAgaWYgKGlzQXRvbWljTm9kZShwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIAotICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKKyAgICByZXR1cm4gcG9z
LmF0U3RhcnRPZk5vZGUoKTsKIH0KIAogLy8gcC51cHN0cmVhbSgpIHJldHVybnMgdGhlIHN0YXJ0
IG9mIHRoZSByYW5nZSBvZiBwb3NpdGlvbnMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBv
c2l0aW9uIGFzIFAuCiBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogewotICAg
IC8vIHN0YXJ0IGF0IGVxdWl2YWxlbnQgZGVlcCBwb3NpdGlvbgotICAgIFBvc2l0aW9uIHN0YXJ0
ID0gKnRoaXM7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUq
IHN0YXJ0Tm9kZSA9IG5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJu
IFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJlLCBs
b29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgotICAgIE5vZGUgKmJsb2NrID0gZW5jbG9z
aW5nQmxvY2soc3RhcnROb2RlKTsKLSAgICBQb3NpdGlvbiBsYXN0VmlzaWJsZSA9ICp0aGlzOwot
ICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSBzdGFydDsKKyAgICBOb2RlKiBibG9jayA9IGVuY2xv
c2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9
ICp0aGlzOworICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwog
ICAgIE5vZGUqIG9yaWdpbmFsUm9vdCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwot
ICAgIGZvciAoOyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9z
LnByZXZpb3VzKFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzKSkgewotICAgICAgICBOb2RlICpjdXJy
ZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwotICAgICAgICBpbnQgY3VycmVudE9mZnNldCA9
IGN1cnJlbnRQb3Mub2Zmc2V0KCk7CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsg
Y3VycmVudFBvcy5kZWNyZW1lbnQoKSkgeworICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1
cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCkgIT0gb3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CkBA
IC0zMDMsNyArMzA4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAg
ICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9u
IGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpy
ZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVy
ZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIApAQCAtMzEyLDIyICszMTcsMTkgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIGxhc3RWaXNp
YmxlID0gY3VycmVudFBvczsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGxlYXZlIGEgYmxv
Y2sgZmxvdyBvciB0YWJsZSBlbGVtZW50LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRv
IHRlcm1pbmF0ZSBhbmQgCi0gICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4
dCBpdGVyYXRpb24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgY2FsbGluZyBwcmV2
aW91cygpCi0gICAgICAgIC8vIGJlY2VhdXNlIHByZXZpb3VzKCkgZm9yIGFuIG9mZnNldCAwIHBv
c2l0aW9uIGNhbGxzIG5vZGVJbmRleCgpLCB3aGljaCBpcyBPKG4pLgotICAgICAgICAvLyBGSVhN
RTogQXZvaWQgY2FsbGluZyBwcmV2aW91cyBvbiBvdGhlciBvZmZzZXQgMCBwb3NpdGlvbnMuCi0g
ICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBlbmNsb3NpbmdCbG9jayhjdXJyZW50Tm9kZSkgJiYg
Y3VycmVudE9mZnNldCA9PSAwKQorICAgICAgICAvLyByZXR1cm4gbGFzdFZpc2libGUgb24gdGhl
IG5leHQgaXRlcmF0aW9uLCBidXQgd2UgdGVybWluYXRlIGVhcmx5LgorICAgICAgICBpZiAoY3Vy
cmVudE5vZGUgPT0gZW5jbG9zaW5nQmxvY2soY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3MuYXRT
dGFydE9mTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBhZnRlciBicnMsIHRhYmxlcywgYW5kIG5v
ZGVzIHdoaWNoIGhhdmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAo
ZWRpdGluZ0lnbm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCByZW5kZXJlci0+aXNCUigpIHx8
IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewotICAgICAgICAgICAgaW50IG1heE9mZnNl
dCA9IG1heERlZXBPZmZzZXQoY3VycmVudE5vZGUpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRP
ZmZzZXQgPj0gbWF4T2Zmc2V0KQotICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJy
ZW50Tm9kZSwgbWF4T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZO
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXhE
ZWVwT2Zmc2V0KGN1cnJlbnROb2RlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIHJldHVybiBjdXJyZW50IHBvc2l0aW9uIGlmIGl0IGlzIGluIHJlbmRl
cmVkIHRleHQKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0ICo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpLT5m
aXJzdFRleHRCb3goKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9k
ZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGZpcmVzIGluIGxheW91dCB0
ZXN0cyBpbiB0aGUgY2FzZS10cmFuc2Zvcm0uaHRtbCB0ZXN0IGJlY2F1c2UKICAgICAgICAgICAg
ICAgICAvLyBvZiBhIG1peC11cCBiZXR3ZWVuIG9mZnNldHMgaW4gdGhlIHRleHQgaW4gdGhlIERP
TSB0cmVlIHdpdGggdGV4dCBpbiB0aGUKQEAgLTMzNywxMiArMzM5LDkgQEAgUG9zaXRpb24gUG9z
aXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24o
Y3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1heE9mZnNldCgpKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPCAwKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudE9mZnNl
dDsKLSAgICAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJl
bmRlclRleHQgKj4ocmVuZGVyZXIpOwotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpi
b3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRl
eHRCb3goKSkgeworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpOworICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZvciAo
SW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNl
dCA+IGJveC0+c3RhcnQoKSAmJiB0ZXh0T2Zmc2V0IDw9IGJveC0+c3RhcnQoKSArIGJveC0+bGVu
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTM2MCwyNiArMzU5LDI0IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVh
bSgpIGNvbnN0CiAvLyBQLmRvd25zdHJlYW0oKSByZXR1cm5zIHRoZSBlbmQgb2YgdGhlIHJhbmdl
IG9mIHBvc2l0aW9ucyB0aGF0IG1hcCB0byB0aGUgc2FtZSBWaXNpYmxlUG9zaXRpb24gYXMgUC4K
IFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBz
dGFydCA9ICp0aGlzOwotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxv
b2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCi0gICAgTm9kZSAqYmxvY2sgPSBlbmNsb3Np
bmdCbG9jayhzdGFydE5vZGUpOwotICAgIFBvc2l0aW9uIGxhc3RWaXNpYmxlID0gKnRoaXM7Ci0g
ICAgUG9zaXRpb24gY3VycmVudFBvcyA9IHN0YXJ0OworICAgIE5vZGUqIGJsb2NrID0gZW5jbG9z
aW5nQmxvY2soc3RhcnROb2RlKTsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0g
KnRoaXM7CisgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAg
ICAgTm9kZSogb3JpZ2luYWxSb290ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0g
ICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5l
eHQoVXNpbmdDb21wb3NlZENoYXJhY3RlcnMpKSB7ICAgCi0gICAgICAgIE5vZGUgKmN1cnJlbnRO
b2RlID0gY3VycmVudFBvcy5ub2RlKCk7Ci0gICAgICAgIGludCBjdXJyZW50T2Zmc2V0ID0gY3Vy
cmVudFBvcy5vZmZzZXQoKTsKKyAgICBmb3IgKDsgIWN1cnJlbnRQb3MuYXRFbmQoKTsgY3VycmVu
dFBvcy5pbmNyZW1lbnQoKSkgeyAgIAorICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJl
bnRQb3Mubm9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCkgIT0gb3JpZ2luYWxSb290KQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgLy8gc3RvcCBiZWZvcmUgZ29pbmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhl
YWQKICAgICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24K
LSAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpICYmIGN1cnJlbnRP
ZmZzZXQgPj0gKGludCkgY3VycmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIGlm
IChjdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZO
b2RlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBEbyBu
b3QgZW50ZXIgYSBuZXcgZW5jbG9zaW5nIGJsb2NrIGZsb3cgb3IgdGFibGUgZWxlbWVudCwgYW5k
IGRvbid0IGxlYXZlIHRoZSBvcmlnaW5hbCBvbmUuCkBAIC0zODcsNyArMzg0LDcgQEAgUG9zaXRp
b24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGxhc3RW
aXNpYmxlOwogCiAgICAgICAgIC8vIHNraXAgcG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZp
c2libGUgbm9kZQotICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gY3VycmVudE5vZGUt
PnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9k
ZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIApAQCAtMzk3LDI1ICszOTQsMjIgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJl
YW0oKSBjb25zdAogCiAgICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBiZWZvcmUgYnJzLCB0YWJs
ZXMsIGFuZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAg
ICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgcmVuZGVyZXIt
PmlzQlIoKSB8fCBpc1RhYmxlRWxlbWVudChjdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50T2Zmc2V0IDw9IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQorICAgICAgICAg
ICAgaWYgKGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpIDw9IHJlbmRlcmVyLT5jYXJldE1p
bk9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwg
cmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpZiBpdCBpcyBpbiBy
ZW5kZXJlZCB0ZXh0Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlciktPmZpcnN0VGV4dEJveCgpKSB7CisgICAgICAgIGlm
IChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVy
KS0+Zmlyc3RUZXh0Qm94KCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFy
dE5vZGUpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoY3VycmVudE9mZnNldCA9PSAwKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWlu
T2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY3VycmVudE9mZnNl
dCA8IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVk
IHRleHRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9m
ZnNldCA9IGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpOwogCi0gICAgICAgICAgICBSZW5k
ZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVy
KTsKLSAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5m
aXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAg
ICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihy
ZW5kZXJlcik7CisgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5k
ZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPj0gYm94LT5zdGFydCgpICYmIHRleHRPZmZz
ZXQgPD0gYm94LT5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7
CiAgICAgICAgICAgICAgICAgCkBAIC00MzEsNyArNDI1LDcgQEAgUG9zaXRpb24gUG9zaXRpb246
OmRvd25zdHJlYW0oKSBjb25zdAogICAgIHJldHVybiBsYXN0VmlzaWJsZTsKIH0KIAotc3RhdGlj
IGJvb2wgaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVy
T2JqZWN0ICpyZW5kZXJlcikKK2Jvb2wgUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3Vz
RGVzY2VuZGFudHNXaXRoSGVpZ2h0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgUmVu
ZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXItPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigp
OwogICAgIGZvciAoUmVuZGVyT2JqZWN0ICpvID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgbyAm
JiBvICE9IHN0b3A7IG8gPSBvLT5uZXh0SW5QcmVPcmRlcigpKQpAQCAtNDQxLDcgKzQzNSw3IEBA
IHN0YXRpYyBib29sIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2UKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBib29sIG5vZGVJc1VzZXJTZWxlY3ROb25lKE5vZGUqIG5vZGUpCiti
b29sIFBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShOb2RlKiBub2RlKQogewogICAgIHJl
dHVybiBub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+dXNlclNlbGVjdCgpID09IFNFTEVDVF9OT05FOwogfQpJbmRleDogV2ViQ29yZS9kb20vUG9z
aXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiAx
OTcxNCkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb247CiBjbGFzcyBFbGVtZW50OworY2xhc3MgUG9zaXRpb25JdGVyYXRvcjsKIGNsYXNz
IFJhbmdlOwogCiBlbnVtIEVVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyB7IE5vdFVzaW5nQ29tcG9z
ZWRDaGFyYWN0ZXJzID0gZmFsc2UsIFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gdHJ1ZSB9OwpA
QCAtNDIsNiArNDMsNyBAQCBjbGFzcyBQb3NpdGlvbgogcHVibGljOgogICAgIFBvc2l0aW9uKCkg
OiBtX25vZGUoMCksIG1fb2Zmc2V0KDApIHsgfQogICAgIFBvc2l0aW9uKE5vZGUqLCBpbnQgb2Zm
c2V0KTsKKyAgICBQb3NpdGlvbihjb25zdCBQb3NpdGlvbkl0ZXJhdG9yJik7CiAKICAgICB2b2lk
IGNsZWFyKCk7CiAKQEAgLTcxLDkgKzczLDEzIEBAIHB1YmxpYzoKICAgICBQb3NpdGlvbiBkb3du
c3RyZWFtKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc0NhbmRpZGF0ZSgpIGNvbnN0OworICAg
IGJvb2wgaW5SZW5kZXJlZFRleHQoKSBjb25zdDsKICAgICBib29sIGlzUmVuZGVyZWRDaGFyYWN0
ZXIoKSBjb25zdDsKICAgICBib29sIHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uICZwb3MpIGNvbnN0OwogICAgIAorICAgIHN0YXRpYyBib29sIGhhc1JlbmRlcmVkTm9u
QW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KFJlbmRlck9iamVjdCopOworICAgIHN0YXRp
YyBib29sIG5vZGVJc1VzZXJTZWxlY3ROb25lKE5vZGUqKTsKKyAgICAKICAgICB2b2lkIGRlYnVn
UG9zaXRpb24oY29uc3QgY2hhciogbXNnID0gIiIpIGNvbnN0OwogCiAjaWZuZGVmIE5ERUJVRwpA
QCAtODQsMTEgKzkwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgcmVuZGVyZWRPZmZz
ZXQoKSBjb25zdDsKIAotICAgIGJvb2wgaW5SZW5kZXJlZFRleHQoKSBjb25zdDsKLQogICAgIFBv
c2l0aW9uIHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKICAgICBQ
b3NpdGlvbiBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKLSAgICAKICAg
ICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIGludCBtX29mZnNldDsKIH07CkluZGV4OiBXZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Q
b3NpdGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3ZvaWQgUG9zaXRp
b25JdGVyYXRvcjo6aW5jcmVtZW50KCkKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9jaGlsZCkgeworICAgICAgICBtX3BhcmVudCA9IG1fY2hpbGQ7
CisgICAgICAgIG1fY2hpbGQgPSBtX3BhcmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBtX29m
ZnNldCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGFyZW50LT5o
YXNDaGlsZE5vZGVzKCkgJiYgbV9vZmZzZXQgPCBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KSkKKyAg
ICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+bmV4dE9mZnNldChtX29mZnNldCk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fY2hpbGQgPSBtX3BhcmVudDsKKyAgICAgICAgbV9wYXJlbnQgPSBtX2No
aWxkLT5wYXJlbnROb2RlKCk7CisgICAgICAgIG1fY2hpbGQgPSBtX2NoaWxkLT5uZXh0U2libGlu
ZygpOworICAgICAgICBtX29mZnNldCA9IDA7CisgICAgfQorfQorCit2b2lkIFBvc2l0aW9uSXRl
cmF0b3I6OmRlY3JlbWVudCgpCit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fY2hpbGQpIHsKKyAgICAgICAgbV9wYXJlbnQgPSBtX2NoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgaWYgKG1fcGFyZW50KSB7CisgICAgICAgICAgICBtX2No
aWxkID0gMDsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMo
KSA/IDAgOiBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fY2hpbGQgPSBtX2NoaWxkLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBtX3Bh
cmVudCA9IG1fY2hpbGQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ID0gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fb2Zmc2V0KSB7
CisgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPnByZXZpb3VzT2Zmc2V0KG1fb2Zmc2V0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkgewor
ICAgICAgICAgICAgbV9wYXJlbnQgPSBtX3BhcmVudC0+bGFzdENoaWxkKCk7CisgICAgICAgICAg
ICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICAgICAgbV9vZmZz
ZXQgPSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fY2hpbGQgPSBtX3BhcmVudDsKKyAgICAgICAgICAgIG1fcGFyZW50ID0gbV9wYXJlbnQt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBQb3NpdGlvbkl0ZXJh
dG9yOjphdFN0YXJ0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAobV9wYXJlbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiAhbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiAhbV9vZmZz
ZXQgfHwgbV9jaGlsZCAmJiAhbV9jaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Cit9CisKK2Jvb2wg
UG9zaXRpb25JdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAgIGlmICghbV9wYXJlbnQpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2NoaWxkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuICFtX3BhcmVudC0+cGFyZW50Tm9kZSgpICYmIChtX3BhcmVudC0+aGFz
Q2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0ID49IG1heERlZXBPZmZzZXQobV9wYXJlbnQpKTsKK30K
KworYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0T2ZOb2RlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fY2hpbGQpCisg
ICAgICAgIHJldHVybiAhbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiAhbV9vZmZzZXQ7Cisg
ICAgcmV0dXJuICFtX2NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKK30KKworYm9vbCBQb3NpdGlv
bkl0ZXJhdG9yOjphdEVuZE9mTm9kZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fY2hpbGQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBt
YXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKK30KKworYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0Nh
bmRpZGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fcGFyZW50LT5yZW5kZXJlcigp
OworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBp
ZiAocmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKKyAgICAgICAgcmV0dXJu
ICFtX29mZnNldCAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fcGFyZW50LT5w
YXJlbnQoKSk7CisKKyAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpKQorICAgICAgICByZXR1cm4g
UG9zaXRpb24oKnRoaXMpLmluUmVuZGVyZWRUZXh0KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZShtX3BhcmVudCk7CisKKyAgICBpZiAoaXNUYWJsZUVsZW1lbnQobV9wYXJlbnQp
IHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChtX3BhcmVudCkpCisgICAgICAgIHJldHVybiAoYXRT
dGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdE5vbmUobV9wYXJlbnQtPnBhcmVudCgpKTsKKworICAgIGlmICghbV9wYXJlbnQtPmhhc1Rh
Z05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgIVBvc2l0aW9uOjpo
YXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikgJiYK
KyAgICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IG1fcGFyZW50LT5oYXNUYWdOYW1lKGJvZHlU
YWcpKSkKKyAgICAgICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJ
c1VzZXJTZWxlY3ROb25lKG1fcGFyZW50KTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUG9zaXRpb25JdGVyYXRvcl9oCisjZGVmaW5lIFBvc2l0aW9uSXRlcmF0
b3JfaAorCisjaW5jbHVkZSAiUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQb3NpdGlvbkl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBQb3NpdGlvbkl0ZXJhdG9yKCkK
KyAgICAgICAgOiBtX3BhcmVudCgwKQorICAgICAgICAsIG1fY2hpbGQoMCkKKyAgICAgICAgLCBt
X29mZnNldCgwKQorICAgIHsKKyAgICB9CisKKyAgICBQb3NpdGlvbkl0ZXJhdG9yKGNvbnN0IFBv
c2l0aW9uJiBwb3MpCisgICAgICAgIDogbV9wYXJlbnQocG9zLm5vZGUoKSkKKyAgICAgICAgLCBt
X2NoaWxkKG1fcGFyZW50LT5jaGlsZE5vZGUocG9zLm9mZnNldCgpKSkKKyAgICAgICAgLCBtX29m
ZnNldChtX2NoaWxkID8gMCA6IHBvcy5vZmZzZXQoKSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBpbmNyZW1lbnQoKTsKKyAgICB2b2lkIGRlY3JlbWVudCgpOworCisgICAgTm9kZSogbm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgaW50IG9mZnNldEluTGVhZk5vZGUoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCisgICAgYm9vbCBhdFN0YXJ0KCkgY29uc3Q7Cisg
ICAgYm9vbCBhdEVuZCgpIGNvbnN0OworICAgIGJvb2wgYXRTdGFydE9mTm9kZSgpIGNvbnN0Owor
ICAgIGJvb2wgYXRFbmRPZk5vZGUoKSBjb25zdDsKKyAgICBib29sIGlzQ2FuZGlkYXRlKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBvc2l0aW9uOworICAgIE5vZGUqIG1f
cGFyZW50OworICAgIE5vZGUqIG1fY2hpbGQ7CisgICAgaW50IG1fb2Zmc2V0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUG9zaXRpb25JdGVyYXRvcl9oCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDE5NzE0KQorKysgV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUmFuZ2UuaCIKQEAgLTE5NSw5ICsxOTYsOSBAQCBib29sIGlzQ29udGVudEVkaXRhYmxl
KE5vZGUqIG5vZGUpCiAKIFBvc2l0aW9uIG5leHRDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewotICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKKyAgICBQb3NpdGlvbkl0ZXJh
dG9yIHAgPSBwb3NpdGlvbjsKICAgICB3aGlsZSAoIXAuYXRFbmQoKSkgewotICAgICAgICBwID0g
cC5uZXh0KFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgcC5pbmNyZW1lbnQoKTsK
ICAgICAgICAgaWYgKHAuaXNDYW5kaWRhdGUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwogICAg
IH0KQEAgLTIxOCw5ICsyMTksOSBAQCBQb3NpdGlvbiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShjCiAKIFBvc2l0aW9uIHByZXZpb3VzQ2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKLSAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CisgICAgUG9zaXRpb25JdGVyYXRv
ciBwID0gcG9zaXRpb247CiAgICAgd2hpbGUgKCFwLmF0U3RhcnQoKSkgewotICAgICAgICBwID0g
cC5wcmV2aW91cyhVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyk7CisgICAgICAgIHAuZGVjcmVtZW50
KCk7CiAgICAgICAgIGlmIChwLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsK
ICAgICB9Cg==
</data>
<flag name="review"
          id="5178"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>