<?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>64728</bug_id>
          
          <creation_ts>2011-07-18 08:46:59 -0700</creation_ts>
          <short_desc>TiledDrawingArea: Use tile sets to paint old content while rendering for a new scale.</short_desc>
          <delta_ts>2011-07-29 08:30:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>438501</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-18 08:46:59 -0700</bug_when>
    <thetext>TiledDrawingArea: Use tile sets to paint old content while rendering for a new scale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438505</commentid>
    <comment_count>1</comment_count>
      <attachid>101163</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-18 08:59:52 -0700</bug_when>
    <thetext>Created attachment 101163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438507</commentid>
    <comment_count>2</comment_count>
      <attachid>101165</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-18 09:03:05 -0700</bug_when>
    <thetext>Created attachment 101165
Move to own file patch

Tell me if you would prefer them squashed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438511</commentid>
    <comment_count>3</comment_count>
      <attachid>101163</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-18 09:11:13 -0700</bug_when>
    <thetext>Comment on attachment 101163
Patch

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

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:183
&gt; +    TiledDrawingAreaTileSet* m_currentTiles;
&gt; +    TiledDrawingAreaTileSet* m_previousScaleTiles;

OwnPtr!!! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438516</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-18 09:26:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=101165) [details]
&gt; Move to own file patch
&gt; 
&gt; Tell me if you would prefer them squashed.

Yep, that would be nice actually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438523</commentid>
    <comment_count>5</comment_count>
      <attachid>101163</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-18 09:43:07 -0700</bug_when>
    <thetext>Comment on attachment 101163
Patch

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

Quick comments:

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:60
&gt; +{
&gt; +}

It&apos;d be nice to have ASSERT(m_proxy) here so that fails early.

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:78
&gt; +    TileMap&amp; tiles() { return m_tiles; }

This is breaking the abstraction of TiledDrawingAreaTileSet.

It looks to me like TiledDrawingAreaProxy::updateTileBuffers() does not use any attribute so it could be a method of TiledDrawingAreaTileSet.
The case of TiledDrawingAreaProxy::tileBufferUpdateComplete() is a bit more tricky. If you manage to refactor it to avoid knowing about the tiles, the TiledDrawingAreaTileSet would be the only owner of m_tiles making a nicer abstraction.

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:82
&gt; +    void setTile(const TiledDrawingAreaTile::Coordinate&amp;, PassRefPtr&lt;TiledDrawingAreaTile&gt;);

Should this be private? It looks for me like the TiledDrawingAreaTileSet has the responsibility to manage its TiledDrawingAreaTile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439961</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-20 13:21:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:60
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; It&apos;d be nice to have ASSERT(m_proxy) here so that fails early.
&gt; 
Good idea.

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:78
&gt; &gt; +    TileMap&amp; tiles() { return m_tiles; }
&gt; 
&gt; This is breaking the abstraction of TiledDrawingAreaTileSet.
&gt; 
&gt; It looks to me like TiledDrawingAreaProxy::updateTileBuffers() does not use any attribute so it could be a method of TiledDrawingAreaTileSet.
&gt; The case of TiledDrawingAreaProxy::tileBufferUpdateComplete() is a bit more tricky. If you manage to refactor it to avoid knowing about the tiles, the TiledDrawingAreaTileSet would be the only owner of m_tiles making a nicer abstraction.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:82
&gt; &gt; +    void setTile(const TiledDrawingAreaTile::Coordinate&amp;, PassRefPtr&lt;TiledDrawingAreaTile&gt;);
&gt; 
&gt; Should this be private? It looks for me like the TiledDrawingAreaTileSet has the responsibility to manage its TiledDrawingAreaTile.

Humm, at first I wanted to split responsibilities but I soon realized that there is no apparent reason to do so, handling tiles, their updates and painting them are not things easy to split apart and will introduce complexity with few benefits if done so.
The tile set was then just supposed to be a tile container with an attached scale ratio and a bare minimum of methods in it.

Though since this seems to annoy you as well, having this result in the end might give the impression of an incomplete lazy half-opened class. It might be better to just have the tile set as a struct { tiles; scale; }; and move those functions back to the TDAProxy with a tile set struct reference parameter. What do you think? Or tell me if you have other ideas.
Because anyway the only need I have is to group those tiles together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439972</commentid>
    <comment_count>7</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-20 13:29:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
Humm wait, better than that, move the contentsScale attribute in the Tile along with knowledge of it&apos;s contentsRect in the page and just have the tile set replace by a normal container.

I think I&apos;ll give that one a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439987</commentid>
    <comment_count>8</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-20 13:43:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; Humm wait, better than that, move the contentsScale attribute in the Tile along with knowledge of it&apos;s contentsRect in the page and just have the tile set replace by a normal container.
&gt; 
&gt; I think I&apos;ll give that one a try.

Ahhh... this won&apos;t work since I would need to remove the gc.setScale(invert) trick at the beginning of paint(). I tried that last weeks and had an annoying slight scaling with the opengl graphics system that I couldn&apos;t get rid of as I told you.

Anyway, please tell me what you think about the struct { tiles; scale; } idea.
I could also move the scale into the tile class as said and do a if (tile-&gt;scale() != lastScale) { gc.setScale(lastScale / tile-&gt;scale(); }, that might be clean actually since I would paint tiles with the same scale all at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442186</commentid>
    <comment_count>9</comment_count>
      <attachid>101988</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-26 05:36:48 -0700</bug_when>
    <thetext>Created attachment 101988
Patch

Removed unnecessary stuff from the TileSet and changed add/remove tile for attach/detach in the proxy.
Tell me what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442227</commentid>
    <comment_count>10</comment_count>
      <attachid>101988</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-26 07:17:52 -0700</bug_when>
    <thetext>Comment on attachment 101988
Patch

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

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:49
&gt; +    typedef HashMap&lt;TiledDrawingAreaTile::Coordinate, RefPtr&lt;TiledDrawingAreaTile&gt; &gt; TileMap;

Totally unrelated to your patch but I wonder why TiledDrawingAreaTile is refcounted. It looks like total ownership by TiledDrawingAreaTileSet to me. I guess it is simply because HashMap does not handle OwnPtr due to the lack of copy constructor?

That is something to keep in mind because RefPtr are a bit more complicated to handle right. We could probably have a destructor for TiledDrawingAreaTileSet that call deleteAllPairSeconds() and get rid of RefPtr.

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:350
&gt; +

Uh?

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:366
&gt; +    float rectArea = dirtyRect.width() * dirtyRect.height();

Can dirty rect be empty here?
In which case the return would likely be +inf (which might fine with the callers? :))

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:158
&gt; +    OwnPtr&lt;TiledDrawingAreaTileSet&gt; m_currentTiles;
&gt; +    OwnPtr&lt;TiledDrawingAreaTileSet&gt; m_previousScaleTiles;

I think it&apos;d be nice to rename them to m_currentTileSet and m_previousTileSet.

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaTile.h:53
&gt; +    void setProxy(TiledDrawingAreaProxy*);

I am not convinced by this new API of TiledDrawingAreaTile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442338</commentid>
    <comment_count>11</comment_count>
      <attachid>101988</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-26 10:15:20 -0700</bug_when>
    <thetext>Comment on attachment 101988
Patch

Clearing the review flag. We discussed with Jocelyn and he wants to do some improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442829</commentid>
    <comment_count>12</comment_count>
      <attachid>102118</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-27 03:57:58 -0700</bug_when>
    <thetext>Created attachment 102118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442831</commentid>
    <comment_count>13</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-27 04:02:15 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Totally unrelated to your patch but I wonder why TiledDrawingAreaTile is refcounted. It looks like total ownership by TiledDrawingAreaTileSet to me. I guess it is simply because HashMap does not handle OwnPtr due to the lack of copy constructor?
&gt; 
&gt; That is something to keep in mind because RefPtr are a bit more complicated to handle right. We could probably have a destructor for TiledDrawingAreaTileSet that call deleteAllPairSeconds() and get rid of RefPtr.
&gt; 
Right now I don&apos;t think there is any reason why we need them refcounted. What do you mean by &quot;to handle right&quot;, what is the cost/risk? 

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:350
&gt; &gt; +
&gt; 
&gt; Uh?
&gt; 
Oops

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:366
&gt; &gt; +    float rectArea = dirtyRect.width() * dirtyRect.height();
&gt; 
&gt; Can dirty rect be empty here?
&gt; In which case the return would likely be +inf (which might fine with the callers? :))
&gt; 
It shouldn&apos;t be empty, but if it does, +inf would be the correct return value.

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:158
&gt; &gt; +    OwnPtr&lt;TiledDrawingAreaTileSet&gt; m_currentTiles;
&gt; &gt; +    OwnPtr&lt;TiledDrawingAreaTileSet&gt; m_previousScaleTiles;
&gt; 
&gt; I think it&apos;d be nice to rename them to m_currentTileSet and m_previousTileSet.
&gt; 
Changed

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaTile.h:53
&gt; &gt; +    void setProxy(TiledDrawingAreaProxy*);
&gt; 
&gt; I am not convinced by this new API of TiledDrawingAreaTile.
Changed with Tile::disableUpdates() that calls Proxy::unregisterTile.
Also called disableUpdates() in the tile&apos;s destructor so that deleting the tile object will also cleanup the proxy&apos;s tileByID map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442833</commentid>
    <comment_count>14</comment_count>
      <attachid>102118</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-27 04:20:14 -0700</bug_when>
    <thetext>Comment on attachment 102118
Patch

Attachment 102118 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9247736

New failing tests:
fast/canvas/webgl/framebuffer-test.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442853</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-27 05:03:26 -0700</bug_when>
    <thetext>&gt; &gt; That is something to keep in mind because RefPtr are a bit more complicated to handle right. We could probably have a destructor for TiledDrawingAreaTileSet that call deleteAllPairSeconds() and get rid of RefPtr.
&gt; &gt; 
&gt; Right now I don&apos;t think there is any reason why we need them refcounted. What do you mean by &quot;to handle right&quot;, what is the cost/risk? 

See this discussion: https://lists.webkit.org/pipermail/webkit-dev/2011-June/017178.html

It is really easy to write code that look correct and is wrong with PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443102</commentid>
    <comment_count>16</comment_count>
      <attachid>102118</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-27 12:46:23 -0700</bug_when>
    <thetext>Comment on attachment 102118
Patch

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

Looks good :)

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:396
&gt; +    if (m_currentTileSet-&gt;contentsScale() == scale)

I doubt this is gonna be hit often :)

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:558
&gt; +void TiledDrawingAreaProxy::removeAllTiles()

I don&apos;t think you need this method at all now. The tiles are cleared when the old tileset is not needed anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443850</commentid>
    <comment_count>17</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-29 01:41:42 -0700</bug_when>
    <thetext>Thx! As told in the corridor, removeAllTiles was already used by setTileSize so I kept it there.

Committed r91979: &lt;http://trac.webkit.org/changeset/91979&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443924</commentid>
    <comment_count>18</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-29 06:38:51 -0700</bug_when>
    <thetext>The patch caused a RefPtr assert in debug (hummm see comment #15).
Fixed it in http://trac.webkit.org/changeset/91990 .

There is also a segmentation fault on shutdown that was introduced by the tileset patch, working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443950</commentid>
    <comment_count>19</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-07-29 08:30:06 -0700</bug_when>
    <thetext>Fixed the segfault in http://trac.webkit.org/changeset/91994</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101163</attachid>
            <date>2011-07-18 08:59:52 -0700</date>
            <delta_ts>2011-07-26 05:36:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tileset.patch</filename>
            <type>text/plain</type>
            <size>28220</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzMjZhMDZiLi44ZGU2M2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTEtMDctMTggIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lh
LmNvbT4KKworICAgICAgICBUaWxlZERyYXdpbmdBcmVhOiBVc2UgdGlsZSBzZXRzIHRvIHBhaW50
IG9sZCBjb250ZW50IHdoaWxlIHJlbmRlcmluZyBmb3IgYSBuZXcgc2NhbGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDcyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGN1cnJlbnRseSBkZWxldGUg
YWxsIHRoZSB0aWxlcyB3aGVuIHNldENvbnRlbnRzU2NhbGUgaXMgY2FsbGVkLiBUaGlzIHNob3dz
IGEgYmxhbmsKKyAgICAgICAgYmFja2dyb3VuZCB0byB0aGUgdXNlciB3aGlsZSB0aGUgd2ViIHBy
b2Nlc3MgcmVuZGVyIHRpbGVzIGZvciB0aGUgbmV3IHNjYWxlLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZXh0cmFjdHMgdGhlIG93bmVyc2hpcCBvZiBpbmRpdmlkdWFsIHRpbGVzIGZyb20gVGlsZWRE
cmF3aW5nQXJlYVByb3h5IHRvCisgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0IHRvIGFs
bG93IHRoZSBwcm94eSB0byBwYWludCB0aWxlcyB3aXRoIGRpZmZlcmVudCBzY2FsZXMuCisgICAg
ICAgIFdlIGNhbiB0aGVuIHBhaW50IHRoZSB0aWxlcyB3ZSBhbHJlYWR5IGhhdmUgb24gdG9wIG9m
IHRoZSB0aWxlcyB3ZSBhcmUgcmVuZGVyaW5nIGZvcgorICAgICAgICB0aGUgbmV3IHNjYWxlIHVu
dGlsIGVub3VnaCBjb250ZW50IGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9U
aWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZVNldDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6flRpbGVkRHJhd2luZ0FyZWFQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZVVwZGF0ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbmNlbFRpbGVVcGRhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6Y3JlYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VGlsZVNpemUpOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGVCdWZmZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVyVXBkYXRlQ29t
cGxldGUpOgorICAgICAgICBDaGVjayBpZiB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcHJldmlvdXMg
c2NhbGUgdGlsZSBzZXQuCisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0
OjpwYWludCk6CisgICAgICAgIEV4dHJhY3QgZnJvbSBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBh
aW50IHRoZSB0aGUgcGFpbnQgY2FsbCB0byBpbmRpdmlkdWFsIHRpbGVzLgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KToKKyAgICAgICAgQWRqdXN0IHRoZSBw
YWludGVyJ3Mgc2NhbGUgYW5kIGNhbGwgcGFpbnQgb24gYWxsIHRpbGUgc2V0cy4KKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OmNvdmVyYWdlUmF0aW8pOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldENvbnRlbnRzU2NhbGUpOgorICAg
ICAgICBLZWVwIHRoZSB0aWxlcyB3ZSBhbHJlYWR5IGhhdmUgYXMgdGhlICJwcmV2aW91cyBzY2Fs
ZSIgdGlsZXNldCBhbmQgY3JlYXRlCisgICAgICAgIGEgbmV3IHRpbGUgc2V0IHRvIGhvbGQgdGls
ZXMgcmVuZGVyZWQgZm9yIHRoZSBuZXcgc2NhbGUuCisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFUaWxlU2V0OjpyZWxlYXNlQmFja0J1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhVGlsZVNldDo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGlsZXMpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BUaWxlc091dHNpZGVSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnRpbGVBdCk6CisgICAgICAgIChXZWJL
aXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpzZXRUaWxlKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwVG9Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBGcm9tQ29udGVudHMpOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6Omhhc1BlbmRpbmdVcGRhdGVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0Ojp0aWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0Ojp0aWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhVGlsZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6On5UaWxlZERyYXdp
bmdBcmVhVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjpyZWxl
YXNlQmFja0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjpj
YW5jZWxCYWNrQnVmZmVyVXBkYXRlKToKKwogMjAxMS0wNy0xNSAgSm9jZWx5biBUdXJjb3R0ZSAg
PGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gQ29uc2lkZXIgUVRv
dWNoV2ViUGFnZSdzIHRyYW5zZm9ybSB3aGVuIHNjcm9sbGluZyB0aGUgdmlld3BvcnQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmlu
ZGV4IDI1NGUzOGIuLmVjMTZmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC01MywyMyArNTMsMzIgQEAgUGFzc093blB0
cjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKFBs
YXRmb3JtV2ViVmlldyoKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFQ
cm94eSh3ZWJWaWV3LCB3ZWJQYWdlUHJveHkpKTsKIH0KIAorVGlsZWREcmF3aW5nQXJlYVRpbGVT
ZXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KFRpbGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHks
IGZsb2F0IGNvbnRlbnRzU2NhbGUpCisgICAgOiBtX2NvbnRlbnRzU2NhbGUoY29udGVudHNTY2Fs
ZSkKKyAgICAsIG1fcHJveHkocHJveHkpCit7Cit9CisKIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
VGlsZWREcmF3aW5nQXJlYVByb3h5KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVBy
b3h5KiB3ZWJQYWdlUHJveHkpCiAgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZVRpbGVkLCB3ZWJQYWdlUHJveHkpCiAgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90
aWZpY2F0aW9uKGZhbHNlKQogICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKICAgICAsIG1fd2ViVmll
dyh3ZWJWaWV3KQorICAgICwgbV9jdXJyZW50VGlsZXMobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0KHRoaXMpKQorICAgICwgbV9wcmV2aW91c1NjYWxlVGlsZXMoMCkKICAgICAsIG1fdGlsZUJ1
ZmZlclVwZGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6dGlsZUJ1ZmZlclVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBtX3RpbGVDcmVhdGlvblRp
bWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNy
ZWF0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVm
YXVsdFRpbGVIZWlnaHQpCiAgICAgLCBtX3RpbGVDcmVhdGlvbkRlbGF5KDAuMDEpCiAgICAgLCBt
X2tlZXBBcmVhTXVsdGlwbGllcigyLjUsIDQuNSkKICAgICAsIG1fY292ZXJBcmVhTXVsdGlwbGll
cigyLCAzKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCiB7CiB9CiAKIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6flRpbGVkRHJhd2luZ0FyZWFQcm94eSgpCiB7CisgICAgZGVsZXRlIG1fY3VycmVu
dFRpbGVzOworICAgIGRlbGV0ZSBtX3ByZXZpb3VzU2NhbGVUaWxlczsKIH0KIAogdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2UoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpkaWRTZXRTaXplKGNvbnN0IEludFNpemUmIHZpZXdT
aXplKQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZVVwZGF0ZWQoaW50IHRpbGVJ
RCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgZmxvYXQgc2NhbGUsIHVuc2lnbmVkIHBl
bmRpbmdVcGRhdGVDb3VudCkKIHsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZSogdGlsZSA9IG1f
dGlsZXNCeUlELmdldCh0aWxlSUQpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlKiB0aWxlID0g
bV9jdXJyZW50VGlsZXMtPnRpbGUodGlsZUlEKTsKICAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+
SUQoKSA9PSB0aWxlSUQpOwogICAgIGlmICh0aWxlKQogICAgICAgICB0aWxlLT5pbmNvcnBvcmF0
ZVVwZGF0ZSh1cGRhdGVJbmZvLCBzY2FsZSk7CkBAIC0xNDYsOSArMTU1LDE2IEBAIHZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpyZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlCiAgICAgcGFnZSgpLT5wcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlcXVlc3RUaWxlVXBkYXRlKHRpbGVJRCwgZGlydHlS
ZWN0LCBjb250ZW50c1NjYWxlKCkpLCBwYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAotUGFzc1JlZlB0
cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxl
KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlKQordm9p
ZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCkKIHsK
LSAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGUgPSBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6Y3JlYXRlKHRoaXMsIGNvb3JkaW5hdGUpOworICAgIGlmICghcGFnZSgpLT5wcm9jZXNz
KCktPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6Q2FuY2VsVGlsZVVwZGF0ZSh0aWxlSUQpLCBwYWdl
KCktPnBhZ2VJRCgpKTsKK30KKworUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gVGls
ZWREcmF3aW5nQXJlYVRpbGVTZXQ6OmNyZWF0ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpCit7CisgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlPiB0aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZShtX3Byb3h5LCBjb29y
ZGluYXRlKTsKICAgICBzZXRUaWxlKGNvb3JkaW5hdGUsIHRpbGUpOwogICAgIHJldHVybiB0aWxl
OwogfQpAQCAtMTU4LDcgKzE3NCw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRU
aWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChtX3RpbGVTaXplID09IHNpemUp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3RpbGVTaXplID0gc2l6ZTsKLSAgICByZW1vdmVBbGxU
aWxlcygpOworICAgIG1fY3VycmVudFRpbGVzLT5yZW1vdmVBbGxUaWxlcygpOwogICAgIHN0YXJ0
VGlsZUNyZWF0aW9uVGltZXIoKTsKIH0KIApAQCAtMTc2LDcgKzE5Miw3IEBAIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxv
YXRTaXplJiBrZWVwCiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0KQogewotICAgIEludFJlY3QgZGlydHlSZWN0
KG1hcEZyb21Db250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOworICAgIEludFJlY3QgZGlydHlS
ZWN0KG1fY3VycmVudFRpbGVzLT5tYXBGcm9tQ29udGVudHMoY29udGVudHNEaXJ0eVJlY3QpKTsK
IAogICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29v
cmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKICAgICBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQo
aW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKQEAgLTE4Nyw3ICsyMDMsNyBAQCB2b2lkIFRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0Rp
cnR5UmVjdCkKIAogICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsg
eUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0g
Ym90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBSZWZQdHI8VGls
ZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gdGlsZUF0KFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSkpOworICAgICAgICAgICAg
UmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IG1fY3VycmVudFRpbGVz
LT50aWxlQXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlD
b29yZGluYXRlKSk7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRUaWxlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50VGlsZS0+cmVjdCgpLmludGVy
c2VjdHMoZGlydHlSZWN0KSkKQEAgLTIwMyw3ICsyMTksNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIAog
ICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIHJlbW92ZVRp
bGUodGlsZXNUb1JlbW92ZVtuXSk7CisgICAgICAgIG1fY3VycmVudFRpbGVzLT5yZW1vdmVUaWxl
KHRpbGVzVG9SZW1vdmVbbl0pOwogCiAgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsK
IH0KQEAgLTIxMSw4ICsyMjcsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aW52YWxp
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5Ojp1cGRhdGVUaWxlQnVmZmVycygpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxUaWxl
ZERyYXdpbmdBcmVhVGlsZT4gPiBuZXdEaXJ0eVRpbGVzOwotICAgIFRpbGVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVzLT50aWxlcygpLmVu
ZCgpOworICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+c2Vj
b25kOwogICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRGlydHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMjMxLDggKzI0Nyw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxl
QnVmZmVyVXBkYXRlQ29tcGxldGUoKQogewogICAgIC8vIEJhaWwgb3V0IGlmIGFsbCB0aWxlIGJh
Y2sgYnVmZmVycyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQuCiAgICAgVmVjdG9yPFRpbGVkRHJhd2lu
Z0FyZWFUaWxlKj4gdGlsZXNUb0ZsaXA7Ci0gICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGls
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuZW5kKCk7CisgICAg
Zm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1
cnJlbnRUaWxlcy0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
UmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3VycmVudCA9IGl0LT5zZWNvbmQ7CiAgICAg
ICAgIGlmIChjdXJyZW50LT5pc1JlYWR5VG9QYWludCgpICYmIChjdXJyZW50LT5pc0RpcnR5KCkg
fHwgY3VycmVudC0+aGFzQmFja0J1ZmZlclVwZGF0ZVBlbmRpbmcoKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yNDYsMTUgKzI2Miw0MCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
dGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCkKICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGUq
IHRpbGUgPSB0aWxlc1RvRmxpcFtuXTsKICAgICAgICAgdGlsZS0+c3dhcEJhY2tCdWZmZXJUb0Zy
b250KCk7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IHJlcXVlc3Qgc3lzdGVtIHJlcGFp
bnQgZm9yIHRoZSBmdWxsIHRpbGUuCi0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZChtYXBUb0Nv
bnRlbnRzKHRpbGUtPnJlY3QoKSkpOworICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQobV9jdXJy
ZW50VGlsZXMtPm1hcFRvQ29udGVudHModGlsZS0+cmVjdCgpKSk7CiAgICAgfQotICAgIGlmIChz
aXplKQorCisgICAgaWYgKG1fcHJldmlvdXNTY2FsZVRpbGVzICYmIChtX2N1cnJlbnRUaWxlcy0+
Y292ZXJhZ2VSYXRpbyh2aXNpYmxlUmVjdCgpKSA+PSAxLjBmIHx8ICFoYXNQZW5kaW5nVXBkYXRl
cygpKSkgeworICAgICAgICBwYWludGVkQXJlYS5jbGVhcigpOworICAgICAgICBwYWludGVkQXJl
YS5hcHBlbmQobV92aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBkZWxldGUgbV9wcmV2aW91
c1NjYWxlVGlsZXM7CisgICAgICAgIG1fcHJldmlvdXNTY2FsZVRpbGVzID0gMDsKKyAgICB9CisK
KyAgICBpZiAoIXBhaW50ZWRBcmVhLmlzRW1wdHkoKSkKICAgICAgICAgdXBkYXRlV2ViVmlldyhw
YWludGVkQXJlYSk7CiAKICAgICBtX3RpbGVDcmVhdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
IH0KIAotYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0IEludFJlY3QmIHJl
Y3QsIFBsYXRmb3JtRHJhd2luZ0NvbnRleHQgY29udGV4dCkKK3ZvaWQgVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6OnBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYgZ2MpCit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29udGVudHMocmVj
dCk7CisKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gbV9w
cm94eS0+dGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7CisgICAg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSBtX3Byb3h5LT50
aWxlQ29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0KSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlDb29yZGluYXRlIDw9
IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0Lngo
KTsgKyt4Q29vcmRpbmF0ZSkgeworICAgICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxl
QXQoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRUaWxlICYmIGN1
cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRUaWxl
LT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCBQ
bGF0Zm9ybURyYXdpbmdDb250ZXh0IGNvbnRleHQpCiB7CiAgICAgaWYgKG1faXNXYWl0aW5nRm9y
RGlkU2V0RnJhbWVOb3RpZmljYXRpb24pIHsKICAgICAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
dGhpcy0+cGFnZSgpOwpAQCAtMjcwLDIyICszMTEsMTkgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OnBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIFBsYXRmb3JtRHJhd2luZ0NvbnRleHQg
Y28KIAogICAgIC8vIEFzc3VtZXMgdGhlIGJhY2tpbmcgc3RvcmUgaXMgcGFpbnRlZCB3aXRoIHRo
ZSBzY2FsZSB0cmFuc2Zvcm0gYXBwbGllZC4KICAgICAvLyBTaW5jZSB0aWxlIGNvbnRlbnQgaXMg
YWxyZWFkeSBzY2FsZWQsIGZpcnN0IHJldmVydCB0aGUgc2NhbGluZyBmcm9tIHRoZSBwYWludGVy
LgotICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxIC8gbV9jb250ZW50c1NjYWxlLCAxIC8gbV9jb250
ZW50c1NjYWxlKSk7Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50cyhy
ZWN0KTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0
aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKLSAgICBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9y
UG9pbnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKLQotICAgIGZvciAodW5zaWduZWQg
eUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgp
OyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0
b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRl
KSB7Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50
Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOwotICAgICAgICAgICAgUmVmUHRy
PFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRpbGVBdChjdXJyZW50Q29vcmRp
bmF0ZSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVh
ZHlUb1BhaW50KCkpCi0gICAgICAgICAgICAgICAgY3VycmVudFRpbGUtPnBhaW50KCZnYywgZGly
dHlSZWN0KTsKLSAgICAgICAgfQorICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxIC8gbV9jdXJyZW50
VGlsZXMtPmNvbnRlbnRzU2NhbGUoKSwgMSAvIG1fY3VycmVudFRpbGVzLT5jb250ZW50c1NjYWxl
KCkpKTsKKyAgICBtX2N1cnJlbnRUaWxlcy0+cGFpbnQocmVjdCwgZ2MpOworCisgICAgLy8gUGFp
bnQgdGhlIHByZXZpb3VzIHNjYWxlIHRpbGVzLCBpZiBhbnksIG92ZXIgdGhlIGN1cnJlbnRseSB1
cGRhdGluZyB0aWxlcy4KKyAgICBpZiAobV9wcmV2aW91c1NjYWxlVGlsZXMpIHsKKyAgICAgICAg
Ly8gUmUtYXBwbHkgdGhlIHJldmVydGVkIGN1cnJlbnQgdGlsZXMgc2NhbGluZyBhbmQgdGhlbgor
ICAgICAgICAvLyByZXZlcnQgdGhlIHByZXZpb3VzIHRpbGVzIHNjYWxpbmcgdG8gZ2V0IG1hdGNo
ZWQgY29udGVudHMgc2NhbGUuCisgICAgICAgIGZsb2F0IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0
ZWRTY2FsZSA9IG1fY3VycmVudFRpbGVzLT5jb250ZW50c1NjYWxlKCkgLyBtX3ByZXZpb3VzU2Nh
bGVUaWxlcy0+Y29udGVudHNTY2FsZSgpOworICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUoY3Vy
cmVudFRvUHJldmlvdXNSZXZlcnRlZFNjYWxlLCBjdXJyZW50VG9QcmV2aW91c1JldmVydGVkU2Nh
bGUpKTsKKyAgICAgICAgbV9wcmV2aW91c1NjYWxlVGlsZXMtPnBhaW50KHJlY3QsIGdjKTsKICAg
ICB9CiAKKwogICAgIGdjLnJlc3RvcmUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI5OCwx
NiArMzM2LDU5IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsCiAgICAgfQogfQogCitmbG9hdCBU
aWxlZERyYXdpbmdBcmVhVGlsZVNldDo6Y292ZXJhZ2VSYXRpbyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIEludFJlY3QgZGlydHlSZWN0ID0gbWFwRnJvbUNvbnRlbnRzKHJl
Y3QpOworICAgIGZsb2F0IHJlY3RBcmVhID0gZGlydHlSZWN0LndpZHRoKCkgKiBkaXJ0eVJlY3Qu
aGVpZ2h0KCk7CisgICAgZmxvYXQgY292ZXJBcmVhID0gMC4wZjsKKworICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSBtX3Byb3h5LT50aWxlQ29vcmRpbmF0ZUZv
clBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9IG1fcHJveHktPnRpbGVDb29yZGluYXRlRm9yUG9pbnQo
aW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKKworICAgIGZvciAodW5zaWduZWQgeUNvb3Jk
aW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lD
b29yZGluYXRlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0
LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7Cisg
ICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRp
bmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOworICAgICAgICAgICAgUmVmUHRyPFRpbGVk
RHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRpbGVBdChUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpKTsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50VGlsZSAmJiBjdXJyZW50VGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkgeworICAgICAg
ICAgICAgICAgIEludFJlY3QgY292ZXJSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgY3Vy
cmVudFRpbGUtPnJlY3QoKSk7CisgICAgICAgICAgICAgICAgY292ZXJBcmVhICs9IGNvdmVyUmVj
dC53aWR0aCgpICogY292ZXJSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBjb3ZlckFyZWEgLyByZWN0QXJlYTsKK30KKwogdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCiB7Ci0gICAg
aWYgKG1fY29udGVudHNTY2FsZSA9PSBzY2FsZSkKKyAgICBpZiAobV9jdXJyZW50VGlsZXMtPmNv
bnRlbnRzU2NhbGUoKSA9PSBzY2FsZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGVudHNT
Y2FsZSA9IHNjYWxlOwotICAgIHJlbW92ZUFsbFRpbGVzKCk7CisKKyAgICAvLyBLZWVwIHRoZSBj
dXJyZW50IHRpbGVzIGluIG1fcHJldmlvdXNTY2FsZVRpbGVzIHdoaWxlIHRoZSBuZXcgc2NhbGUg
dGlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQuCisgICAgLy8gSWYgbV9jdXJyZW50VGlsZXMgc3RpbGwg
aGFzbid0IG1vcmUgcGFpbnRhYmxlIGNvbnRlbnQgZm9yIHRoZSBjdXJyZW50IHZpZXdwb3J0IHJl
Y3QKKyAgICAvLyB0aGFuIG1fcHJldmlvdXNTY2FsZVRpbGVzLCB0aGVuIGtlZXAgdGhlIG9sZCBt
X3ByZXZpb3VzU2NhbGVUaWxlcy4gVGhpcyBoYXBwZW5zIHdoZW4KKyAgICAvLyBzZXRDb250ZW50
c1NjYWxlIGlzIGNhbGxlZCB0d2ljZSB3aGlsZSBtX2N1cnJlbnRUaWxlcyBzdGlsbCBjb250YWlu
cyBmZXcgb3Igbm8gcmVuZGVyZWQgdGlsZXMuCisgICAgaWYgKCFtX3ByZXZpb3VzU2NhbGVUaWxl
cyB8fCBtX3ByZXZpb3VzU2NhbGVUaWxlcy0+Y292ZXJhZ2VSYXRpbyh2aXNpYmxlUmVjdCgpKSA8
IG1fY3VycmVudFRpbGVzLT5jb3ZlcmFnZVJhdGlvKHZpc2libGVSZWN0KCkpKSB7CisgICAgICAg
IGRlbGV0ZSBtX3ByZXZpb3VzU2NhbGVUaWxlczsKKyAgICAgICAgbV9wcmV2aW91c1NjYWxlVGls
ZXMgPSBtX2N1cnJlbnRUaWxlczsKKyAgICAgICAgbV9wcmV2aW91c1NjYWxlVGlsZXMtPnJlbGVh
c2VCYWNrQnVmZmVycygpOworICAgICAgICBtX2N1cnJlbnRUaWxlcyA9IDA7CisgICAgfQorICAg
IGRlbGV0ZSBtX2N1cnJlbnRUaWxlczsKKyAgICBtX2N1cnJlbnRUaWxlcyA9IG5ldyBUaWxlZERy
YXdpbmdBcmVhVGlsZVNldCh0aGlzLCBzY2FsZSk7CiAgICAgY3JlYXRlVGlsZXMoKTsKIH0KIAot
dm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbW92ZUFsbFRpbGVzKCkKK3ZvaWQgVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OnJlbGVhc2VCYWNrQnVmZmVycygpCit7CisgICAgVGlsZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgY29uc3QgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3VycmVudCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGN1cnJlbnQtPmNhbmNlbEJhY2tCdWZmZXJVcGRhdGUoKTsKKyAgICAg
ICAgY3VycmVudC0+cmVsZWFzZUJhY2tCdWZmZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OnJlbW92ZUFsbFRpbGVzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRy
PFRpbGVkRHJhd2luZ0FyZWFUaWxlPiA+IHRpbGVzVG9SZW1vdmU7CiAgICAgY29weVZhbHVlc1Rv
VmVjdG9yKG1fdGlsZXMsIHRpbGVzVG9SZW1vdmUpOwpAQCAtMzc1LDcgKzQ1Niw3IEBAIHZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcygpCiAgICAgICAgICAgICAvLyBEaXN0
YW5jZSBpcyAwIGZvciBhbGwgY3VycmVudGx5IHZpc2libGUgdGlsZXMuCiAgICAgICAgICAgICBk
b3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UodmlzaWJsZVJlY3QsIGN1cnJlbnRDb29yZGlu
YXRlKTsKIAotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0g
dGlsZUF0KGN1cnJlbnRDb29yZGluYXRlKTsKKyAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdp
bmdBcmVhVGlsZT4gdGlsZSA9IG1fY3VycmVudFRpbGVzLT50aWxlQXQoY3VycmVudENvb3JkaW5h
dGUpOwogICAgICAgICAgICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRpbGUgfHwgIXRpbGUtPmlzUmVh
ZHlUb1BhaW50KCkpKQogICAgICAgICAgICAgICAgIGhhc1Zpc2libGVDaGVja2VycyA9IHRydWU7
CiAgICAgICAgICAgICBpZiAodGlsZSkKQEAgLTM5OSw3ICs0ODAsNyBAQCB2b2lkIFRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMoKQogICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIHRp
bGUocykuCiAgICAgdW5zaWduZWQgdGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRpbGVzVG9DcmVhdGVDb3VudDsg
KytuKQotICAgICAgICBjcmVhdGVUaWxlKHRpbGVzVG9DcmVhdGVbbl0pOworICAgICAgICBtX2N1
cnJlbnRUaWxlcy0+Y3JlYXRlVGlsZSh0aWxlc1RvQ3JlYXRlW25dKTsKIAogICAgIHJlcXVpcmVk
VGlsZUNvdW50IC09IHRpbGVzVG9DcmVhdGVDb3VudDsKIApAQCAtNDE4LDggKzQ5OSw4IEBAIGJv
b2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGlsZXMoKQogICAgIGJvb2wgd2Fz
UmVzaXplZCA9IGZhbHNlOwogCiAgICAgVmVjdG9yPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29y
ZGluYXRlPiB0aWxlc1RvUmVtb3ZlOwotICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGls
ZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVzLT50aWxlcygpLmVuZCgpOworICAgIGZv
ciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJy
ZW50VGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29u
ZC0+Y29vcmRpbmF0ZSgpOwogICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+
cmVjdCgpOwogICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGlsZVJlY3QgPSB0aWxlUmVjdEZvckNv
b3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwpAQCAtNDMyLDcgKzUxMyw3IEBAIGJvb2wgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGlsZXMoKQogICAgIH0KICAgICB1bnNpZ25lZCBy
ZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICByZW1vdmVUaWxlKHRpbGVzVG9SZW1v
dmVbbl0pOworICAgICAgICBtX2N1cnJlbnRUaWxlcy0+cmVtb3ZlVGlsZSh0aWxlc1RvUmVtb3Zl
W25dKTsKICAgICByZXR1cm4gd2FzUmVzaXplZDsKIH0KIApAQCAtNDQxLDggKzUyMiw4IEBAIHZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRS
ZWN0JiBrZWVwUmVjdCkKICAgICBGbG9hdFJlY3Qga2VlcFJlY3RGID0ga2VlcFJlY3Q7CiAKICAg
ICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwotICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVu
dFRpbGVzLT50aWxlcygpLmVuZCgpOworICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
OlRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7CiAgICAgICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKICAgICAgICAgaWYgKCF0aWxlUmVj
dC5pbnRlcnNlY3RzKGtlZXBSZWN0RikpCkBAIC00NTAsMzMgKzUzMSwyOSBAQCB2b2lkIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2Vl
cFJlY3QpCiAgICAgfQogICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9SZW1vdmUuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAg
ICByZW1vdmVUaWxlKHRvUmVtb3ZlW25dKTsKKyAgICAgICAgbV9jdXJyZW50VGlsZXMtPnJlbW92
ZVRpbGUodG9SZW1vdmVbbl0pOwogfQogCi1QYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxl
PiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVBdChjb25zdCBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkgY29uc3QKK1Bhc3NSZWZQdHI8VGlsZWREcmF3aW5n
QXJlYVRpbGU+IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Ojp0aWxlQXQoY29uc3QgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fdGlsZXMuZ2V0KGNvb3JkaW5hdGUpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6c2V0VGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRp
bmF0ZSwgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlKQordm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZVNldDo6c2V0VGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRp
bmF0ZSYgY29vcmRpbmF0ZSwgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSkK
IHsKLSAgICBtX3RpbGVzLnNldChjb29yZGluYXRlLCB0aWxlKTsKLSAgICBtX3RpbGVzQnlJRC5z
ZXQodGlsZS0+SUQoKSwgdGlsZS5nZXQoKSk7CisgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiB0aWxlUmVmID0gdGlsZTsKKyAgICBtX3RpbGVzLnNldChjb29yZGluYXRlLCB0aWxlUmVm
KTsKKyAgICBtX3RpbGVzQnlJRC5zZXQodGlsZVJlZi0+SUQoKSwgdGlsZVJlZi5nZXQoKSk7CiB9
CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKGNvbnN0IFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlKQordm9pZCBUaWxlZERyYXdpbmdB
cmVhVGlsZVNldDo6cmVtb3ZlVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRp
bmF0ZSYgY29vcmRpbmF0ZSkKIHsKICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRp
bGUgPSBtX3RpbGVzLnRha2UoY29vcmRpbmF0ZSk7CiAKICAgICBtX3RpbGVzQnlJRC5yZW1vdmUo
dGlsZS0+SUQoKSk7Ci0KLSAgICBpZiAoIXRpbGUtPmhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdl
KCk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6Q2Fu
Y2VsVGlsZVVwZGF0ZSh0aWxlLT5JRCgpKSwgcGFnZS0+cGFnZUlEKCkpOwogfQogCi1JbnRSZWN0
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwVG9Db250ZW50cyhj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KEZsb2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRzU2NhbGUsCkBAIC00ODQs
NyArNTYxLDcgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6Om1hcFRvQ29udGVudHMo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVjdC5oZWlnaHQoKSAvIG1fY29udGVudHNTY2FsZSkpOwogfQogCi1JbnRSZWN0
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CitJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBGcm9tQ29udGVu
dHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChGbG9hdFJlY3QocmVjdC54KCkgKiBtX2NvbnRlbnRzU2NhbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICogbV9jb250ZW50c1NjYWxlLApAQCAt
NDk0LDEyICs1NzEsMTIgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6Om1hcEZyb21D
b250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogCiBJbnRSZWN0IFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFwRnJvbUNv
bnRlbnRzKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKKyAgICByZXR1cm4g
bV9jdXJyZW50VGlsZXMtPm1hcEZyb21Db250ZW50cyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBt
X3ZpZXdTaXplKSk7CiB9CiAKIEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp2aXNpYmxl
UmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1hcEZyb21Db250ZW50cyhtX3Zpc2libGVDb250
ZW50UmVjdCk7CisgICAgcmV0dXJuIG1fY3VycmVudFRpbGVzLT5tYXBGcm9tQ29udGVudHMobV92
aXNpYmxlQ29udGVudFJlY3QpOwogfQogCiBJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
dGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlJiBjb29yZGluYXRlKSBjb25zdApAQCAtNTQ3LDggKzYyNCw4IEBAIHZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5Ojp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKCkKIAogYm9vbCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6Omhhc1BlbmRpbmdVcGRhdGVzKCkgY29uc3QKIHsKLSAgICBUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2N1cnJlbnRUaWxlcy0+dGlsZXMoKS5lbmQoKTsKKyAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY3VycmVudFRpbGVzLT50aWxl
cygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBSZWZQdHI8VGls
ZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYgKGN1
cnJlbnQtPmhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJv
eHkuaAppbmRleCAxNGRlYjYyLi44YzIwMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCkBAIC00NSw2ICs0NSwxMCBAQCBjbGFzcyBX
S1ZpZXc7CiAjZW5kaWYKICNlbmRpZgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTaGFyZWFibGVC
aXRtYXA7CkBAIC02MCw2ICs2NCwzNiBAQCBjbGFzcyBUb3VjaFZpZXdJbnRlcmZhY2U7CiB0eXBl
ZGVmIFRvdWNoVmlld0ludGVyZmFjZSBQbGF0Zm9ybVdlYlZpZXc7CiAjZW5kaWYKIAorY2xhc3Mg
VGlsZWREcmF3aW5nQXJlYVByb3h5OworY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQgewor
cHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRp
bmF0ZSwgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiA+IFRpbGVNYXA7CisKKyAgICBUaWxl
ZERyYXdpbmdBcmVhVGlsZVNldChUaWxlZERyYXdpbmdBcmVhUHJveHkqLCBmbG9hdCBjb250ZW50
c1NjYWxlID0gMS4wZik7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVudHMoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJv
bUNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKworICAgIHZvaWQgcGFp
bnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwor
ICAgIFRpbGVNYXAmIHRpbGVzKCkgeyByZXR1cm4gbV90aWxlczsgfQorICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlKiB0aWxlKGludCB0aWxlSUQpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNCeUlELmdl
dCh0aWxlSUQpOyB9CisgICAgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZUF0
KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3JlYXRlVGlsZShjb25zdCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZvaWQgc2V0VGlsZShjb25zdCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYsIFBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRp
bGU+KTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFRpbGVzKCk7CisKKyAgICBmbG9hdCBjb250
ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NjYWxlOyB9CisgICAgZmxvYXQg
Y292ZXJhZ2VSYXRpbyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCByZWxlYXNl
QmFja0J1ZmZlcnMoKTsKKworcHJpdmF0ZToKKyAgICBUaWxlTWFwIG1fdGlsZXM7CisgICAgV1RG
OjpIYXNoTWFwPGludCwgVGlsZWREcmF3aW5nQXJlYVRpbGUqPiBtX3RpbGVzQnlJRDsKKyAgICBm
bG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgVGlsZWREcmF3aW5nQXJlYVByb3h5KiBtX3Byb3h5
OworfTsKKwogY2xhc3MgVGlsZWREcmF3aW5nQXJlYVByb3h5IDogcHVibGljIERyYXdpbmdBcmVh
UHJveHkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbGVkRHJhd2luZ0FyZWFQ
cm94eT4gY3JlYXRlKFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5Kik7CkBA
IC02OCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGlsZWREcmF3aW5nQXJlYVBy
b3h5KCk7CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNTY2FsZTsgfQorICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRUaWxlcy0+Y29udGVudHNTY2FsZSgpOyB9CiAgICAgdm9pZCBzZXRDb250ZW50c1Nj
YWxlKGZsb2F0KTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTk0LDkg
KzEyOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7
CiAKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLQogICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0ZXMo
KSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTExNCw4ICsxNDUsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBhbGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpOwogCiAgICAgdm9pZCByZXF1ZXN0
VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qp
OworICAgIHZvaWQgY2FuY2VsVGlsZVVwZGF0ZShpbnQgdGlsZUlEKTsKIAotICAgIFBhc3NSZWZQ
dHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGNyZWF0ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJl
YVRpbGU6OkNvb3JkaW5hdGUmKTsKIAogICAgIHZvaWQgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGlt
ZXIoKTsKICAgICB2b2lkIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKQEAgLTEyOSwxMSArMTYw
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIHJlc2l6ZUVkZ2VUaWxlcygpOwogICAgIHZvaWQgZHJv
cFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCi0gICAgUGFzc1Jl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZUF0KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRUaWxlKGNvbnN0IFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5n
QXJlYVRpbGU+IHRpbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShjb25zdCBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxUaWxl
cygpOwotCiAgICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IHZpc2libGVSZWN0KCkgY29uc3Q7CiAKQEAgLTE1MywxMCArMTc5LDgg
QEAgcHJpdmF0ZToKIAogICAgIFBsYXRmb3JtV2ViVmlldyogbV93ZWJWaWV3OwogCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlLCBSZWZQdHI8VGls
ZWREcmF3aW5nQXJlYVRpbGU+ID4gVGlsZU1hcDsKLSAgICBUaWxlTWFwIG1fdGlsZXM7Ci0KLSAg
ICBXVEY6Okhhc2hNYXA8aW50LCBUaWxlZERyYXdpbmdBcmVhVGlsZSo+IG1fdGlsZXNCeUlEOwor
ICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KiBtX2N1cnJlbnRUaWxlczsKKyAgICBUaWxlZERy
YXdpbmdBcmVhVGlsZVNldCogbV9wcmV2aW91c1NjYWxlVGlsZXM7CiAKICAgICB0eXBlZGVmIFJ1
bkxvb3A6OlRpbWVyPFRpbGVkRHJhd2luZ0FyZWFQcm94eT4gVGlsZVRpbWVyOwogICAgIFRpbGVU
aW1lciBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lcjsKQEAgLTE2OCw5ICsxOTIsOSBAQCBwcml2YXRl
OgogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OwotICAgIGZsb2F0IG1fY29udGVu
dHNTY2FsZTsKIAogICAgIGZyaWVuZCBjbGFzcyBUaWxlZERyYXdpbmdBcmVhVGlsZTsKKyAgICBm
cmllbmQgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdp
bmdBcmVhVGlsZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFU
aWxlLmgKaW5kZXggN2YxYWU1Mi4uNmE3NjY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVCYWNrQnVmZmVyKCk7CisgICAgdm9pZCBj
YW5jZWxCYWNrQnVmZmVyVXBkYXRlKCk7CiAgICAgYm9vbCBoYXNSZWFkeUJhY2tCdWZmZXIoKSBj
b25zdDsKICAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwogICAgIGJvb2wgaXNSZWFk
eVRvUGFpbnQoKSBjb25zdDsKQEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVz
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAogICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRh
dGUoY29uc3QgVXBkYXRlSW5mbyYsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbGVhc2VCYWNr
QnVmZmVyKCk7CiAKICAgICBpbnQgSUQoKSBjb25zdCB7IHJldHVybiBtX0lEOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0
LmNwcAppbmRleCBhOWRmYjg0Li4zOTM2MzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCkBAIC02MSw2ICs2MSw3
IEBAIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp+VGlsZWREcmF3aW5nQXJlYVRpbGUoKQogI2lmZGVm
IFRJTEVfREVCVUdfTE9HCiAgICAgcURlYnVnKCkgPDwgImRlbGV0aW5nIHRpbGUgaWQ9IiA8PCBt
X0lEOwogI2VuZGlmCisgICAgY2FuY2VsQmFja0J1ZmZlclVwZGF0ZSgpOwogfQogCiBib29sIFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjppc0RpcnR5KCkgY29uc3QKQEAgLTE0Myw2ICsxNDQsMTEgQEAg
dm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbywgZmxvYXQKICAgICBwYWludGVyLmRyYXdJbWFnZShRUG9pbnQoZHJh
d1BvaW50LndpZHRoKCksIGRyYXdQb2ludC5oZWlnaHQoKSksIGltYWdlKTsKIH0KIAordm9pZCBU
aWxlZERyYXdpbmdBcmVhVGlsZTo6cmVsZWFzZUJhY2tCdWZmZXIoKQoreworICAgIG1fYmFja0J1
ZmZlciA9IFFQaXhtYXAoKTsKK30KKwogdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRl
QmFja0J1ZmZlcigpCiB7CiAgICAgaWYgKGlzUmVhZHlUb1BhaW50KCkgJiYgIWlzRGlydHkoKSkK
QEAgLTE2Miw0ICsxNjgsMTQgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRlQmFj
a0J1ZmZlcigpCiAgICAgbV9oYXNVcGRhdGVQZW5kaW5nID0gdHJ1ZTsKIH0KIAordm9pZCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Y2FuY2VsQmFja0J1ZmZlclVwZGF0ZSgpCit7CisgICAgaWYgKCFt
X2hhc1VwZGF0ZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJveHktPmNhbmNl
bFRpbGVVcGRhdGUobV9JRCk7CisKKyAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTsKK30K
KwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101165</attachid>
            <date>2011-07-18 09:03:05 -0700</date>
            <delta_ts>2011-07-26 05:36:34 -0700</delta_ts>
            <desc>Move to own file patch</desc>
            <filename>tilesetFile.patch</filename>
            <type>text/plain</type>
            <size>21924</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ZGU2M2YxLi5mZDVhNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYg
QEAKIDIwMTEtMDctMTggIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lh
LmNvbT4KIAorICAgICAgICBNb3ZlIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0IHRvIGl0J3Mgb3du
IHNvdXJjZSBmaWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjQ3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb21wbGV0ZXMgdGhlIHByZXZpb3VzIGNvbW1pdCwgc2VwYXJhdGVkIHRvIG1ha2UgdGhl
IGRpZmYKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5Ojppbm5lckJvdHRvbVJpZ2h0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0
OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0OjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0Ojp0aWxlQXQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNl
dDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0
OjpzZXRUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnJl
bW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6cmVt
b3ZlQWxsVGlsZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6
bWFwVG9Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0
OjptYXBGcm9tQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGls
ZVNldDo6Y292ZXJhZ2VSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0OjpyZWxlYXNlQmFja0J1ZmZlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERy
YXdpbmdBcmVhVGlsZVNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6OnRpbGVzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ6OnRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6
Y29udGVudHNTY2FsZSk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisKKzIwMTEtMDctMTggIEpv
Y2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKwogICAgICAgICBU
aWxlZERyYXdpbmdBcmVhOiBVc2UgdGlsZSBzZXRzIHRvIHBhaW50IG9sZCBjb250ZW50IHdoaWxl
IHJlbmRlcmluZyBmb3IgYSBuZXcgc2NhbGUuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDcyOAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGVjMTZmY2MuLjI0MjkxMTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJ
RC5oIgorI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0LmgiCiAjaW5jbHVkZSAiVXBk
YXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgpAQCAtNDIsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHN0
YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVXaWR0aCA9IDEwMjQ7CiBzdGF0aWMgY29uc3QgaW50
IGRlZmF1bHRUaWxlSGVpZ2h0ID0gMTAyNDsKIAotc3RhdGljIEludFBvaW50IGlubmVyQm90dG9t
UmlnaHQoY29uc3QgSW50UmVjdCYgcmVjdCkKK1dlYkNvcmU6OkludFBvaW50IFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6aW5uZXJCb3R0b21SaWdodChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQogewogICAgIC8vIEFjdHVhbGx5LCB0aGUgcmVjdCBkb2VzIG5vdCBjb250YWluIHJlY3QubWF4
WCgpLiBSZWZlciB0byBJbnRSZWN0Ojpjb250YWluLgogICAgIHJldHVybiBJbnRQb2ludChyZWN0
Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7CkBAIC01MywxMiArNTQsNiBAQCBQYXNzT3du
UHRyPFRpbGVkRHJhd2luZ0FyZWFQcm94eT4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUo
UGxhdGZvcm1XZWJWaWV3KgogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJl
YVByb3h5KHdlYlZpZXcsIHdlYlBhZ2VQcm94eSkpOwogfQogCi1UaWxlZERyYXdpbmdBcmVhVGls
ZVNldDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94
eSwgZmxvYXQgY29udGVudHNTY2FsZSkKLSAgICA6IG1fY29udGVudHNTY2FsZShjb250ZW50c1Nj
YWxlKQotICAgICwgbV9wcm94eShwcm94eSkKLXsKLX0KLQogVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdl
UHJveHkqIHdlYlBhZ2VQcm94eSkKICAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFU
eXBlVGlsZWQsIHdlYlBhZ2VQcm94eSkKICAgICAsIG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVO
b3RpZmljYXRpb24oZmFsc2UpCkBAIC0xNjIsMTMgKzE1Nyw2IEBAIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpCiAgICAgcGFnZSgpLT5wcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpDYW5jZWxUaWxlVXBkYXRlKHRpbGVJ
RCksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi1QYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6Y3JlYXRlVGlsZShjb25zdCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkKLXsKLSAgICBSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+IHRpbGUgPSBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Y3JlYXRlKG1fcHJv
eHksIGNvb3JkaW5hdGUpOwotICAgIHNldFRpbGUoY29vcmRpbmF0ZSwgdGlsZSk7Ci0gICAgcmV0
dXJuIHRpbGU7Ci19Ci0KIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChtX3RpbGVTaXplID09IHNpemUpCkBAIC0y
NzgsMjIgKzI2Niw2IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVyVXBk
YXRlQ29tcGxldGUoKQogICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwog
fQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpwYWludChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdjKQotewotICAgIEludFJlY3QgZGlydHlS
ZWN0ID0gbWFwRnJvbUNvbnRlbnRzKHJlY3QpOwotCi0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUgdG9wTGVmdCA9IG1fcHJveHktPnRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGly
dHlSZWN0LmxvY2F0aW9uKCkpOwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRl
IGJvdHRvbVJpZ2h0ID0gbV9wcm94eS0+dGlsZUNvb3JkaW5hdGVGb3JQb2ludChpbm5lckJvdHRv
bVJpZ2h0KGRpcnR5UmVjdCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRv
cExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29v
cmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAg
IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGN1cnJlbnRDb29yZGluYXRlKHhDb29y
ZGluYXRlLCB5Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJl
YVRpbGU+IGN1cnJlbnRUaWxlID0gdGlsZUF0KGN1cnJlbnRDb29yZGluYXRlKTsKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50VGlsZSAmJiBjdXJyZW50VGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkKLSAg
ICAgICAgICAgICAgICBjdXJyZW50VGlsZS0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAg
ICB9Ci0gICAgfQotfQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgUGxhdGZvcm1EcmF3aW5nQ29udGV4dCBjb250ZXh0KQog
ewpAQCAtMzM2LDI4ICszMDgsNiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libAogICAgIH0KIH0K
IAotZmxvYXQgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OmNvdmVyYWdlUmF0aW8oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21D
b250ZW50cyhyZWN0KTsKLSAgICBmbG9hdCByZWN0QXJlYSA9IGRpcnR5UmVjdC53aWR0aCgpICog
ZGlydHlSZWN0LmhlaWdodCgpOwotICAgIGZsb2F0IGNvdmVyQXJlYSA9IDAuMGY7Ci0KLSAgICBU
aWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gbV9wcm94eS0+dGlsZUNv
b3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7Ci0gICAgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSBtX3Byb3h5LT50aWxlQ29vcmRpbmF0
ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0KSk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0
LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRl
ID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRp
bmF0ZSkgewotICAgICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY3Vy
cmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkp
IHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IGludGVyc2VjdGlvbihkaXJ0
eVJlY3QsIGN1cnJlbnRUaWxlLT5yZWN0KCkpOwotICAgICAgICAgICAgICAgIGNvdmVyQXJlYSAr
PSBjb3ZlclJlY3Qud2lkdGgoKSAqIGNvdmVyUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY292ZXJBcmVhIC8gcmVjdEFyZWE7Ci19Ci0K
IHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxl
KQogewogICAgIGlmIChtX2N1cnJlbnRUaWxlcy0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQpA
QCAtMzc4LDI1ICszMjgsNiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0Q29udGVu
dHNTY2FsZShmbG9hdCBzY2FsZSkKICAgICBjcmVhdGVUaWxlcygpOwogfQogCi12b2lkIFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0OjpyZWxlYXNlQmFja0J1ZmZlcnMoKQotewotICAgIFRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGNvbnN0IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+
c2Vjb25kOwotICAgICAgICBjdXJyZW50LT5jYW5jZWxCYWNrQnVmZmVyVXBkYXRlKCk7Ci0gICAg
ICAgIGN1cnJlbnQtPnJlbGVhc2VCYWNrQnVmZmVyKCk7Ci0gICAgfQotfQotCi12b2lkIFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0OjpyZW1vdmVBbGxUaWxlcygpCi17Ci0gICAgVmVjdG9yPFJlZlB0
cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiB0aWxlc1RvUmVtb3ZlOwotICAgIGNvcHlWYWx1ZXNU
b1ZlY3RvcihtX3RpbGVzLCB0aWxlc1RvUmVtb3ZlKTsKLSAgICB1bnNpZ25lZCByZW1vdmVDb3Vu
dCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBy
ZW1vdmVDb3VudDsgKytuKQotICAgICAgICByZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0tPmNv
b3JkaW5hdGUoKSk7Ci19Ci0KIGRvdWJsZSBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVEaXN0
YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQogewogICAgIGlmICh2aWV3cG9ydC5pbnRlcnNl
Y3RzKHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpKQpAQCAtNTM0LDQxICs0
NjUsNiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3Qo
Y29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgICAgIG1fY3VycmVudFRpbGVzLT5yZW1vdmVU
aWxlKHRvUmVtb3ZlW25dKTsKIH0KIAotUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4g
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnRpbGVBdChjb25zdCBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aWxlcy5n
ZXQoY29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnNldFRp
bGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUsIFBh
c3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGUpCi17Ci0gICAgUmVmUHRyPFRpbGVk
RHJhd2luZ0FyZWFUaWxlPiB0aWxlUmVmID0gdGlsZTsKLSAgICBtX3RpbGVzLnNldChjb29yZGlu
YXRlLCB0aWxlUmVmKTsKLSAgICBtX3RpbGVzQnlJRC5zZXQodGlsZVJlZi0+SUQoKSwgdGlsZVJl
Zi5nZXQoKSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnJlbW92ZVRpbGUo
Y29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpCi17Ci0g
ICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gbV90aWxlcy50YWtlKGNvb3Jk
aW5hdGUpOwotCi0gICAgbV90aWxlc0J5SUQucmVtb3ZlKHRpbGUtPklEKCkpOwotfQotCi1JbnRS
ZWN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJl
Y3QueCgpIC8gbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWN0LnkoKSAvIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC8gbV9jb250ZW50c1NjYWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC8gbV9jb250ZW50
c1NjYWxlKSk7Ci19Ci0KLUludFJlY3QgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6Om1hcEZyb21D
b250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAqIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKiBtX2NvbnRlbnRzU2NhbGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAqIG1f
Y29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dC5oZWlnaHQoKSAqIG1fY29udGVudHNTY2FsZSkpOwotfQotCiBJbnRSZWN0IFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jdXJyZW50
VGlsZXMtPm1hcEZyb21Db250ZW50cyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXdTaXpl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5
LmgKaW5kZXggOGMyMDFhYi4uNTZlNDVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KIAogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKICNpbmNsdWRlICJUaWxlZERyYXdpbmdBcmVhVGls
ZS5oIgorI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0LmgiCiAKICNpZiBQTEFURk9S
TShNQUMpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNjQsMzYgKzY0LDYgQEAgY2xh
c3MgVG91Y2hWaWV3SW50ZXJmYWNlOwogdHlwZWRlZiBUb3VjaFZpZXdJbnRlcmZhY2UgUGxhdGZv
cm1XZWJWaWV3OwogI2VuZGlmCiAKLWNsYXNzIFRpbGVkRHJhd2luZ0FyZWFQcm94eTsKLWNsYXNz
IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hNYXA8
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVh
VGlsZT4gPiBUaWxlTWFwOwotCi0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoVGlsZWREcmF3
aW5nQXJlYVByb3h5KiwgZmxvYXQgY29udGVudHNTY2FsZSA9IDEuMGYpOwotCi0gICAgV2ViQ29y
ZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgY29uc3Q7Ci0KLSAgICB2b2lkIHBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKLSAgICBUaWxlTWFwJiB0aWxlcygpIHsgcmV0dXJu
IG1fdGlsZXM7IH0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZSogdGlsZShpbnQgdGlsZUlEKSBj
b25zdCB7IHJldHVybiBtX3RpbGVzQnlJRC5nZXQodGlsZUlEKTsgfQotICAgIFBhc3NSZWZQdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGVBdChjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZSYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+
IGNyZWF0ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmKTsKLSAg
ICB2b2lkIHNldFRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmLCBQ
YXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPik7Ci0gICAgdm9pZCByZW1vdmVUaWxlKGNv
bnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJik7Ci0gICAgdm9pZCByZW1vdmVB
bGxUaWxlcygpOwotCi0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudHNTY2FsZTsgfQotICAgIGZsb2F0IGNvdmVyYWdlUmF0aW8oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZvaWQgcmVsZWFzZUJhY2tCdWZmZXJzKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgVGlsZU1hcCBtX3RpbGVzOwotICAgIFdURjo6SGFzaE1hcDxpbnQsIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlKj4gbV90aWxlc0J5SUQ7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAgIFRp
bGVkRHJhd2luZ0FyZWFQcm94eSogbV9wcm94eTsKLX07Ci0KIGNsYXNzIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZShQbGF0Zm9ybVdlYlZpZXcq
IHdlYlZpZXcsIFdlYlBhZ2VQcm94eSopOwpAQCAtMTY5LDYgKzEzOSw3IEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdEZvckNvb3JkaW5hdGUoY29uc3QgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmKSBjb25zdDsKICAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JikgY29uc3Q7CiAgICAgZG91YmxlIHRpbGVEaXN0YW5jZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmKTsK
KyAgICBzdGF0aWMgV2ViQ29yZTo6SW50UG9pbnQgaW5uZXJCb3R0b21SaWdodChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFNl
dEZyYW1lTm90aWZpY2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1RpbGVkRHJhd2luZ0FyZWFUaWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
aWxlZERyYXdpbmdBcmVhVGlsZVNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWNiZjUxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhVGlsZVNldC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlZERy
YXdpbmdBcmVhVGlsZVNldC5oIgorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisj
aW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KFRpbGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIGZsb2F0
IGNvbnRlbnRzU2NhbGUpCisgICAgOiBtX2NvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSkKKyAg
ICAsIG1fcHJveHkocHJveHkpCit7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
OnBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ2Mp
Cit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29udGVudHMocmVjdCk7CisKKyAg
ICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gbV9wcm94eS0+dGls
ZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7CisgICAgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSBtX3Byb3h5LT50aWxlQ29vcmRp
bmF0ZUZvclBvaW50KFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aW5uZXJCb3R0b21SaWdodChkaXJ0
eVJlY3QpKTsKKworICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsg
eUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0g
Ym90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CisgICAgICAgICAgICBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNv
b3JkaW5hdGUpOworICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJy
ZW50VGlsZSA9IHRpbGVBdChjdXJyZW50Q29vcmRpbmF0ZSk7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCisgICAgICAgICAgICAg
ICAgY3VycmVudFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gVGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ6OnRpbGVBdChjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29v
cmRpbmF0ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlcy5nZXQoY29vcmRpbmF0ZSk7Cit9
CisKK1Bhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IFRpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0OjpjcmVhdGVUaWxlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBj
b29yZGluYXRlKQoreworICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjpjcmVhdGUobV9wcm94eSwgY29vcmRpbmF0ZSk7CisgICAgc2V0
VGlsZShjb29yZGluYXRlLCB0aWxlKTsKKyAgICByZXR1cm4gdGlsZTsKK30KKwordm9pZCBUaWxl
ZERyYXdpbmdBcmVhVGlsZVNldDo6c2V0VGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSwgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4g
dGlsZSkKK3sKKyAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGVSZWYgPSB0aWxl
OworICAgIG1fdGlsZXMuc2V0KGNvb3JkaW5hdGUsIHRpbGVSZWYpOworICAgIG1fdGlsZXNCeUlE
LnNldCh0aWxlUmVmLT5JRCgpLCB0aWxlUmVmLmdldCgpKTsKK30KKwordm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZVNldDo6cmVtb3ZlVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSYgY29vcmRpbmF0ZSkKK3sKKyAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+
IHRpbGUgPSBtX3RpbGVzLnRha2UoY29vcmRpbmF0ZSk7CisKKyAgICBtX3RpbGVzQnlJRC5yZW1v
dmUodGlsZS0+SUQoKSk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnJlbW92
ZUFsbFRpbGVzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiA+
IHRpbGVzVG9SZW1vdmU7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1fdGlsZXMsIHRpbGVzVG9S
ZW1vdmUpOworICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCisgICAgICAg
IHJlbW92ZVRpbGUodGlsZXNUb1JlbW92ZVtuXS0+Y29vcmRpbmF0ZSgpKTsKK30KKworSW50UmVj
dCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwVG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0
LngoKSAvIG1fY29udGVudHNTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAvIG1fY29udGVudHNTY2FsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAvIG1fY29udGVudHNT
Y2FsZSkpOworfQorCitJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBGcm9tQ29u
dGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgKiBtX2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICogbV9jb250ZW50c1NjYWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgKiBtX2Nv
bnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
aGVpZ2h0KCkgKiBtX2NvbnRlbnRzU2NhbGUpKTsKK30KKworZmxvYXQgVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6OmNvdmVyYWdlUmF0aW8oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50cyhyZWN0KTsKKyAgICBmbG9h
dCByZWN0QXJlYSA9IGRpcnR5UmVjdC53aWR0aCgpICogZGlydHlSZWN0LmhlaWdodCgpOworICAg
IGZsb2F0IGNvdmVyQXJlYSA9IDAuMGY7CisKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSB0b3BMZWZ0ID0gbV9wcm94eS0+dGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJl
Y3QubG9jYXRpb24oKSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90
dG9tUmlnaHQgPSBtX3Byb3h5LT50aWxlQ29vcmRpbmF0ZUZvclBvaW50KFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6aW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKKworICAgIGZvciAodW5zaWdu
ZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQu
eSgpOyArK3lDb29yZGluYXRlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUg
PSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGlu
YXRlKSB7CisgICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJy
ZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOworICAgICAgICAgICAgUmVm
UHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRpbGVBdChUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpKTsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50VGlsZSAmJiBjdXJyZW50VGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkg
eworICAgICAgICAgICAgICAgIEludFJlY3QgY292ZXJSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5
UmVjdCwgY3VycmVudFRpbGUtPnJlY3QoKSk7CisgICAgICAgICAgICAgICAgY292ZXJBcmVhICs9
IGNvdmVyUmVjdC53aWR0aCgpICogY292ZXJSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3ZlckFyZWEgLyByZWN0QXJlYTsKK30KKwor
dm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6cmVsZWFzZUJhY2tCdWZmZXJzKCkKK3sKKyAg
ICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBjb25zdCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJy
ZW50ID0gaXQtPnNlY29uZDsKKyAgICAgICAgY3VycmVudC0+Y2FuY2VsQmFja0J1ZmZlclVwZGF0
ZSgpOworICAgICAgICBjdXJyZW50LT5yZWxlYXNlQmFja0J1ZmZlcigpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVElMRURfQkFDS0lOR19T
VE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhVGlsZVNldC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmODJmNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVh
VGlsZVNldC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXRfaAorI2RlZmluZSBUaWxlZERyYXdpbmdBcmVh
VGlsZVNldF9oCisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKworI2luY2x1ZGUg
IlRpbGVkRHJhd2luZ0FyZWFUaWxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVGlsZWREcmF3
aW5nQXJlYVByb3h5OworCitjbGFzcyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlLCBS
ZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gVGlsZU1hcDsKKworICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0KFRpbGVkRHJhd2luZ0FyZWFQcm94eSosIGZsb2F0IGNvbnRlbnRzU2NhbGUg
PSAxLjBmKTsKKworICAgIHZvaWQgcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIFRpbGVNYXAmIHRpbGVzKCkgeyByZXR1cm4gbV90
aWxlczsgfQorICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlKiB0aWxlKGludCB0aWxlSUQpIGNvbnN0
IHsgcmV0dXJuIG1fdGlsZXNCeUlELmdldCh0aWxlSUQpOyB9CisgICAgUGFzc1JlZlB0cjxUaWxl
ZERyYXdpbmdBcmVhVGlsZT4gdGlsZUF0KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29y
ZGluYXRlJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3Jl
YXRlVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZv
aWQgc2V0VGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYsIFBhc3NS
ZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+KTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoY29uc3Qg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFRp
bGVzKCk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKworICAgIGZsb2F0IGNvbnRlbnRzU2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2NhbGU7IH0KKyAgICBmbG9hdCBjb3ZlcmFn
ZVJhdGlvKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlbGVhc2VCYWNrQnVm
ZmVycygpOworCitwcml2YXRlOgorICAgIFRpbGVNYXAgbV90aWxlczsKKyAgICBXVEY6Okhhc2hN
YXA8aW50LCBUaWxlZERyYXdpbmdBcmVhVGlsZSo+IG1fdGlsZXNCeUlEOworICAgIGZsb2F0IG1f
Y29udGVudHNTY2FsZTsKKyAgICBUaWxlZERyYXdpbmdBcmVhUHJveHkqIG1fcHJveHk7Cit9Owor
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVElMRURfQkFDS0lOR19TVE9S
RQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXggNjQ3MjU5ZC4uMmEzNjM0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcm8KQEAgLTE5NSw2ICsxOTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvUmVz
cG9uc2l2ZW5lc3NUaW1lci5oIFwKICAgICBVSVByb2Nlc3MvVGV4dENoZWNrZXIuaCBcCiAgICAg
VUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIFwKKyAgICBVSVByb2Nlc3MvVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQuaCBcCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIu
aCBcCiAgICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAg
ICAgVUlQcm9jZXNzL1dlYkNvbnRleHQuaCBcCkBAIC00MjYsNiArNDI3LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcCBc
CiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBcCisgICAgVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwIFwK
ICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101988</attachid>
            <date>2011-07-26 05:36:48 -0700</date>
            <delta_ts>2011-07-27 03:57:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64728-20110726143646.patch</filename>
            <type>text/plain</type>
            <size>29490</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTExODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzMjZhMDZiODVlMmQxZmU4
MTBlZWQzZDA3YWNiMzE4NTQ5YmE3MWZlLi5jN2YwODUxZTRiOTBmYzU3ODkzNThiZTk1ZmRlNTNi
OTNjMmExMGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDctMjYgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBUaWxl
ZERyYXdpbmdBcmVhOiBVc2UgdGlsZSBzZXRzIHRvIHBhaW50IG9sZCBjb250ZW50IHdoaWxlIHJl
bmRlcmluZyBmb3IgYSBuZXcgc2NhbGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlIGN1cnJlbnRseSBkZWxldGUgYWxsIHRoZSB0aWxlcyB3aGVuIHNl
dENvbnRlbnRzU2NhbGUgaXMgY2FsbGVkLiBUaGlzIHNob3dzIGEgYmxhbmsKKyAgICAgICAgYmFj
a2dyb3VuZCB0byB0aGUgdXNlciB3aGlsZSB0aGUgd2ViIHByb2Nlc3MgcmVuZGVyIHRpbGVzIGZv
ciB0aGUgbmV3IHNjYWxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgdGhlIG93bmVy
c2hpcCBvZiBpbmRpdmlkdWFsIHRpbGVzIGZyb20gVGlsZWREcmF3aW5nQXJlYVByb3h5IHRvCisg
ICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0IHRvIGFsbG93IHRoZSBwcm94eSB0byBwYWlu
dCB0aWxlcyB3aXRoIGRpZmZlcmVudCBzY2FsZXMuCisgICAgICAgIFdlIGNhbiB0aGVuIHBhaW50
IHRoZSB0aWxlcyB3ZSBhbHJlYWR5IGhhdmUgb24gdG9wIG9mIHRoZSB0aWxlcyB3ZSBhcmUgcmVu
ZGVyaW5nIGZvcgorICAgICAgICB0aGUgbmV3IHNjYWxlIHVudGlsIGVub3VnaCBjb250ZW50IGlz
IGF2YWlsYWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6dGlsZXMpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6Y29udGVudHNTY2FsZSk6
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Ojpt
YXBUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
Om1hcEZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVByb3h5OjpyZXF1ZXN0VGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6Y2FuY2VsVGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6dXBkYXRlVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OmNvdmVyYWdlUmF0aW8pOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRldGFjaFRpbGVTZXQpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbW92ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYktp
dDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcyk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVzaXplRWRnZVRpbGVzKToKKyAgICAgICAgKFdlYktp
dDo6VGlsZWREcmF3aW5nQXJlYVByb3h5Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6YXR0YWNoVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZGV0YWNoVGlsZSk6CisgICAgICAgIChXZWJL
aXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp2aXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aGFzUGVuZGluZ1VwZGF0ZXMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVRpbGUuaDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxl
UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6VGlsZWREcmF3
aW5nQXJlYVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6flRp
bGVkRHJhd2luZ0FyZWFUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRp
bGU6OnNldFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6Omlu
Y29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6
OnVwZGF0ZUJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Y2FuY2VsQmFja0J1ZmZlclVwZGF0ZSk6CisKIDIwMTEtMDctMTUgIEpvY2VseW4gVHVyY290
dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIENvbnNpZGVy
IFFUb3VjaFdlYlBhZ2UncyB0cmFuc2Zvcm0gd2hlbiBzY3JvbGxpbmcgdGhlIHZpZXdwb3J0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNw
cAppbmRleCAyNTRlMzhiMWRiYTI3OGI1MTQ1MzFkYzQxOWQxYzdlNTI1NDkxMmFjLi5mNTFjOTcw
MDMyOWZiMzQ2N2M3OTFmZWU0MzA0ZDU2ZTE3ZjBlMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtNDIsNiArNDIsNDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGgg
PSAxMDI0Owogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUhlaWdodCA9IDEwMjQ7CiAKKwor
Ly8gVGhlIFRpbGVTZXQncyByZXNwb25zaWJpbGl0eSBpcyB0byBob2xkIGEgZ3JvdXAgb2YgdGls
ZXMgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBzY2FsZSB0b2dldGhlci4KK2NsYXNzIFRpbGVkRHJh
d2luZ0FyZWFUaWxlU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBU
aWxlTWFwOworCisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoZmxvYXQgY29udGVudHNTY2Fs
ZSA9IDEuMGYpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21Db250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisKKyAgICBUaWxlTWFwJiB0aWxl
cygpIHsgcmV0dXJuIG1fdGlsZXM7IH0KKyAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50c1NjYWxlOyB9CisKK3ByaXZhdGU6CisgICAgVGlsZU1hcCBtX3Rp
bGVzOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKK307CisKK1RpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldChmbG9hdCBjb250ZW50c1NjYWxlKQorICAg
IDogbV9jb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUpCit7Cit9CisKK0ludFJlY3QgVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6Om1hcFRvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgLyBt
X2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpIC8gbV9jb250ZW50c1NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWN0LndpZHRoKCkgLyBtX2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLyBtX2NvbnRlbnRzU2NhbGUpKTsK
K30KKworSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwRnJvbUNvbnRlbnRzKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
RmxvYXRSZWN0KHJlY3QueCgpICogbV9jb250ZW50c1NjYWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50c1Nj
YWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgp
ICogbV9jb250ZW50c1NjYWxlKSk7Cit9CisKKwogc3RhdGljIEludFBvaW50IGlubmVyQm90dG9t
UmlnaHQoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBBY3R1YWxseSwgdGhlIHJlY3Qg
ZG9lcyBub3QgY29udGFpbiByZWN0Lm1heFgoKS4gUmVmZXIgdG8gSW50UmVjdDo6Y29udGFpbi4K
QEAgLTU4LDEzICs5OSwxMyBAQCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OlRpbGVkRHJhd2luZ0Fy
ZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcgogICAgICwgbV9pc1dh
aXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faXNWaXNpYmxl
KHRydWUpCiAgICAgLCBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fY3VycmVudFRpbGVzKGFk
b3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCkpCiAgICAgLCBtX3RpbGVCdWZmZXJV
cGRhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV90aWxlQ3JlYXRpb25UaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVDcmVhdGlv
blRpbWVyRmlyZWQpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlV2lkdGgsIGRlZmF1bHRU
aWxlSGVpZ2h0KQogICAgICwgbV90aWxlQ3JlYXRpb25EZWxheSgwLjAxKQogICAgICwgbV9rZWVw
QXJlYU11bHRpcGxpZXIoMi41LCA0LjUpCiAgICAgLCBtX2NvdmVyQXJlYU11bHRpcGxpZXIoMiwg
MykKLSAgICAsIG1fY29udGVudHNTY2FsZSgxKQogewogfQogCkBAIC0xNDMsMTQgKzE4NCwxNCBA
QCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6YWxsVGlsZVVwZGF0ZXNQcm9jZXNzZWQoKQog
CiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVxdWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJ
RCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewotICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpSZXF1ZXN0VGlsZVVwZGF0
ZSh0aWxlSUQsIGRpcnR5UmVjdCwgY29udGVudHNTY2FsZSgpKSwgcGFnZSgpLT5wYWdlSUQoKSk7
CisgICAgcGFnZSgpLT5wcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RHJh
d2luZ0FyZWE6OlJlcXVlc3RUaWxlVXBkYXRlKHRpbGVJRCwgZGlydHlSZWN0LCBtX2N1cnJlbnRU
aWxlcy0+Y29udGVudHNTY2FsZSgpKSwgcGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLVBhc3NSZWZQ
dHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGls
ZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkKK3Zv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpCiB7
Ci0gICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gVGlsZWREcmF3aW5nQXJl
YVRpbGU6OmNyZWF0ZSh0aGlzLCBjb29yZGluYXRlKTsKLSAgICBzZXRUaWxlKGNvb3JkaW5hdGUs
IHRpbGUpOwotICAgIHJldHVybiB0aWxlOworICAgIGlmICghcGFnZSgpLT5wcm9jZXNzKCktPmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYTo6Q2FuY2VsVGlsZVVwZGF0ZSh0aWxlSUQpLCBwYWdlKCktPnBh
Z2VJRCgpKTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldFRpbGVTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCkBAIC0xNzYsNyArMjE3LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9hdFNpemUm
IGtlZXAKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGUoY29uc3QgSW50
UmVjdCYgY29udGVudHNEaXJ0eVJlY3QpCiB7Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QobWFwRnJv
bUNvbnRlbnRzKGNvbnRlbnRzRGlydHlSZWN0KSk7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QobV9j
dXJyZW50VGlsZXMtPm1hcEZyb21Db250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOwogCiAgICAg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRl
Rm9yUG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkpOwogICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChpbm5lckJv
dHRvbVJpZ2h0KGRpcnR5UmVjdCkpOwpAQCAtMTg3LDcgKzIyOCw3IEBAIHZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0
KQogCiAgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRp
bmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21S
aWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdp
bmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7CisgICAgICAgICAgICBSZWZQdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gbV9jdXJyZW50VGlsZXMtPnRpbGVz
KCkuZ2V0KFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29v
cmRpbmF0ZSkpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50VGlsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghY3VycmVudFRpbGUtPnJlY3QoKS5pbnRlcnNl
Y3RzKGRpcnR5UmVjdCkpCkBAIC0yMDMsNyArMjQ0LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudHNEaXJ0eVJlY3QpCiAKICAg
ICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICByZW1vdmVUaWxl
KHRpbGVzVG9SZW1vdmVbbl0pOworICAgICAgICBkZXRhY2hUaWxlKG1fY3VycmVudFRpbGVzLT50
aWxlcygpLnRha2UodGlsZXNUb1JlbW92ZVtuXSkpOwogCiAgICAgc3RhcnRUaWxlQnVmZmVyVXBk
YXRlVGltZXIoKTsKIH0KQEAgLTIxMSw4ICsyNTIsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIHZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVUaWxlQnVmZmVycygpCiB7CiAgICAgVmVjdG9y
PFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBuZXdEaXJ0eVRpbGVzOwotICAgIFRpbGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVz
LT50aWxlcygpLmVuZCgpOworICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJl
bnQgPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRGlydHkoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMjMxLDggKzI3Miw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5Ojp0aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUoKQogewogICAgIC8vIEJhaWwgb3V0IGlm
IGFsbCB0aWxlIGJhY2sgYnVmZmVycyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQuCiAgICAgVmVjdG9y
PFRpbGVkRHJhd2luZ0FyZWFUaWxlKj4gdGlsZXNUb0ZsaXA7Ci0gICAgVGlsZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBUaWxlZERyYXdpbmdBcmVh
VGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCku
ZW5kKCk7CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2N1cnJlbnRUaWxlcy0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3VycmVudCA9IGl0LT5z
ZWNvbmQ7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1JlYWR5VG9QYWludCgpICYmIChjdXJyZW50
LT5pc0RpcnR5KCkgfHwgY3VycmVudC0+aGFzQmFja0J1ZmZlclVwZGF0ZVBlbmRpbmcoKSkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNDYsMTUgKzI4NywzOSBAQCB2b2lkIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6dGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCkKICAgICAgICAgVGlsZWREcmF3
aW5nQXJlYVRpbGUqIHRpbGUgPSB0aWxlc1RvRmxpcFtuXTsKICAgICAgICAgdGlsZS0+c3dhcEJh
Y2tCdWZmZXJUb0Zyb250KCk7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IHJlcXVlc3Qg
c3lzdGVtIHJlcGFpbnQgZm9yIHRoZSBmdWxsIHRpbGUuCi0gICAgICAgIHBhaW50ZWRBcmVhLmFw
cGVuZChtYXBUb0NvbnRlbnRzKHRpbGUtPnJlY3QoKSkpOworICAgICAgICBwYWludGVkQXJlYS5h
cHBlbmQobV9jdXJyZW50VGlsZXMtPm1hcFRvQ29udGVudHModGlsZS0+cmVjdCgpKSk7CiAgICAg
fQotICAgIGlmIChzaXplKQorCisgICAgaWYgKG1fcHJldmlvdXNTY2FsZVRpbGVzICYmIChjb3Zl
cmFnZVJhdGlvKG1fY3VycmVudFRpbGVzLmdldCgpLCB2aXNpYmxlUmVjdCgpKSA+PSAxLjBmIHx8
ICFoYXNQZW5kaW5nVXBkYXRlcygpKSkgeworICAgICAgICBwYWludGVkQXJlYS5jbGVhcigpOwor
ICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQobV92aXNpYmxlQ29udGVudFJlY3QpOworICAgICAg
ICBtX3ByZXZpb3VzU2NhbGVUaWxlcy5jbGVhcigpOworICAgIH0KKworICAgIGlmICghcGFpbnRl
ZEFyZWEuaXNFbXB0eSgpKQogICAgICAgICB1cGRhdGVXZWJWaWV3KHBhaW50ZWRBcmVhKTsKIAog
ICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi1ib29sIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6cGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgUGxhdGZvcm1EcmF3
aW5nQ29udGV4dCBjb250ZXh0KQordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KiB0aWxlU2V0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGdjKQoreworICAgIEludFJlY3QgZGlydHlSZWN0ID0gdGls
ZVNldC0+bWFwRnJvbUNvbnRlbnRzKHJlY3QpOworCisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJp
Z2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChpbm5lckJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkp
OworCisgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRp
bmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21S
aWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKKyAgICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlIGN1cnJlbnRDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0
ZSk7CisgICAgICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxl
ID0gdGlsZVNldC0+dGlsZXMoKS5nZXQoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKQorICAgICAg
ICAgICAgICAgIGN1cnJlbnRUaWxlLT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpwYWludChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybURyYXdpbmdDb250ZXh0IGNvbnRleHQpCiB7CiAg
ICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24pIHsKICAgICAgICAg
V2ViUGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOwpAQCAtMjcwLDIyICszMzUsMTkgQEAg
Ym9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIFBs
YXRmb3JtRHJhd2luZ0NvbnRleHQgY28KIAogICAgIC8vIEFzc3VtZXMgdGhlIGJhY2tpbmcgc3Rv
cmUgaXMgcGFpbnRlZCB3aXRoIHRoZSBzY2FsZSB0cmFuc2Zvcm0gYXBwbGllZC4KICAgICAvLyBT
aW5jZSB0aWxlIGNvbnRlbnQgaXMgYWxyZWFkeSBzY2FsZWQsIGZpcnN0IHJldmVydCB0aGUgc2Nh
bGluZyBmcm9tIHRoZSBwYWludGVyLgotICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxIC8gbV9jb250
ZW50c1NjYWxlLCAxIC8gbV9jb250ZW50c1NjYWxlKSk7Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IG1hcEZyb21Db250ZW50cyhyZWN0KTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpD
b29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2Nh
dGlvbigpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdo
dCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsK
LQotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5h
dGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmln
aHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUp
OwotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9
IHRpbGVBdChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbGUg
JiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCi0gICAgICAgICAgICAgICAgY3VycmVu
dFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgfQorICAgIGdjLnNjYWxlKEZs
b2F0U2l6ZSgxIC8gbV9jdXJyZW50VGlsZXMtPmNvbnRlbnRzU2NhbGUoKSwgMSAvIG1fY3VycmVu
dFRpbGVzLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICBwYWludChtX2N1cnJlbnRUaWxlcy5nZXQo
KSwgcmVjdCwgZ2MpOworCisgICAgLy8gUGFpbnQgdGhlIHByZXZpb3VzIHNjYWxlIHRpbGVzLCBp
ZiBhbnksIG92ZXIgdGhlIGN1cnJlbnRseSB1cGRhdGluZyB0aWxlcy4KKyAgICBpZiAobV9wcmV2
aW91c1NjYWxlVGlsZXMpIHsKKyAgICAgICAgLy8gUmUtYXBwbHkgdGhlIHJldmVydGVkIGN1cnJl
bnQgdGlsZXMgc2NhbGluZyBhbmQgdGhlbgorICAgICAgICAvLyByZXZlcnQgdGhlIHByZXZpb3Vz
IHRpbGVzIHNjYWxpbmcgdG8gZ2V0IG1hdGNoZWQgY29udGVudHMgc2NhbGUuCisgICAgICAgIGZs
b2F0IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSA9IG1fY3VycmVudFRpbGVzLT5jb250
ZW50c1NjYWxlKCkgLyBtX3ByZXZpb3VzU2NhbGVUaWxlcy0+Y29udGVudHNTY2FsZSgpOworICAg
ICAgICBnYy5zY2FsZShGbG9hdFNpemUoY3VycmVudFRvUHJldmlvdXNSZXZlcnRlZFNjYWxlLCBj
dXJyZW50VG9QcmV2aW91c1JldmVydGVkU2NhbGUpKTsKKyAgICAgICAgcGFpbnQobV9wcmV2aW91
c1NjYWxlVGlsZXMuZ2V0KCksIHJlY3QsIGdjKTsKICAgICB9CiAKKwogICAgIGdjLnJlc3RvcmUo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI5OCwyMiArMzYwLDU4IEBAIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlzaWJsCiAgICAgfQogfQogCitmbG9hdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNv
dmVyYWdlUmF0aW8oVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQqIHRpbGVTZXQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB0aWxlU2V0LT5t
YXBGcm9tQ29udGVudHMocmVjdCk7CisgICAgZmxvYXQgcmVjdEFyZWEgPSBkaXJ0eVJlY3Qud2lk
dGgoKSAqIGRpcnR5UmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCBjb3ZlckFyZWEgPSAwLjBmOwor
CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29y
ZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChp
bm5lckJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOworCisgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRp
bmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNv
b3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQu
eCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKKyAg
ICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGN1cnJlbnRDb29yZGlu
YXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSk7CisgICAgICAgICAgICBSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gdGlsZVNldC0+dGlsZXMoKS5nZXQoVGlsZWRE
cmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IGludGVyc2VjdGlvbihk
aXJ0eVJlY3QsIGN1cnJlbnRUaWxlLT5yZWN0KCkpOworICAgICAgICAgICAgICAgIGNvdmVyQXJl
YSArPSBjb3ZlclJlY3Qud2lkdGgoKSAqIGNvdmVyUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY292ZXJBcmVhIC8gcmVjdEFyZWE7Cit9
CisKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNj
YWxlKQogewotICAgIGlmIChtX2NvbnRlbnRzU2NhbGUgPT0gc2NhbGUpCisgICAgaWYgKG1fY3Vy
cmVudFRpbGVzLT5jb250ZW50c1NjYWxlKCkgPT0gc2NhbGUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICByZW1vdmVBbGxUaWxlcygpOworCisgICAg
Ly8gS2VlcCB0aGUgY3VycmVudCB0aWxlcyBpbiBtX3ByZXZpb3VzU2NhbGVUaWxlcyB3aGlsZSB0
aGUgbmV3IHNjYWxlIHRpbGVzIGFyZSBiZWluZyB1cGRhdGVkLgorICAgIC8vIElmIG1fY3VycmVu
dFRpbGVzIHN0aWxsIGhhc24ndCBtb3JlIHBhaW50YWJsZSBjb250ZW50IGZvciB0aGUgY3VycmVu
dCB2aWV3cG9ydCByZWN0CisgICAgLy8gdGhhbiBtX3ByZXZpb3VzU2NhbGVUaWxlcywgdGhlbiBr
ZWVwIHRoZSBvbGQgbV9wcmV2aW91c1NjYWxlVGlsZXMuIFRoaXMgaGFwcGVucyB3aGVuCisgICAg
Ly8gc2V0Q29udGVudHNTY2FsZSBpcyBjYWxsZWQgdHdpY2Ugd2hpbGUgbV9jdXJyZW50VGlsZXMg
c3RpbGwgY29udGFpbnMgZmV3IG9yIG5vIHJlbmRlcmVkIHRpbGVzLgorICAgIGlmICghbV9wcmV2
aW91c1NjYWxlVGlsZXMgfHwgY292ZXJhZ2VSYXRpbyhtX3ByZXZpb3VzU2NhbGVUaWxlcy5nZXQo
KSwgdmlzaWJsZVJlY3QoKSkgPCBjb3ZlcmFnZVJhdGlvKG1fY3VycmVudFRpbGVzLmdldCgpLCB2
aXNpYmxlUmVjdCgpKSkgeworICAgICAgICBtX3ByZXZpb3VzU2NhbGVUaWxlcyA9IG1fY3VycmVu
dFRpbGVzLnJlbGVhc2UoKTsKKyAgICAgICAgZGV0YWNoVGlsZVNldChtX3ByZXZpb3VzU2NhbGVU
aWxlcy5nZXQoKSk7CisgICAgfQorICAgIG1fY3VycmVudFRpbGVzID0gYWRvcHRQdHIobmV3IFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KHNjYWxlKSk7CiAgICAgY3JlYXRlVGlsZXMoKTsKIH0KIAor
dm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRldGFjaFRpbGVTZXQoVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQqIHRpbGVTZXQpCit7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVTZXQtPnRpbGVzKCkuZW5kKCk7CisgICAgZm9y
IChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0
aWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25z
dCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgZGV0YWNoVGlsZShjdXJyZW50KTsKKyAgICB9Cit9CisKIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpyZW1vdmVBbGxUaWxlcygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxUaWxlZERy
YXdpbmdBcmVhVGlsZT4gPiB0aWxlc1RvUmVtb3ZlOwotICAgIGNvcHlWYWx1ZXNUb1ZlY3Rvciht
X3RpbGVzLCB0aWxlc1RvUmVtb3ZlKTsKLSAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVz
VG9SZW1vdmUuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3Vu
dDsgKytuKQotICAgICAgICByZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0tPmNvb3JkaW5hdGUo
KSk7CisgICAgZGV0YWNoVGlsZVNldChtX2N1cnJlbnRUaWxlcy5nZXQoKSk7CisgICAgbV9jdXJy
ZW50VGlsZXMgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV9jdXJyZW50
VGlsZXMtPmNvbnRlbnRzU2NhbGUoKSkpOwogfQogCiBkb3VibGUgVGlsZWREcmF3aW5nQXJlYVBy
b3h5Ojp0aWxlRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKQEAgLTM3NSw3ICs0NzMs
NyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMoKQogICAgICAgICAg
ICAgLy8gRGlzdGFuY2UgaXMgMCBmb3IgYWxsIGN1cnJlbnRseSB2aXNpYmxlIHRpbGVzLgogICAg
ICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNlKHZpc2libGVSZWN0LCBjdXJy
ZW50Q29vcmRpbmF0ZSk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGls
ZT4gdGlsZSA9IHRpbGVBdChjdXJyZW50Q29vcmRpbmF0ZSk7CisgICAgICAgICAgICBSZWZQdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGUgPSBtX2N1cnJlbnRUaWxlcy0+dGlsZXMoKS5nZXQo
Y3VycmVudENvb3JkaW5hdGUpOwogICAgICAgICAgICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRpbGUg
fHwgIXRpbGUtPmlzUmVhZHlUb1BhaW50KCkpKQogICAgICAgICAgICAgICAgIGhhc1Zpc2libGVD
aGVja2VycyA9IHRydWU7CiAgICAgICAgICAgICBpZiAodGlsZSkKQEAgLTM5OCw4ICs0OTYsMTIg
QEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKCkKIAogICAgIC8vIE5v
dyBjb25zdHJ1Y3QgdGhlIHRpbGUocykuCiAgICAgdW5zaWduZWQgdGlsZXNUb0NyZWF0ZUNvdW50
ID0gdGlsZXNUb0NyZWF0ZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRp
bGVzVG9DcmVhdGVDb3VudDsgKytuKQotICAgICAgICBjcmVhdGVUaWxlKHRpbGVzVG9DcmVhdGVb
bl0pOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsr
bikgeworICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRl
ID0gdGlsZXNUb0NyZWF0ZVtuXTsKKyAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxl
PiB0aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZShjb29yZGluYXRlLCB0aWxlUmVj
dEZvckNvb3JkaW5hdGUoY29vcmRpbmF0ZSkpOworICAgICAgICBtX2N1cnJlbnRUaWxlcy0+dGls
ZXMoKS5zZXQoY29vcmRpbmF0ZSwgdGlsZSk7CisgICAgICAgIGF0dGFjaFRpbGUodGlsZSk7Cisg
ICAgfQogCiAgICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNvdW50OwogCkBA
IC00MTgsOCArNTIwLDggQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlc2l6ZUVkZ2VU
aWxlcygpCiAgICAgYm9vbCB3YXNSZXNpemVkID0gZmFsc2U7CiAKICAgICBWZWN0b3I8VGlsZWRE
cmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7Ci0gICAgVGlsZU1hcDo6
aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBUaWxlZERyYXdp
bmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZXMtPnRp
bGVzKCkuZW5kKCk7CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlcy0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdGlsZUNv
b3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7CiAgICAgICAgIEludFJlY3QgdGls
ZVJlY3QgPSBpdC0+c2Vjb25kLT5yZWN0KCk7CiAgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUaWxl
UmVjdCA9IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSk7CkBAIC00MzIsNyAr
NTM0LDcgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlc2l6ZUVkZ2VUaWxlcygpCiAg
ICAgfQogICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIHJl
bW92ZVRpbGUodGlsZXNUb1JlbW92ZVtuXSk7CisgICAgICAgIGRldGFjaFRpbGUobV9jdXJyZW50
VGlsZXMtPnRpbGVzKCkudGFrZSh0aWxlc1RvUmVtb3ZlW25dKSk7CiAgICAgcmV0dXJuIHdhc1Jl
c2l6ZWQ7CiB9CiAKQEAgLTQ0MSw4ICs1NDMsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgRmxv
YXRSZWN0IGtlZXBSZWN0RiA9IGtlZXBSZWN0OwogCiAgICAgVmVjdG9yPFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpDb29yZGluYXRlPiB0b1JlbW92ZTsKLSAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQg
PSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0
OjpUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX2N1cnJlbnRUaWxlcy0+dGlsZXMoKS5lbmQoKTsK
KyAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fY3VycmVudFRpbGVzLT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnNl
Y29uZC0+Y29vcmRpbmF0ZSgpOwogICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpdC0+c2Vj
b25kLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYp
KQpAQCAtNDUwLDU2ICs1NTIsMzIgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BU
aWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogICAgIH0KICAgICB1bnNp
Z25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4g
PSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgcmVtb3ZlVGlsZSh0b1JlbW92ZVtu
XSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6dGlsZUF0KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBj
b29yZGluYXRlKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbGVzLmdldChjb29yZGluYXRlKTsK
KyAgICAgICAgZGV0YWNoVGlsZShtX2N1cnJlbnRUaWxlcy0+dGlsZXMoKS50YWtlKHRvUmVtb3Zl
W25dKSk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlKGNvbnN0IFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlLCBSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+IHRpbGUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6YXR0YWNo
VGlsZShQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlUmVmKQogewotICAgIG1f
dGlsZXMuc2V0KGNvb3JkaW5hdGUsIHRpbGUpOworICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVh
VGlsZT4gdGlsZSA9IHRpbGVSZWY7CisgICAgbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuc2V0KHRp
bGUtPmNvb3JkaW5hdGUoKSwgdGlsZSk7CiAgICAgbV90aWxlc0J5SUQuc2V0KHRpbGUtPklEKCks
IHRpbGUuZ2V0KCkpOworICAgIHRpbGUtPnNldFByb3h5KHRoaXMpOwogfQogCi12b2lkIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpkZXRh
Y2hUaWxlKFBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGVSZWYpCiB7Ci0gICAg
UmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gbV90aWxlcy50YWtlKGNvb3JkaW5h
dGUpOwotCisgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gdGlsZVJlZjsK
ICAgICBtX3RpbGVzQnlJRC5yZW1vdmUodGlsZS0+SUQoKSk7Ci0KLSAgICBpZiAoIXRpbGUtPmhh
c0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYTo6Q2FuY2VsVGlsZVVwZGF0ZSh0aWxlLT5JRCgpKSwgcGFnZS0+
cGFnZUlEKCkpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250
ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRzU2NhbGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAvIG1fY29u
dGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5o
ZWlnaHQoKSAvIG1fY29udGVudHNTY2FsZSkpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpICogbV9jb250ZW50
c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAq
IG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjdC53aWR0aCgpICogbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LmhlaWdodCgpICogbV9jb250ZW50c1NjYWxlKSk7CisgICAgdGls
ZS0+c2V0UHJveHkoMCk7CiB9CiAKIEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb250
ZW50c1JlY3QoKSBjb25zdAogewotICAgIHJldHVybiBtYXBGcm9tQ29udGVudHMoSW50UmVjdChJ
bnRQb2ludCgwLCAwKSwgbV92aWV3U2l6ZSkpOworICAgIHJldHVybiBtX2N1cnJlbnRUaWxlcy0+
bWFwRnJvbUNvbnRlbnRzKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKIH0K
IAogSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnZpc2libGVSZWN0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbWFwRnJvbUNvbnRlbnRzKG1fdmlzaWJsZUNvbnRlbnRSZWN0KTsKKyAgICBy
ZXR1cm4gbV9jdXJyZW50VGlsZXMtPm1hcEZyb21Db250ZW50cyhtX3Zpc2libGVDb250ZW50UmVj
dCk7CiB9CiAKIEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlUmVjdEZvckNvb3Jk
aW5hdGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUp
IGNvbnN0CkBAIC01NDcsOCArNjI1LDggQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRp
bGVDcmVhdGlvblRpbWVyRmlyZWQoKQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aGFz
UGVuZGluZ1VwZGF0ZXMoKSBjb25zdAogewotICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVzLT50
aWxlcygpLmVuZCgpOworICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jdXJyZW50VGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGls
ZT4mIGN1cnJlbnQgPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoY3VycmVudC0+aGFzQmFja0J1
ZmZlclVwZGF0ZVBlbmRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDE0ZGVi
NjJhMTRkOTIzMmY4NDNmMjAxMmY2NTYyZjI5Mjc3ZjY0ZWEuLjAzMWRlNGY2NTUzMzIwOTViYzM0
Mzk4NjUxMjY0ZDM5MTk3MmI1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmgKQEAgLTQ1LDkgKzQ1LDE0IEBAIGNsYXNzIFdLVmlldzsK
ICNlbmRpZgogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsK
K2NsYXNzIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OwogY2xhc3MgV2ViUGFnZVByb3h5OwogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNjgsNyArNzMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VGlsZWREcmF3aW5nQXJlYVByb3h5KCk7CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNTY2FsZTsgfQogICAgIHZvaWQgc2V0Q29udGVudHNTY2Fs
ZShmbG9hdCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03Niw4ICs4
MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0
KCkgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotCiAgICAgV2ViQ29yZTo6SW50U2l6ZSB0aWxl
U2l6ZSgpIHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KICAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKTsKIApAQCAtOTQsOSArOTYsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpOwogCi0gICAgV2ViQ29yZTo6SW50UmVjdCBt
YXBUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLSAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1hcEZyb21Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7
Ci0KICAgICBib29sIGhhc1BlbmRpbmdVcGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0x
MTQsOCArMTEzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYWxsVGlsZVVwZGF0ZXNQ
cm9jZXNzZWQoKTsKIAogICAgIHZvaWQgcmVxdWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIFBhc3NSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+IGNyZWF0ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGUmKTsKKyAgICB2b2lkIGNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCk7CiAKICAg
ICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CiAgICAgdm9pZCBzdGFydFRpbGVD
cmVhdGlvblRpbWVyKCk7CkBAIC0xMjksMTEgKzEyNywxNCBAQCBwcml2YXRlOgogICAgIGJvb2wg
cmVzaXplRWRnZVRpbGVzKCk7CiAgICAgdm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CiAKLSAgICBQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxl
PiB0aWxlQXQoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmKSBjb25zdDsK
LSAgICB2b2lkIHNldFRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUm
IGNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSk7Ci0gICAgdm9p
ZCByZW1vdmVUaWxlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29y
ZGluYXRlKTsKKyAgICB2b2lkIGF0dGFjaFRpbGUoUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVh
VGlsZT4pOworICAgIHZvaWQgZGV0YWNoVGlsZShQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPik7CisgICAgdm9pZCBkZXRhY2hUaWxlU2V0KFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Kik7
CiAgICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOwogCisgICAgdm9pZCBwYWludChUaWxlZERyYXdp
bmdBcmVhVGlsZVNldCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICBmbG9hdCBjb3ZlcmFnZVJhdGlvKFRpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCiAgICAgV2ViQ29yZTo6SW50UmVjdCBj
b250ZW50c1JlY3QoKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVSZWN0KCkg
Y29uc3Q7CiAKQEAgLTE1Myw4ICsxNTQsOCBAQCBwcml2YXRlOgogCiAgICAgUGxhdGZvcm1XZWJW
aWV3KiBtX3dlYlZpZXc7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZWREcmF3aW5nQXJlYVRp
bGU6OkNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBUaWxlTWFwOwot
ICAgIFRpbGVNYXAgbV90aWxlczsKKyAgICBPd25QdHI8VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ+
IG1fY3VycmVudFRpbGVzOworICAgIE93blB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZVNldD4gbV9w
cmV2aW91c1NjYWxlVGlsZXM7CiAKICAgICBXVEY6Okhhc2hNYXA8aW50LCBUaWxlZERyYXdpbmdB
cmVhVGlsZSo+IG1fdGlsZXNCeUlEOwogCkBAIC0xNjgsNyArMTY5LDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwogCiAgICAgV2ViQ29y
ZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2Nh
bGU7CiAKICAgICBmcmllbmQgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGU7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaAppbmRleCA3ZjFh
ZTUyYzgzYjJhMDAzNDAzZjZhNjZhYzAzZGJkN2JkNjc0MTQ3Li4wZmEzZjY3NWY3YTRlYWJkZWQ4
NmQ3MGU5NTJlMmExNmZjMDI5MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVRpbGUuaApAQCAtNDcsOSArNDcsMTAgQEAgY2xhc3MgVGlsZWREcmF3
aW5nQXJlYVRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaWxlZERyYXdpbmdBcmVhVGlsZT4gewog
cHVibGljOgogICAgIHR5cGVkZWYgV2ViQ29yZTo6SW50UG9pbnQgQ29vcmRpbmF0ZTsKIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjcmVhdGUoVGlsZWREcmF3
aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZShwcm94eSwgdGlsZUNvb3Jk
aW5hdGUpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBj
cmVhdGUoY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZSh0
aWxlQ29vcmRpbmF0ZSwgcmVjdCkpOyB9CiAgICAgflRpbGVkRHJhd2luZ0FyZWFUaWxlKCk7CiAK
KyAgICB2b2lkIHNldFByb3h5KFRpbGVkRHJhd2luZ0FyZWFQcm94eSopOwogICAgIGJvb2wgaXNE
aXJ0eSgpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAgICAgdm9pZCB1cGRhdGVCYWNrQnVmZmVyKCk7CkBAIC02OCw3ICs2OSw4IEBAIHB1Ymxp
YzoKICAgICBpbnQgSUQoKSBjb25zdCB7IHJldHVybiBtX0lEOyB9CiAKIHByaXZhdGU6Ci0gICAg
VGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3Qg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKTsKKyAgICBU
aWxlZERyYXdpbmdBcmVhVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0
ZSYgdGlsZUNvb3JkaW5hdGUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGNh
bmNlbEJhY2tCdWZmZXJVcGRhdGUoKTsKIAogICAgIFRpbGVkRHJhd2luZ0FyZWFQcm94eSogbV9w
cm94eTsKICAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcAppbmRleCBhOWRm
Yjg0YWI3NTcyMzQ2NjgwMjY1YzRiNDExODM2MmMxMTk4ZTA5Li42MTZlZDM2NWUyNWE0OGU3ZTNl
M2VkZTE2NDc2M2Q5OTgzNjYzMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCkBAIC00MCwxMCArNDAsMTAgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1UaWxlZERy
YXdpbmdBcmVhVGlsZTo6VGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5nQXJlYVByb3h5
KiBwcm94eSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCi0gICAgOiBtX3Byb3h5
KHByb3h5KQorVGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVkRHJhd2luZ0FyZWFUaWxlKGNvbnN0
IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQorICAgIDogbV9wcm94eSgwKQogICAgICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQot
ICAgICwgbV9yZWN0KHByb3h5LT50aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUp
KQorICAgICwgbV9yZWN0KHJlY3QpCiAgICAgLCBtX2hhc1VwZGF0ZVBlbmRpbmcoZmFsc2UpCiAg
ICAgLCBtX2lzQmFja0J1ZmZlclZhbGlkKGZhbHNlKQogICAgICwgbV9pc0Zyb250QnVmZmVyVmFs
aWQoZmFsc2UpCkBAIC02MSw2ICs2MSwxNyBAQCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6flRpbGVk
RHJhd2luZ0FyZWFUaWxlKCkKICNpZmRlZiBUSUxFX0RFQlVHX0xPRwogICAgIHFEZWJ1ZygpIDw8
ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKICNlbmRpZgorICAgIHNldFByb3h5KDApOwor
fQorCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpzZXRQcm94eShUaWxlZERyYXdpbmdBcmVh
UHJveHkqIHByb3h5KQoreworICAgIGlmICghcHJveHkpIHsKKyAgICAgICAgY2FuY2VsQmFja0J1
ZmZlclVwZGF0ZSgpOworICAgICAgICBtX2JhY2tCdWZmZXIgPSBRUGl4bWFwKCk7CisgICAgICAg
IG1faXNCYWNrQnVmZmVyVmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgbV9wcm94eSA9IHByb3h5
OwogfQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppc0RpcnR5KCkgY29uc3QKQEAgLTEy
Myw2ICsxMzQsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8s
IGZsb2F0KQogeworICAgIEFTU0VSVChtX3Byb3h5KTsKICAgICBtX2lzQmFja0J1ZmZlclZhbGlk
ID0gdHJ1ZTsKICAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTsKIApAQCAtMTQ1LDYgKzE1
Nyw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0
IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQogeworICAgIEFTU0VSVChtX3Byb3h5KTsKICAgICBpZiAo
aXNSZWFkeVRvUGFpbnQoKSAmJiAhaXNEaXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
Miw0ICsxNzUsMTUgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRlQmFja0J1ZmZl
cigpCiAgICAgbV9oYXNVcGRhdGVQZW5kaW5nID0gdHJ1ZTsKIH0KIAordm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Y2FuY2VsQmFja0J1ZmZlclVwZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fcHJv
eHkpOworICAgIGlmICghbV9oYXNVcGRhdGVQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Byb3h5LT5jYW5jZWxUaWxlVXBkYXRlKG1fSUQpOworCisgICAgbV9oYXNVcGRhdGVQZW5k
aW5nID0gZmFsc2U7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102118</attachid>
            <date>2011-07-27 03:57:58 -0700</date>
            <delta_ts>2011-07-27 12:46:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64728-20110727125757.patch</filename>
            <type>text/plain</type>
            <size>28166</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTExODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzMjZhMDZiODVlMmQxZmU4
MTBlZWQzZDA3YWNiMzE4NTQ5YmE3MWZlLi4yYjI4NjEyNDVlZTYzZWMyN2IwYjlmYTcyM2JiMTAw
N2FmNTc4MDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDctMjcgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBUaWxl
ZERyYXdpbmdBcmVhOiBVc2UgdGlsZSBzZXRzIHRvIHBhaW50IG9sZCBjb250ZW50IHdoaWxlIHJl
bmRlcmluZyBmb3IgYSBuZXcgc2NhbGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlIGN1cnJlbnRseSBkZWxldGUgYWxsIHRoZSB0aWxlcyB3aGVuIHNl
dENvbnRlbnRzU2NhbGUgaXMgY2FsbGVkLiBUaGlzIHNob3dzIGEgYmxhbmsKKyAgICAgICAgYmFj
a2dyb3VuZCB0byB0aGUgdXNlciB3aGlsZSB0aGUgd2ViIHByb2Nlc3MgcmVuZGVyIHRpbGVzIGZv
ciB0aGUgbmV3IHNjYWxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgdGhlIG93bmVy
c2hpcCBvZiBpbmRpdmlkdWFsIHRpbGVzIGZyb20gVGlsZWREcmF3aW5nQXJlYVByb3h5IHRvCisg
ICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0IHRvIGFsbG93IHRoZSBwcm94eSB0byBwYWlu
dCB0aWxlcyB3aXRoIGRpZmZlcmVudCBzY2FsZXMuCisgICAgICAgIFdlIGNhbiB0aGVuIHBhaW50
IHRoZSB0aWxlcyB3ZSBhbHJlYWR5IGhhdmUgb24gdG9wIG9mIHRoZSB0aWxlcyB3ZSBhcmUgcmVu
ZGVyaW5nIGZvcgorICAgICAgICB0aGUgbmV3IHNjYWxlIHVudGlsIGVub3VnaCBjb250ZW50IGlz
IGF2YWlsYWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6dGlsZXMpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6Y29udGVudHNTY2FsZSk6
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Ojpt
YXBUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
Om1hcEZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVByb3h5OjpyZWdpc3RlclRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnVucmVnaXN0ZXJUaWxlKToKKyAgICAgICAgQWRkZWQgdGhvc2UgdHdvIG1ldGhv
ZHMgdG8gYWxsb3cgdGhlIHRpbGVzIHRvIGNsZWFuCisgICAgICAgIHRoZW1zZWx2ZXMgb24gZGVz
dHJ1Y3Rpb24uCisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVxdWVz
dFRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNh
bmNlbFRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVw
ZGF0ZVRpbGVCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5
Ojp0aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5Ojpjb3ZlcmFnZVJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGVUaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6cmVzaXplRWRnZVRpbGVzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6ZGlzYWJsZVRpbGVTZXRVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVBbGxUaWxlcyk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp2aXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6aGFzUGVuZGluZ1VwZGF0ZXMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWRE
cmF3aW5nQXJlYVRpbGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJl
YVRpbGVRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjpUaWxl
ZERyYXdpbmdBcmVhVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxl
Ojp+VGlsZWREcmF3aW5nQXJlYVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhVGlsZTo6dXBkYXRlQmFja0J1ZmZlcik6CisKIDIwMTEtMDctMTUgIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIENvbnNp
ZGVyIFFUb3VjaFdlYlBhZ2UncyB0cmFuc2Zvcm0gd2hlbiBzY3JvbGxpbmcgdGhlIHZpZXdwb3J0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCAyNTRlMzhiMWRiYTI3OGI1MTQ1MzFkYzQxOWQxYzdlNTI1NDkxMmFjLi4zODlh
MWEwODZlNDUwZjQ5OWE4NDNiMjk1ZDljZTljMzZjOGJlNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtNDIsNiArNDIs
NDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lk
dGggPSAxMDI0Owogc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUhlaWdodCA9IDEwMjQ7CiAK
KworLy8gVGhlIFRpbGVTZXQncyByZXNwb25zaWJpbGl0eSBpcyB0byBob2xkIGEgZ3JvdXAgb2Yg
dGlsZXMgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBzY2FsZSB0b2dldGhlci4KK2NsYXNzIFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZWRE
cmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4g
PiBUaWxlTWFwOworCisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoZmxvYXQgY29udGVudHNT
Y2FsZSA9IDEuMGYpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21D
b250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisKKyAgICBUaWxlTWFwJiB0
aWxlcygpIHsgcmV0dXJuIG1fdGlsZXM7IH0KKyAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50c1NjYWxlOyB9CisKK3ByaXZhdGU6CisgICAgVGlsZU1hcCBt
X3RpbGVzOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKK307CisKK1RpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldChmbG9hdCBjb250ZW50c1NjYWxlKQor
ICAgIDogbV9jb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUpCit7Cit9CisKK0ludFJlY3QgVGls
ZWREcmF3aW5nQXJlYVRpbGVTZXQ6Om1hcFRvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkg
LyBtX2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QueSgpIC8gbV9jb250ZW50c1NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LndpZHRoKCkgLyBtX2NvbnRlbnRzU2NhbGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLyBtX2NvbnRlbnRzU2NhbGUp
KTsKK30KKworSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwRnJvbUNvbnRlbnRz
KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QoRmxvYXRSZWN0KHJlY3QueCgpICogbV9jb250ZW50c1NjYWxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50
c1NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdo
dCgpICogbV9jb250ZW50c1NjYWxlKSk7Cit9CisKKwogc3RhdGljIEludFBvaW50IGlubmVyQm90
dG9tUmlnaHQoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBBY3R1YWxseSwgdGhlIHJl
Y3QgZG9lcyBub3QgY29udGFpbiByZWN0Lm1heFgoKS4gUmVmZXIgdG8gSW50UmVjdDo6Y29udGFp
bi4KQEAgLTU4LDEzICs5OSwxMyBAQCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OlRpbGVkRHJhd2lu
Z0FyZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcgogICAgICwgbV9p
c1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faXNWaXNp
YmxlKHRydWUpCiAgICAgLCBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fY3VycmVudFRpbGVT
ZXQoYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KSkKICAgICAsIG1fdGlsZUJ1
ZmZlclVwZGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6dGlsZUJ1ZmZlclVwZGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBtX3RpbGVDcmVhdGlvblRp
bWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNy
ZWF0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVm
YXVsdFRpbGVIZWlnaHQpCiAgICAgLCBtX3RpbGVDcmVhdGlvbkRlbGF5KDAuMDEpCiAgICAgLCBt
X2tlZXBBcmVhTXVsdGlwbGllcigyLjUsIDQuNSkKICAgICAsIG1fY292ZXJBcmVhTXVsdGlwbGll
cigyLCAzKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCiB7CiB9CiAKQEAgLTE0MSwxNiArMTgy
LDI2IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjphbGxUaWxlVXBkYXRlc1Byb2Nlc3Nl
ZCgpCiAgICAgdGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7CiB9CiAKK3ZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5OjpyZWdpc3RlclRpbGUoaW50IHRpbGVJRCwgUGFzc1JlZlB0cjxUaWxlZERy
YXdpbmdBcmVhVGlsZT4gdGlsZSkKK3sKKyAgICBtX3RpbGVzQnlJRC5zZXQodGlsZUlELCB0aWxl
LmdldCgpKTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVucmVnaXN0ZXJUaWxl
KGludCB0aWxlSUQpCit7CisgICAgbV90aWxlc0J5SUQucmVtb3ZlKHRpbGVJRCk7Cit9CisKIHZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgcGFnZSgpLT5wcm9jZXNzKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlcXVlc3RUaWxlVXBkYXRlKHRp
bGVJRCwgZGlydHlSZWN0LCBjb250ZW50c1NjYWxlKCkpLCBwYWdlKCktPnBhZ2VJRCgpKTsKKyAg
ICBwYWdlKCktPnByb2Nlc3MoKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5n
QXJlYTo6UmVxdWVzdFRpbGVVcGRhdGUodGlsZUlELCBkaXJ0eVJlY3QsIG1fY3VycmVudFRpbGVT
ZXQtPmNvbnRlbnRzU2NhbGUoKSksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi1QYXNzUmVmUHRy
PFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGUo
Y29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpCit2b2lk
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y2FuY2VsVGlsZVVwZGF0ZShpbnQgdGlsZUlEKQogewot
ICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpjcmVhdGUodGhpcywgY29vcmRpbmF0ZSk7Ci0gICAgc2V0VGlsZShjb29yZGluYXRlLCB0
aWxlKTsKLSAgICByZXR1cm4gdGlsZTsKKyAgICBpZiAoIXBhZ2UoKS0+cHJvY2VzcygpLT5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWE6OkNhbmNlbFRpbGVVcGRhdGUodGlsZUlEKSwgcGFnZSgpLT5wYWdl
SUQoKSk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlU2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQpAQCAtMTc2LDcgKzIyNyw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5OjpzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxvYXRTaXplJiBr
ZWVwCiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRzRGlydHlSZWN0KQogewotICAgIEludFJlY3QgZGlydHlSZWN0KG1hcEZyb21D
b250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOworICAgIEludFJlY3QgZGlydHlSZWN0KG1fY3Vy
cmVudFRpbGVTZXQtPm1hcEZyb21Db250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOwogCiAgICAg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRl
Rm9yUG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkpOwogICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChpbm5lckJv
dHRvbVJpZ2h0KGRpcnR5UmVjdCkpOwpAQCAtMTg3LDcgKzIzOCw3IEBAIHZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0
KQogCiAgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRp
bmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21S
aWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdp
bmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7CisgICAgICAgICAgICBSZWZQdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gbV9jdXJyZW50VGlsZVNldC0+dGls
ZXMoKS5nZXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlD
b29yZGluYXRlKSk7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRUaWxlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50VGlsZS0+cmVjdCgpLmludGVy
c2VjdHMoZGlydHlSZWN0KSkKQEAgLTIwMyw3ICsyNTQsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIAog
ICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdGlsZXNUb1JlbW92ZS5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIHJlbW92ZVRp
bGUodGlsZXNUb1JlbW92ZVtuXSk7CisgICAgICAgIG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCku
cmVtb3ZlKHRpbGVzVG9SZW1vdmVbbl0pOwogCiAgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGlt
ZXIoKTsKIH0KQEAgLTIxMSw4ICsyNjIsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVUaWxlQnVmZmVycygpCiB7CiAgICAgVmVjdG9yPFJlZlB0
cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBuZXdEaXJ0eVRpbGVzOwotICAgIFRpbGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVTZXQtPnRp
bGVzKCkuZW5kKCk7CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50
ID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RpcnR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTIzMSw4ICsyODIsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6dGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCkKIHsKICAgICAvLyBCYWlsIG91dCBpZiBh
bGwgdGlsZSBiYWNrIGJ1ZmZlcnMgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLgogICAgIFZlY3RvcjxU
aWxlZERyYXdpbmdBcmVhVGlsZSo+IHRpbGVzVG9GbGlwOwotICAgIFRpbGVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCku
ZW5kKCk7CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQt
PnNlY29uZDsKICAgICAgICAgaWYgKGN1cnJlbnQtPmlzUmVhZHlUb1BhaW50KCkgJiYgKGN1cnJl
bnQtPmlzRGlydHkoKSB8fCBjdXJyZW50LT5oYXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI0NiwxNSArMjk3LDM5IEBAIHZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUoKQogICAgICAgICBUaWxlZERy
YXdpbmdBcmVhVGlsZSogdGlsZSA9IHRpbGVzVG9GbGlwW25dOwogICAgICAgICB0aWxlLT5zd2Fw
QmFja0J1ZmZlclRvRnJvbnQoKTsKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgcmVxdWVz
dCBzeXN0ZW0gcmVwYWludCBmb3IgdGhlIGZ1bGwgdGlsZS4KLSAgICAgICAgcGFpbnRlZEFyZWEu
YXBwZW5kKG1hcFRvQ29udGVudHModGlsZS0+cmVjdCgpKSk7CisgICAgICAgIHBhaW50ZWRBcmVh
LmFwcGVuZChtX2N1cnJlbnRUaWxlU2V0LT5tYXBUb0NvbnRlbnRzKHRpbGUtPnJlY3QoKSkpOwor
ICAgIH0KKworICAgIGlmIChtX3ByZXZpb3VzVGlsZVNldCAmJiAoY292ZXJhZ2VSYXRpbyhtX2N1
cnJlbnRUaWxlU2V0LmdldCgpLCB2aXNpYmxlUmVjdCgpKSA+PSAxLjBmIHx8ICFoYXNQZW5kaW5n
VXBkYXRlcygpKSkgeworICAgICAgICBwYWludGVkQXJlYS5jbGVhcigpOworICAgICAgICBwYWlu
dGVkQXJlYS5hcHBlbmQobV92aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBtX3ByZXZpb3Vz
VGlsZVNldC5jbGVhcigpOwogICAgIH0KLSAgICBpZiAoc2l6ZSkKKworICAgIGlmICghcGFpbnRl
ZEFyZWEuaXNFbXB0eSgpKQogICAgICAgICB1cGRhdGVXZWJWaWV3KHBhaW50ZWRBcmVhKTsKIAog
ICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi1ib29sIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6cGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgUGxhdGZvcm1EcmF3
aW5nQ29udGV4dCBjb250ZXh0KQordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KiB0aWxlU2V0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGdjKQoreworICAgIEludFJlY3QgZGlydHlSZWN0ID0gdGls
ZVNldC0+bWFwRnJvbUNvbnRlbnRzKHJlY3QpOworCisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJp
Z2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChpbm5lckJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkp
OworCisgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRp
bmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21S
aWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKKyAgICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlIGN1cnJlbnRDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0
ZSk7CisgICAgICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxl
ID0gdGlsZVNldC0+dGlsZXMoKS5nZXQoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKQorICAgICAg
ICAgICAgICAgIGN1cnJlbnRUaWxlLT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpwYWludChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybURyYXdpbmdDb250ZXh0IGNvbnRleHQpCiB7CiAg
ICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24pIHsKICAgICAgICAg
V2ViUGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOwpAQCAtMjcwLDIwICszNDUsMTYgQEAg
Ym9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QsIFBs
YXRmb3JtRHJhd2luZ0NvbnRleHQgY28KIAogICAgIC8vIEFzc3VtZXMgdGhlIGJhY2tpbmcgc3Rv
cmUgaXMgcGFpbnRlZCB3aXRoIHRoZSBzY2FsZSB0cmFuc2Zvcm0gYXBwbGllZC4KICAgICAvLyBT
aW5jZSB0aWxlIGNvbnRlbnQgaXMgYWxyZWFkeSBzY2FsZWQsIGZpcnN0IHJldmVydCB0aGUgc2Nh
bGluZyBmcm9tIHRoZSBwYWludGVyLgotICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxIC8gbV9jb250
ZW50c1NjYWxlLCAxIC8gbV9jb250ZW50c1NjYWxlKSk7Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IG1hcEZyb21Db250ZW50cyhyZWN0KTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpD
b29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2Nh
dGlvbigpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdo
dCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsK
LQotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5h
dGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmln
aHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUp
OwotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9
IHRpbGVBdChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbGUg
JiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCi0gICAgICAgICAgICAgICAgY3VycmVu
dFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgfQorICAgIGdjLnNjYWxlKEZs
b2F0U2l6ZSgxIC8gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpLCAxIC8gbV9jdXJy
ZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpKSk7CisgICAgcGFpbnQobV9jdXJyZW50VGlsZVNl
dC5nZXQoKSwgcmVjdCwgZ2MpOworCisgICAgLy8gUGFpbnQgdGhlIHByZXZpb3VzIHNjYWxlIHRp
bGVzLCBpZiBhbnksIG92ZXIgdGhlIGN1cnJlbnRseSB1cGRhdGluZyB0aWxlcy4KKyAgICBpZiAo
bV9wcmV2aW91c1RpbGVTZXQpIHsKKyAgICAgICAgLy8gUmUtYXBwbHkgdGhlIHJldmVydGVkIGN1
cnJlbnQgdGlsZXMgc2NhbGluZyBhbmQgdGhlbgorICAgICAgICAvLyByZXZlcnQgdGhlIHByZXZp
b3VzIHRpbGVzIHNjYWxpbmcgdG8gZ2V0IG1hdGNoZWQgY29udGVudHMgc2NhbGUuCisgICAgICAg
IGZsb2F0IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSA9IG1fY3VycmVudFRpbGVTZXQt
PmNvbnRlbnRzU2NhbGUoKSAvIG1fcHJldmlvdXNUaWxlU2V0LT5jb250ZW50c1NjYWxlKCk7Cisg
ICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShjdXJyZW50VG9QcmV2aW91c1JldmVydGVkU2NhbGUs
IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSkpOworICAgICAgICBwYWludChtX3ByZXZp
b3VzVGlsZVNldC5nZXQoKSwgcmVjdCwgZ2MpOwogICAgIH0KIAogICAgIGdjLnJlc3RvcmUoKTsK
QEAgLTI5OCwyMiArMzY5LDQzIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNp
YmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsCiAgICAgfQogfQog
Ci12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2Fs
ZSkKK2Zsb2F0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y292ZXJhZ2VSYXRpbyhUaWxlZERyYXdp
bmdBcmVhVGlsZVNldCogdGlsZVNldCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAobV9jb250ZW50c1NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgcmVtb3ZlQWxsVGlsZXMoKTsKLSAgICBjcmVh
dGVUaWxlcygpOworICAgIEludFJlY3QgZGlydHlSZWN0ID0gdGlsZVNldC0+bWFwRnJvbUNvbnRl
bnRzKHJlY3QpOworICAgIGZsb2F0IHJlY3RBcmVhID0gZGlydHlSZWN0LndpZHRoKCkgKiBkaXJ0
eVJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgY292ZXJBcmVhID0gMC4wZjsKKworICAgIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBv
aW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21S
aWdodChkaXJ0eVJlY3QpKTsKKworICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BM
ZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3Jk
aW5hdGUgPD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CisgICAgICAgICAgICBU
aWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRp
bmF0ZSwgeUNvb3JkaW5hdGUpOworICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiBjdXJyZW50VGlsZSA9IHRpbGVTZXQtPnRpbGVzKCkuZ2V0KFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSkpOworICAgICAgICAgICAg
aWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKSB7CisgICAg
ICAgICAgICAgICAgSW50UmVjdCBjb3ZlclJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBj
dXJyZW50VGlsZS0+cmVjdCgpKTsKKyAgICAgICAgICAgICAgICBjb3ZlckFyZWEgKz0gY292ZXJS
ZWN0LndpZHRoKCkgKiBjb3ZlclJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGNvdmVyQXJlYSAvIHJlY3RBcmVhOwogfQogCi12b2lkIFRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMoKQordm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCiB7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiB0aWxlc1RvUmVtb3ZlOwotICAgIGNvcHlWYWx1
ZXNUb1ZlY3RvcihtX3RpbGVzLCB0aWxlc1RvUmVtb3ZlKTsKLSAgICB1bnNpZ25lZCByZW1vdmVD
b3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4g
PCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICByZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0t
PmNvb3JkaW5hdGUoKSk7CisgICAgaWYgKG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUo
KSA9PSBzY2FsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gS2VlcCB0aGUgY3VycmVudCB0
aWxlcyBpbiBtX3ByZXZpb3VzVGlsZVNldCB3aGlsZSB0aGUgbmV3IHNjYWxlIHRpbGVzIGFyZSBi
ZWluZyB1cGRhdGVkLgorICAgIC8vIElmIG1fY3VycmVudFRpbGVTZXQgc3RpbGwgaGFzbid0IG1v
cmUgcGFpbnRhYmxlIGNvbnRlbnQgZm9yIHRoZSBjdXJyZW50IHZpZXdwb3J0IHJlY3QKKyAgICAv
LyB0aGFuIG1fcHJldmlvdXNUaWxlU2V0LCB0aGVuIGtlZXAgdGhlIG9sZCBtX3ByZXZpb3VzVGls
ZVNldC4gVGhpcyBoYXBwZW5zIHdoZW4KKyAgICAvLyBzZXRDb250ZW50c1NjYWxlIGlzIGNhbGxl
ZCB0d2ljZSB3aGlsZSBtX2N1cnJlbnRUaWxlU2V0IHN0aWxsIGNvbnRhaW5zIGZldyBvciBubyBy
ZW5kZXJlZCB0aWxlcy4KKyAgICBpZiAoIW1fcHJldmlvdXNUaWxlU2V0IHx8IGNvdmVyYWdlUmF0
aW8obV9wcmV2aW91c1RpbGVTZXQuZ2V0KCksIHZpc2libGVSZWN0KCkpIDwgY292ZXJhZ2VSYXRp
byhtX2N1cnJlbnRUaWxlU2V0LmdldCgpLCB2aXNpYmxlUmVjdCgpKSkgeworICAgICAgICBtX3By
ZXZpb3VzVGlsZVNldCA9IG1fY3VycmVudFRpbGVTZXQucmVsZWFzZSgpOworICAgICAgICBkaXNh
YmxlVGlsZVNldFVwZGF0ZXMobV9wcmV2aW91c1RpbGVTZXQuZ2V0KCkpOworICAgIH0KKyAgICBt
X2N1cnJlbnRUaWxlU2V0ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KHNj
YWxlKSk7CisgICAgY3JlYXRlVGlsZXMoKTsKIH0KIAogZG91YmxlIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCkBAIC0zNzUsNyArNDY3
LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKCkKICAgICAgICAg
ICAgIC8vIERpc3RhbmNlIGlzIDAgZm9yIGFsbCBjdXJyZW50bHkgdmlzaWJsZSB0aWxlcy4KICAg
ICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IHRpbGVEaXN0YW5jZSh2aXNpYmxlUmVjdCwgY3Vy
cmVudENvb3JkaW5hdGUpOwogCi0gICAgICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRp
bGU+IHRpbGUgPSB0aWxlQXQoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAgUmVmUHRy
PFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5n
ZXQoY3VycmVudENvb3JkaW5hdGUpOwogICAgICAgICAgICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRp
bGUgfHwgIXRpbGUtPmlzUmVhZHlUb1BhaW50KCkpKQogICAgICAgICAgICAgICAgIGhhc1Zpc2li
bGVDaGVja2VycyA9IHRydWU7CiAgICAgICAgICAgICBpZiAodGlsZSkKQEAgLTM5OCw4ICs0OTAs
MTEgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKCkKIAogICAgIC8v
IE5vdyBjb25zdHJ1Y3QgdGhlIHRpbGUocykuCiAgICAgdW5zaWduZWQgdGlsZXNUb0NyZWF0ZUNv
dW50ID0gdGlsZXNUb0NyZWF0ZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IHRpbGVzVG9DcmVhdGVDb3VudDsgKytuKQotICAgICAgICBjcmVhdGVUaWxlKHRpbGVzVG9DcmVh
dGVbbl0pOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7
ICsrbikgeworICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGlu
YXRlID0gdGlsZXNUb0NyZWF0ZVtuXTsKKyAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiB0aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZSh0aGlzLCBjb29yZGluYXRl
KTsKKyAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5zZXQoY29vcmRpbmF0ZSwgdGls
ZSk7CisgICAgfQogCiAgICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNvdW50
OwogCkBAIC00MTgsOCArNTEzLDggQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlc2l6
ZUVkZ2VUaWxlcygpCiAgICAgYm9vbCB3YXNSZXNpemVkID0gZmFsc2U7CiAKICAgICBWZWN0b3I8
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7Ci0gICAgVGls
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBUaWxl
ZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGls
ZVNldC0+dGlsZXMoKS5lbmQoKTsKKyAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpU
aWxlTWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwogICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwogICAgICAgICBJbnRSZWN0IGV4
cGVjdGVkVGlsZVJlY3QgPSB0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwpA
QCAtNDMyLDcgKzUyNyw3IEBAIGJvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdl
VGlsZXMoKQogICAgIH0KICAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUu
c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQot
ICAgICAgICByZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0pOworICAgICAgICBtX2N1cnJlbnRU
aWxlU2V0LT50aWxlcygpLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW25dKTsKICAgICByZXR1cm4gd2Fz
UmVzaXplZDsKIH0KIApAQCAtNDQxLDggKzUzNiw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVBy
b3h5Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKICAgICBG
bG9hdFJlY3Qga2VlcFJlY3RGID0ga2VlcFJlY3Q7CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwotICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVT
ZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuZW5k
KCk7CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0g
aXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwogICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBp
dC0+c2Vjb25kLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVw
UmVjdEYpKQpAQCAtNDUwLDU2ICs1NDUsMzAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6
OmRyb3BUaWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogICAgIH0KICAg
ICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgcmVtb3ZlVGlsZSh0b1Jl
bW92ZVtuXSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IFRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6dGlsZUF0KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlJiBjb29yZGluYXRlKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbGVzLmdldChjb29yZGlu
YXRlKTsKKyAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5yZW1vdmUodG9SZW1vdmVb
bl0pOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VGlsZShjb25zdCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSwgUmVmUHRyPFRpbGVkRHJh
d2luZ0FyZWFUaWxlPiB0aWxlKQordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRpc2FibGVU
aWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVhVGlsZVNldCogdGlsZVNldCkKIHsKLSAgICBt
X3RpbGVzLnNldChjb29yZGluYXRlLCB0aWxlKTsKLSAgICBtX3RpbGVzQnlJRC5zZXQodGlsZS0+
SUQoKSwgdGlsZS5nZXQoKSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVTZXQtPnRpbGVzKCkuZW5kKCk7CisgICAgZm9yIChU
aWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxl
U2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29u
ZC0+ZGlzYWJsZVVwZGF0ZXMoKTsKIH0KIAotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJl
bW92ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5h
dGUpCi17Ci0gICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gbV90aWxlcy50
YWtlKGNvb3JkaW5hdGUpOwotCi0gICAgbV90aWxlc0J5SUQucmVtb3ZlKHRpbGUtPklEKCkpOwot
Ci0gICAgaWYgKCF0aWxlLT5oYXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIHBhZ2Ut
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkNhbmNlbFRpbGVVcGRhdGUo
dGlsZS0+SUQoKSksIHBhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6Om1hcFRvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVBbGxUaWxlcygpCiB7Ci0gICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpIC8gbV9jb250ZW50c1NjYWxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAvIG1fY29udGVudHNT
Y2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgp
IC8gbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LmhlaWdodCgpIC8gbV9jb250ZW50c1NjYWxlKSk7CisgICAgbV9jdXJyZW50VGlsZVNl
dCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChtX2N1cnJlbnRUaWxlU2V0
LT5jb250ZW50c1NjYWxlKCkpKTsKIH0KIAotSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6
Om1hcEZyb21Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAqIG1fY29udGVudHNTY2FsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKiBtX2NvbnRl
bnRzU2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lk
dGgoKSAqIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC5oZWlnaHQoKSAqIG1fY29udGVudHNTY2FsZSkpOwotfQogCiBJbnRSZWN0IFRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bWFwRnJvbUNvbnRlbnRzKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKKyAg
ICByZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKEludFJlY3QoSW50UG9p
bnQoMCwgMCksIG1fdmlld1NpemUpKTsKIH0KIAogSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OnZpc2libGVSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWFwRnJvbUNvbnRlbnRzKG1f
dmlzaWJsZUNvbnRlbnRSZWN0KTsKKyAgICByZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+bWFwRnJv
bUNvbnRlbnRzKG1fdmlzaWJsZUNvbnRlbnRSZWN0KTsKIH0KIAogSW50UmVjdCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShjb25zdCBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkgY29uc3QKQEAgLTU0Nyw4ICs2MTYsOCBAQCB2
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCgpCiAKIGJv
b2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpoYXNQZW5kaW5nVXBkYXRlcygpIGNvbnN0CiB7Ci0g
ICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKKyAgICBmb3IgKFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY3Vy
cmVudFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IGNvbnN0IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+c2Vjb25k
OwogICAgICAgICBpZiAoY3VycmVudC0+aGFzQmFja0J1ZmZlclVwZGF0ZVBlbmRpbmcoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rp
bGVkRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDE0ZGViNjJhMTRkOTIzMmY4NDNmMjAxMmY2NTYy
ZjI5Mjc3ZjY0ZWEuLmVhNTI0NWZlOGYxMDU4YmY4ZDA3NGIxYWU2NzVkZmMyMjRiNGQ3ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgK
QEAgLTQ1LDkgKzQ1LDE0IEBAIGNsYXNzIFdLVmlldzsKICNlbmRpZgogI2VuZGlmCiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK30KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKK2NsYXNzIFRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0OwogY2xhc3MgV2ViUGFnZVByb3h5OwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjgs
NyArNzMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGlsZWREcmF3aW5nQXJlYVByb3h5KCk7
CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNT
Y2FsZTsgfQogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03Niw4ICs4MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkgeyB9CiAjZW5kaWYKIAotICAgIHZv
aWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotCiAgICAgV2ViQ29yZTo6SW50U2l6ZSB0aWxlU2l6ZSgpIHsgcmV0dXJuIG1fdGlsZVNp
emU7IH0KICAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIApA
QCAtOTQsOSArOTYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRpbGVCdWZmZXJVcGRhdGVDb21w
bGV0ZSgpOwogCi0gICAgV2ViQ29yZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21Db250ZW50
cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7Ci0KICAgICBib29sIGhhc1BlbmRpbmdV
cGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMTMsOSArMTEyLDEwIEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHRpbGVVcGRhdGVkKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8sIGZsb2F0IHNjYWxlLCB1bnNpZ25lZCBwZW5kaW5nVXBkYXRlQ291bnQp
OwogICAgIHZpcnR1YWwgdm9pZCBhbGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpOwogCisgICAgdm9p
ZCByZWdpc3RlclRpbGUoaW50IHRpbGVJRCwgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGls
ZT4pOworICAgIHZvaWQgdW5yZWdpc3RlclRpbGUoaW50IHRpbGVJRCk7CiAgICAgdm9pZCByZXF1
ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpOwotCi0gICAgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3JlYXRlVGlsZShj
b25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZvaWQgY2FuY2Vs
VGlsZVVwZGF0ZShpbnQgdGlsZUlEKTsKIAogICAgIHZvaWQgc3RhcnRUaWxlQnVmZmVyVXBkYXRl
VGltZXIoKTsKICAgICB2b2lkIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKQEAgLTEyOSwxMSAr
MTI5LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXNpemVFZGdlVGlsZXMoKTsKICAgICB2b2lk
IGRyb3BUaWxlc091dHNpZGVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIAotICAgIFBh
c3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGVBdChjb25zdCBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSYpIGNvbnN0OwotICAgIHZvaWQgc2V0VGlsZShjb25zdCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSwgUmVmUHRyPFRpbGVkRHJh
d2luZ0FyZWFUaWxlPiB0aWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoY29uc3QgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpOworICAgIHZvaWQgZGlzYWJsZVRp
bGVTZXRVcGRhdGVzKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Kik7CiAgICAgdm9pZCByZW1vdmVB
bGxUaWxlcygpOwogCisgICAgdm9pZCBwYWludChUaWxlZERyYXdpbmdBcmVhVGlsZVNldCosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBm
bG9hdCBjb3ZlcmFnZVJhdGlvKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOworCiAgICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25z
dDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVSZWN0KCkgY29uc3Q7CiAKQEAgLTE1Myw4
ICsxNTQsOCBAQCBwcml2YXRlOgogCiAgICAgUGxhdGZvcm1XZWJWaWV3KiBtX3dlYlZpZXc7CiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUsIFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBUaWxlTWFwOwotICAgIFRpbGVNYXAgbV90aWxl
czsKKyAgICBPd25QdHI8VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ+IG1fY3VycmVudFRpbGVTZXQ7
CisgICAgT3duUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0PiBtX3ByZXZpb3VzVGlsZVNldDsK
IAogICAgIFdURjo6SGFzaE1hcDxpbnQsIFRpbGVkRHJhd2luZ0FyZWFUaWxlKj4gbV90aWxlc0J5
SUQ7CiAKQEAgLTE2OCw3ICsxNjksNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJs
ZUNvbnRlbnRSZWN0OwotICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIAogICAgIGZyaWVuZCBj
bGFzcyBUaWxlZERyYXdpbmdBcmVhVGlsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCmluZGV4IDdmMWFlNTJjODNiMmEwMDM0MDNmNmE2
NmFjMDNkYmQ3YmQ2NzQxNDcuLjJiOWI1MGQ0ZDMxZTQ0ZDIxNmNiNmQwODBmNWVmYTBlMzQzZTkz
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVh
VGlsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGls
ZS5oCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7CiAKICAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0
ZUluZm8mLCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCBkaXNhYmxlVXBkYXRlcygpOwogCiAgICAg
aW50IElEKCkgY29uc3QgeyByZXR1cm4gbV9JRDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKaW5kZXggYTlkZmI4
NGFiNzU3MjM0NjY4MDI2NWM0YjQxMTgzNjJjMTE5OGUwOS4uMjU5ZGZkMWJlNGQyNTYwNzBjY2Yx
NDgxMWM3YzA3MTVlZmQ3NDQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcApAQCAtNTEsNiArNTEsNyBAQCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6VGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5nQXJlYVBy
b3h5KiBwcm94eSwgY29uc3QgQwogewogICAgIHN0YXRpYyBpbnQgaWQgPSAwOwogICAgIG1fSUQg
PSArK2lkOworICAgIG1fcHJveHktPnJlZ2lzdGVyVGlsZShtX0lELCB0aGlzKTsKICNpZmRlZiBU
SUxFX0RFQlVHX0xPRwogICAgIHFEZWJ1ZygpIDw8ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9J
RDsKICNlbmRpZgpAQCAtNjEsNiArNjIsNyBAQCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6flRpbGVk
RHJhd2luZ0FyZWFUaWxlKCkKICNpZmRlZiBUSUxFX0RFQlVHX0xPRwogICAgIHFEZWJ1ZygpIDw8
ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKICNlbmRpZgorICAgIGRpc2FibGVVcGRhdGVz
KCk7CiB9CiAKIGJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmlzRGlydHkoKSBjb25zdApAQCAt
MTIzLDYgKzEyNSw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgZmxvYXQpCiB7CisgICAgQVNTRVJUKG1fcHJveHkpOwogICAgIG1faXNCYWNrQnVmZmVyVmFs
aWQgPSB0cnVlOwogICAgIG1faGFzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogCkBAIC0xNDMsOCAr
MTQ2LDI1IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmluY29ycG9yYXRlVXBkYXRlKGNv
bnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0CiAgICAgcGFpbnRlci5kcmF3SW1hZ2Uo
UVBvaW50KGRyYXdQb2ludC53aWR0aCgpLCBkcmF3UG9pbnQuaGVpZ2h0KCkpLCBpbWFnZSk7CiB9
CiAKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmRpc2FibGVVcGRhdGVzKCkKK3sKKyAgICBp
ZiAoIW1fcHJveHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2hhc1VwZGF0ZVBlbmRp
bmcpIHsKKyAgICAgICAgbV9wcm94eS0+Y2FuY2VsVGlsZVVwZGF0ZShtX0lEKTsKKyAgICAgICAg
bV9oYXNVcGRhdGVQZW5kaW5nID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wcm94eS0+dW5yZWdp
c3RlclRpbGUobV9JRCk7CisgICAgbV9iYWNrQnVmZmVyID0gUVBpeG1hcCgpOworICAgIG1faXNC
YWNrQnVmZmVyVmFsaWQgPSBmYWxzZTsKKyAgICBtX3Byb3h5ID0gMDsKK30KKwogdm9pZCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiB7CisgICAgQVNTRVJUKG1fcHJv
eHkpOwogICAgIGlmIChpc1JlYWR5VG9QYWludCgpICYmICFpc0RpcnR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAo=
</data>
<flag name="review"
          id="97270"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="97272"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>