<?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>125905</bug_id>
          
          <creation_ts>2013-12-17 18:42:49 -0800</creation_ts>
          <short_desc>[MSE][Mac] Add AVSampleBufferAudioRenderer support.</short_desc>
          <delta_ts>2013-12-18 17:11:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>125899</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960788</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-17 18:42:49 -0800</bug_when>
    <thetext>[MSE][Mac] Add AVSampleBufferAudioRenderer support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960790</commentid>
    <comment_count>1</comment_count>
      <attachid>219489</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-17 18:46:21 -0800</bug_when>
    <thetext>Created attachment 219489
Patch

Initial version. The ChangeLog is a little sparse, and I intend to flesh it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960930</commentid>
    <comment_count>2</comment_count>
      <attachid>219534</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-18 07:32:38 -0800</bug_when>
    <thetext>Created attachment 219534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960964</commentid>
    <comment_count>3</comment_count>
      <attachid>219534</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-18 09:53:32 -0800</bug_when>
    <thetext>Comment on attachment 219534
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:326
&gt; +        [renderer flush];
&gt; +        [renderer stopRequestingMediaData];

Shouldn&apos;t these be called in the opposite order to avoid a potential race?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:380
&gt; +    return info-&gt;sourceBuffer-&gt;processCodedFrame(info-&gt;trackID, sampleBuffer, info-&gt;mediaType) ? noErr : paramErr;

paramErr :-O

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:447
&gt; +    for (auto it = m_audioRenderers.begin(), end = m_audioRenderers.end(); it != end; ++it) {
&gt; +        AVSampleBufferAudioRenderer* renderer = it-&gt;second.get();
&gt; +        if (m_mediaSource)
&gt; +            m_mediaSource-&gt;player()-&gt;removeAudioRenderer(renderer);
&gt; +        [renderer flush];
&gt; +        [renderer stopRequestingMediaData];
&gt; +    }
&gt; +
&gt; +    m_audioRenderers.clear();

This looks like the same code you have in the destructor. Can it be in a shared method?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:510
&gt; +        if (m_mediaSource)
&gt; +            m_mediaSource-&gt;player()-&gt;addDisplayLayer(m_displayLayer.get());

player()-&gt;addDisplayLayer() is a noop if it the layer has already been added?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:558
&gt; +    int trackID = trackIDString.toInt();

Might be worth adding an ASSERT(trackID &lt; m_audioRenderers.size())

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:604
&gt; +    int trackID = trackIDString.toInt();

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:624
&gt; +    int trackID = trackIDString.toInt();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961152</commentid>
    <comment_count>4</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-18 16:04:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 219534 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219534&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:326
&gt; &gt; +        [renderer flush];
&gt; &gt; +        [renderer stopRequestingMediaData];
&gt; 
&gt; Shouldn&apos;t these be called in the opposite order to avoid a potential race?

Since the renderers are requesting media data on the main dispatch queue, there&apos;s no opportunity for a race.  But I&apos;ll swap them anyways.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:380
&gt; &gt; +    return info-&gt;sourceBuffer-&gt;processCodedFrame(info-&gt;trackID, sampleBuffer, info-&gt;mediaType) ? noErr : paramErr;
&gt; 
&gt; paramErr :-O

I no rite?!  Luckily, this gets removed in a future patch.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:447
&gt; &gt; +    for (auto it = m_audioRenderers.begin(), end = m_audioRenderers.end(); it != end; ++it) {
&gt; &gt; +        AVSampleBufferAudioRenderer* renderer = it-&gt;second.get();
&gt; &gt; +        if (m_mediaSource)
&gt; &gt; +            m_mediaSource-&gt;player()-&gt;removeAudioRenderer(renderer);
&gt; &gt; +        [renderer flush];
&gt; &gt; +        [renderer stopRequestingMediaData];
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    m_audioRenderers.clear();
&gt; 
&gt; This looks like the same code you have in the destructor. Can it be in a shared method?

I think so.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:510
&gt; &gt; +        if (m_mediaSource)
&gt; &gt; +            m_mediaSource-&gt;player()-&gt;addDisplayLayer(m_displayLayer.get());
&gt; 
&gt; player()-&gt;addDisplayLayer() is a noop if it the layer has already been added?

No, it swaps out the existing layer for the new one.  The existing one might have been created by ensurePlatformLayer().

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:558
&gt; &gt; +    int trackID = trackIDString.toInt();
&gt; 
&gt; Might be worth adding an ASSERT(trackID &lt; m_audioRenderers.size())

The &quot;if (m_audioRenderers.count(trackID))&quot; check should handle that.  Besides, what if a video has 2 video tracks, then 1 audio track?

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:604
&gt; &gt; +    int trackID = trackIDString.toInt();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:624
&gt; &gt; +    int trackID = trackIDString.toInt();
&gt; 
&gt; Ditto.

Both these have ASSERT_NOT_REACHED checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961187</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-18 17:11:45 -0800</bug_when>
    <thetext>Committed r160810: &lt;http://trac.webkit.org/changeset/160810&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219489</attachid>
            <date>2013-12-17 18:46:21 -0800</date>
            <delta_ts>2013-12-18 07:32:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125905-20131217184621.patch</filename>
            <type>text/plain</type>
            <size>21472</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU5OTkzYzJiNzJhYzRh
NmViNDcwYWVjNjdlYTYxNzJjYjNlMTRmNC4uYTg2ZmY0MTc2ZTcwNWVlNDBkODlhZWQwYzFmNDU4
MDdlYzVlZGQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDEzLTEyLTE3ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNU0VdW01hY10gQWRkIEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1OTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT24gcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgQVZT
YW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyLCBhZGQgc3VwcG9ydAorICAgICAgICBmb3IgcGxheWJh
Y2sgb2YgYXVkaW8gQ01TYW1wbGVCdWZmZXJSZWZzIGdlbmVyYXRlZCBieSBBVlN0cmVhbURhdGFQ
YXJzZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0TXV0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphZGRBdWRp
b1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6cmVtb3ZlQXVkaW9SZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6OmNhbGxQcm9jZXNzQ29kZWRGcmFtZUZvckVhY2hTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnJlbW92ZWRGcm9t
TWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmVucXVldWVTYW1w
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmlzUmVh
ZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQzo6ZGlkQmVjb21lUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6bm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9y
ZVNhbXBsZXMpOgorCisyMDEzLTEyLTE3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgorCiAgICAgICAgIFtNU0VdIEFkZCBwZXItdHJhY2sgc2lnbmFsbGluZyBiZXR3ZWVuIFNvdXJj
ZUJ1ZmZlciBhbmQgU291cmNlQnVmZmVyUHJpdmF0ZS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTg5OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
CmluZGV4IGM0ODRmMzlkZjM1ZjMwOWM2NDUwOTlmMTU2ODFiMzBjM2JhMzBhOWEuLjQ2OTkzZDA0
MjdiZmI3NmJlMGZmMzZmYmU2MTRhNWVmZTJiZDNlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oCkBAIC0zMSw4ICszMSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvTWVk
aWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBPQkpDX0NMQVNTIEFWQXNzZXQ7
CitPQkpDX0NMQVNTIEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcjsKIE9CSkNfQ0xBU1MgQVZT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNNVGltZWJh
c2UqIENNVGltZWJhc2VSZWY7CkBAIC01Miw2ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZERpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOwogICAgIHZvaWQgcmVt
b3ZlRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7CiAKKyAgICB2b2lk
IGFkZEF1ZGlvUmVuZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKik7CisgICAgdm9p
ZCByZW1vdmVBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworCiAg
ICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSk7CkBAIC04Miw2ICs4NywxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBi
b29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVt
ZShmbG9hdCB2b2x1bWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c011dGlu
ZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TXV0ZWQoYm9vbCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTY2Fubmlu
ZygpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkg
Y29uc3QgT1ZFUlJJREU7CkBAIC0xNTEsNiArMTYwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gbV9tZWRpYVNvdXJjZVByaXZhdGU7CiAgICAgUmV0
YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKKyAgICBWZWN0b3I8UmV0YWlu
UHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcj4+IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5k
ZXJlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ2xvY2tDTT4gbV9jbG9jazsKICAg
ICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpp
bmRleCBkYWZiMGIyYjNiN2EwM2M1OWRkMmY3YmRkNjk4ZDdhNzRmNWUwMDNmLi4wMmJhMjQ2ZWY1
MTFjYTg3MWRlZGQzZjA1MDNlYzI5YTcwOGRjZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lm1tCkBAIC00OCwxMCArNDgsMTMgQEAgU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3Jl
TWVkaWEpCiAKIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWQXNzZXQp
CiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJBdWRpb1Jl
bmRlcmVyKQogU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXIpCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9u
LCBBVlN0cmVhbURhdGFQYXJzZXIpCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0
aW9uLCBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzKQogCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBG
aWdSZWFkT25seVRpbWViYXNlU2V0VGFyZ2V0VGltZWJhc2UsIE9TU3RhdHVzLCAoQ01UaW1lYmFz
ZVJlZiB0aW1lYmFzZSwgQ01UaW1lYmFzZVJlZiBuZXdUYXJnZXRUaW1lYmFzZSksICh0aW1lYmFz
ZSwgbmV3VGFyZ2V0VGltZWJhc2UpKQorCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIEFW
VmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MKIApAQCAtNjYsNiArNjksMTggQEAgU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZWaWRlb1BlcmZvcm1hbmNlTWV0cmljcykKIC0g
KEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MgKil2aWRlb1BlcmZvcm1hbmNlTWV0cmljczsKIEBl
bmQKIAorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcgorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDkwCitA
aW50ZXJmYWNlIEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciA6IE5TT2JqZWN0CistIChDTVRp
bWViYXNlUmVmKXRpbWViYXNlOworLSAodm9pZClzZXRWb2x1bWU6KGZsb2F0KXZvbHVtZTsKKy0g
KHZvaWQpc2V0TXV0ZWQ6KEJPT0wpbXV0ZWQ7CitAZW5kCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAjcHJhZ21hIG1hcmsgLQpAQCAtMTAxLDcgKzExNiw3IEBAIFBhc3NPd25QdHI8
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Ojppc0F2YWlsYWJsZSgpCiB7Ci0gICAgcmV0dXJuIEFWRm91bmRhdGlvbkxpYnJhcnkoKSAmJiBD
b3JlTWVkaWFMaWJyYXJ5KCkgJiYgZ2V0QVZTdHJlYW1EYXRhUGFyc2VyQ2xhc3MoKTsKKyAgICBy
ZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpICYmIENvcmVNZWRpYUxpYnJhcnkoKSAmJiBnZXRB
VlN0cmVhbURhdGFQYXJzZXJDbGFzcygpICYmIGdldEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJl
ckNsYXNzKCk7CiB9CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBA
IC0yMTEsMTEgKzIyNiwyMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6cGF1c2VkKCkgY29uc3QKICAgICByZXR1cm4gIW1fY2xvY2stPmlzUnVubmluZygpOwog
fQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0Vm9sdW1l
KGZsb2F0IHZvbHVtZSkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3NhbXBsZUJ1ZmZlckF1ZGlv
UmVuZGVyZXJzLmJlZ2luKCksIGVuZCA9IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgWyppdCBzZXRWb2x1bWU6dm9sdW1lXTsKK30K
KwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzU2Nh
bm5pbmcoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBm
b3IgKGF1dG8gaXQgPSBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmJlZ2luKCksIGVuZCA9
IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgWyppdCBzZXRNdXRlZDptdXRlZF07Cit9CisKIEludFNpemUgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUUoMTI1MTU2KTogUmVwb3J0IHRoZSBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgZW5hYmxlZCB2aWRl
byB0cmFjay4KQEAgLTQ2OCw2ICs0OTUsMjYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3AKICAg
ICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2Rl
Q2hhbmdlZChtX3BsYXllcik7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphZGRBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciog
YXVkaW9SZW5kZXJlcikKK3sKKyAgICBpZiAobV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5j
b250YWlucyhhdWRpb1JlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zYW1wbGVC
dWZmZXJBdWRpb1JlbmRlcmVycy5hcHBlbmQoYXVkaW9SZW5kZXJlcik7CisgICAgRmlnUmVhZE9u
bHlUaW1lYmFzZVNldFRhcmdldFRpbWViYXNlKFthdWRpb1JlbmRlcmVyIHRpbWViYXNlXSwgbV9j
bG9jay0+dGltZWJhc2UoKSk7CisgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1l
ZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNh
bXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqIGF1ZGlvUmVuZGVyZXIpCit7CisgICAgc2l6ZV90IHBv
cyA9IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuZmluZChhdWRpb1JlbmRlcmVyKTsKKyAg
ICBpZiAocG9zID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1
ZmZlckF1ZGlvUmVuZGVyZXJzLnJlbW92ZShwb3MpOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXll
ckNsaWVudCgpLT5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKK30K
KwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQy5oCmluZGV4IGEyZGIzYjVlYjY5NTdhMDA0YmI0Y2I1MDdlZDQ2ZjAy
OWFmOWNlYzUuLmIwODVkY2E1NTJjY2E0ODU0MWRmODg2OTUxZjgyOWU3ZGM2MTI3YzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMu
aApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZP
VU5EQVRJT04pCiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8
bWFwPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgpAQCAtMzksNiArNDAsNyBAQAogCiBPQkpDX0NMQVNT
IEFWQXNzZXQ7CiBPQkpDX0NMQVNTIEFWU3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgQVZT
YW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyOwogT0JKQ19DTEFTUyBBVlNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllcjsKIE9CSkNfQ0xBU1MgTlNFcnJvcjsKIE9CSkNfQ0xBU1MgTlNPYmplY3Q7CkBAIC05
NCw2ICs5NiwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBh
c3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcgdHJhY2tJ
RCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoQXRv
bWljU3RyaW5nIHRyYWNrSUQpIE9WRVJSSURFOworCisgICAgdm9pZCBmbHVzaEFuZEVucXVldWVO
b25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEFWU2FtcGxl
QnVmZmVyQXVkaW9SZW5kZXJlciopOworICAgIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxh
eWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBVlNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllciopOworCisgICAgdm9pZCBkaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKGlu
dCB0cmFja0lEKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGU+PiBtX3Zp
ZGVvVHJhY2tzOwogICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGU+PiBtX2F1ZGlv
VHJhY2tzOwpAQCAtMTAxLDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPEFWU3Ry
ZWFtRGF0YVBhcnNlcj4gbV9wYXJzZXI7CiAgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7
CiAgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX2Rpc3BsYXlMYXll
cjsKKyAgICBzdGQ6Om1hcDxpbnQsIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVy
ZXI+PiBtX2F1ZGlvUmVuZGVyZXJzOwogICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9kZWxlZ2F0
ZTsKIAogICAgIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMqIG1fbWVkaWFTb3VyY2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1t
CmluZGV4IGVkZmFiYzg3YWFlY2JmMjlmYjc1NDFiODQzYjZhZjMwNjFjNWM4NDEuLjFhODg5Yjg0
ZDQ0N2Y0MDA0YTljZjM5YzY1N2RiYmRiZjliNjE2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCkBAIC01OSw2ICs1OSw3
IEBAIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQogCiBTT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVkFzc2V0VHJhY2spCiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3Vu
ZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9u
LCBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIpCiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0
aW9uLCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcikKIAogU09GVF9MSU5LX1BPSU5URVJfT1BU
SU9OQUwoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBOU1N0cmluZyAqKQpAQCAtMTA3
LDkgKzEwOCw3IEBAIFNPRlRfTElOSyhDb3JlTWVkaWEsIENNU2V0QXR0YWNobWVudCwgdm9pZCwg
KENNQXR0YWNobWVudEJlYXJlclJlZiB0YXJnZXQsIENGU3RyCiAKICNwcmFnbWEgbWFyayAtCiAj
cHJhZ21hIG1hcmsgQVZTdHJlYW1EYXRhUGFyc2VyCi1AY2xhc3MgQVZTdHJlYW1EYXRhUGFyc2Vy
SW50ZXJuYWw7CiAKLU5TX0NMQVNTX0FWQUlMQUJMRShUQkQsIFRCRCkKIEBpbnRlcmZhY2UgQVZT
dHJlYW1EYXRhUGFyc2VyIDogTlNPYmplY3QKIC0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkKWRlbGVn
YXRlOwogLSAodm9pZClhcHBlbmRTdHJlYW1EYXRhOihOU0RhdGEgKilkYXRhOwpAQCAtMTE4LDYg
KzExNywyMSBAQCBOU19DTEFTU19BVkFJTEFCTEUoVEJELCBUQkQpCiBAZW5kCiAKICNwcmFnbWEg
bWFyayAtCisjcHJhZ21hIG1hcmsgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyCisKKyNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwOTAKK0BpbnRlcmZhY2UgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyIDogTlNPYmplY3QKKy0gKE5TSW50ZWdlcilzdGF0dXM7Cist
IChOU0Vycm9yKillcnJvcjsKKy0gKHZvaWQpZW5xdWV1ZVNhbXBsZUJ1ZmZlcjooQ01TYW1wbGVC
dWZmZXJSZWYpc2FtcGxlQnVmZmVyOworLSAodm9pZClmbHVzaDsKKy0gKEJPT0wpaXNSZWFkeUZv
ck1vcmVNZWRpYURhdGE7CistICh2b2lkKXJlcXVlc3RNZWRpYURhdGFXaGVuUmVhZHlPblF1ZXVl
OihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5nQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWJsb2Nr
OworLSAodm9pZClzdG9wUmVxdWVzdGluZ01lZGlhRGF0YTsKK0BlbmQKKyNlbmRpZgorCisjcHJh
Z21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIFdlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyCiAK
IEBpbnRlcmZhY2UgV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgOiBOU09iamVjdCB7CkBA
IC0yOTAsNiArMzA0LDcgQEAgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OlNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDKE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMKICAgICAsIG1fbWVkaWFT
b3VyY2UocGFyZW50KQogICAgICwgbV9jbGllbnQoMCkKICAgICAsIG1fcGFyc2luZ1N1Y2NlZWRl
ZCh0cnVlKQorICAgICwgbV9lbmFibGVkVmlkZW9UcmFja0lEKC0xKQogewogfQogCkBAIC0zMDIs
NiArMzE3LDE2IEBAIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp+U291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakMoKQogICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgc3RvcFJlcXVlc3RpbmdNZWRp
YURhdGFdOwogICAgICAgICBtX2Rpc3BsYXlMYXllciA9IG51bGxwdHI7CiAgICAgfQorCisgICAg
Zm9yIChhdXRvIGl0ID0gbV9hdWRpb1JlbmRlcmVycy5iZWdpbigpLCBlbmQgPSBtX2F1ZGlvUmVu
ZGVyZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVZTYW1wbGVCdWZmZXJB
dWRpb1JlbmRlcmVyKiByZW5kZXJlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmICht
X21lZGlhU291cmNlKQorICAgICAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPnJlbW92
ZUF1ZGlvUmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBbcmVuZGVyZXIgZmx1c2hdOworICAg
ICAgICBbcmVuZGVyZXIgc3RvcFJlcXVlc3RpbmdNZWRpYURhdGFdOworICAgIH0KKworICAgIG1f
YXVkaW9SZW5kZXJlcnMuY2xlYXIoKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKQEAgLTM1Miw3
ICszNzcsNyBAQCBzdHJ1Y3QgUHJvY2Vzc0NvZGVkRnJhbWVJbmZvIHsKIHN0YXRpYyBPU1N0YXR1
cyBjYWxsUHJvY2Vzc0NvZGVkRnJhbWVGb3JFYWNoU2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNh
bXBsZUJ1ZmZlciwgQ01JdGVtQ291bnQsIHZvaWQgKnJlZmNvbikKIHsKICAgICBQcm9jZXNzQ29k
ZWRGcmFtZUluZm8qIGluZm8gPSBzdGF0aWNfY2FzdDxQcm9jZXNzQ29kZWRGcmFtZUluZm8qPihy
ZWZjb24pOwotICAgIHJldHVybiBpbmZvLT5zb3VyY2VCdWZmZXItPnByb2Nlc3NDb2RlZEZyYW1l
KGluZm8tPnRyYWNrSUQsIHNhbXBsZUJ1ZmZlciwgaW5mby0+bWVkaWFUeXBlKTsKKyAgICByZXR1
cm4gaW5mby0+c291cmNlQnVmZmVyLT5wcm9jZXNzQ29kZWRGcmFtZShpbmZvLT50cmFja0lELCBz
YW1wbGVCdWZmZXIsIGluZm8tPm1lZGlhVHlwZSkgPyBub0VyciA6IHBhcmFtRXJyOwogfQogCiB2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJh
Y2tJRChpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZSwgdW5zaWduZWQgZmxhZ3MpCkBAIC00MTEsNiArNDM2LDE2IEBAIHZv
aWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKQog
ICAgICAgICBtX2Rpc3BsYXlMYXllciA9IG51bGxwdHI7CiAgICAgfQogCisgICAgZm9yIChhdXRv
IGl0ID0gbV9hdWRpb1JlbmRlcmVycy5iZWdpbigpLCBlbmQgPSBtX2F1ZGlvUmVuZGVyZXJzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVyKiByZW5kZXJlciA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChtX21lZGlhU291
cmNlKQorICAgICAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPnJlbW92ZUF1ZGlvUmVu
ZGVyZXIocmVuZGVyZXIpOworICAgICAgICBbcmVuZGVyZXIgZmx1c2hdOworICAgICAgICBbcmVu
ZGVyZXIgc3RvcFJlcXVlc3RpbmdNZWRpYURhdGFdOworICAgIH0KKworICAgIG1fYXVkaW9SZW5k
ZXJlcnMuY2xlYXIoKTsKKwogICAgIGlmIChtX21lZGlhU291cmNlKQogICAgICAgICBtX21lZGlh
U291cmNlLT5yZW1vdmVTb3VyY2VCdWZmZXIodGhpcyk7CiB9CkBAIC00NjgsMTggKzUwMywzOCBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp0cmFja0RpZENoYW5nZUVuYWJsZWQo
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdQogICAgICAgICBpZiAoIW1fZGlzcGxheUxheWVyKSB7
CiAgICAgICAgICAgICBtX2Rpc3BsYXlMYXllciA9IFtbZ2V0QVZTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJDbGFzcygpIGFsbG9jXSBpbml0XTsKICAgICAgICAgICAgIFttX2Rpc3BsYXlMYXllciBy
ZXF1ZXN0TWVkaWFEYXRhV2hlblJlYWR5T25RdWV1ZTpkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
IHVzaW5nQmxvY2s6XnsKLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlRGlkQmVjb21lUmVhZHlGb3JN
b3JlU2FtcGxlcyh0aGlzLCBBdG9taWNTdHJpbmc6Om51bWJlcih0cmFja0lEKSk7CisgICAgICAg
ICAgICAgICAgZGlkQmVjb21lUmVhZHlGb3JNb3JlU2FtcGxlcyh0cmFja0lEKTsKICAgICAgICAg
ICAgIH1dOwotICAgICAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCi0gICAgICAgICAgICAgICAg
bV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPmFkZERpc3BsYXlMYXllcihtX2Rpc3BsYXlMYXllci5n
ZXQoKSk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCisgICAgICAgICAg
ICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+YWRkRGlzcGxheUxheWVyKG1fZGlzcGxheUxheWVy
LmdldCgpKTsKICAgICB9CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRy
YWNrRGlkQ2hhbmdlRW5hYmxlZChBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyop
Cit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp0cmFja0RpZENoYW5nZUVuYWJsZWQo
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHRyYWNrKQogewotICAgIC8vIE5v
LW9wLgorICAgIGludCB0cmFja0lEID0gdHJhY2stPnRyYWNrSUQoKTsKKworICAgIGlmICghdHJh
Y2stPmVuYWJsZWQoKSkgeworICAgICAgICBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqIHJl
bmRlcmVyID0gbV9hdWRpb1JlbmRlcmVyc1t0cmFja0lEXS5nZXQoKTsKKyAgICAgICAgW21fcGFy
c2VyIHNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6Tk8gZm9yVHJhY2tJRDp0cmFja0lEXTsKKyAg
ICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCisgICAgICAgICAgICBtX21lZGlhU291cmNlLT5wbGF5
ZXIoKS0+cmVtb3ZlQXVkaW9SZW5kZXJlcihyZW5kZXJlcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgW21fcGFyc2VyIHNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6WUVTIGZvclRyYWNrSUQ6dHJh
Y2tJRF07CisgICAgICAgIEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciogcmVuZGVyZXI7Cisg
ICAgICAgIGlmICghbV9hdWRpb1JlbmRlcmVycy5jb3VudCh0cmFja0lEKSkgeworICAgICAgICAg
ICAgcmVuZGVyZXIgPSBbW2dldEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlckNsYXNzKCkgYWxs
b2NdIGluaXRdOworICAgICAgICAgICAgW3JlbmRlcmVyIHJlcXVlc3RNZWRpYURhdGFXaGVuUmVh
ZHlPblF1ZXVlOmRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkgdXNpbmdCbG9jazpeeworICAgICAg
ICAgICAgICAgIGRpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXModHJhY2tJRCk7CisgICAgICAg
ICAgICB9XTsKKyAgICAgICAgICAgIG1fYXVkaW9SZW5kZXJlcnNbdHJhY2tJRF0gPSByZW5kZXJl
cjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZW5kZXJlciA9IG1fYXVkaW9SZW5kZXJl
cnNbdHJhY2tJRF0uZ2V0KCk7CisKKyAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCisgICAgICAg
ICAgICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+YWRkQXVkaW9SZW5kZXJlcihyZW5kZXJlcik7
CisgICAgfQogfQogCiBzdGF0aWMgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVO
b25EaXNwbGF5aW5nQ29weShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIpCkBAIC00OTgs
MTQgKzU1MywyMCBAQCBzdGF0aWMgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVO
b25EaXNwbGF5aW5nQ29weShDTVNhbXBsZUJ1ZmZlclJlZiBzYQogICAgIHJldHVybiBhZG9wdENG
KG5ld1NhbXBsZUJ1ZmZlcik7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6
OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFT
YW1wbGU+PiBtZWRpYVNhbXBsZXMsIEF0b21pY1N0cmluZyB0cmFja0lEKQordm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMo
VmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+IG1lZGlhU2FtcGxlcywgQXRvbWljU3RyaW5nIHRy
YWNrSURTdHJpbmcpCiB7Ci0gICAgaWYgKHRyYWNrSUQudG9JbnQoKSAhPSBtX2VuYWJsZWRWaWRl
b1RyYWNrSUQpCi0gICAgICAgIHJldHVybjsKKyAgICBpbnQgdHJhY2tJRCA9IHRyYWNrSURTdHJp
bmcudG9JbnQoKTsKKyAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoJXApIHNhbXBsZXM6ICVkIHNhbXBs
ZXMsIHRyYWNrSWQ6ICVkIiwgdGhpcywgbWVkaWFTYW1wbGVzLnNpemUoKSwgdHJhY2tJRCk7CiAK
LSAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1
ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoJXApIHNhbXBsZXM6ICVkIHNhbXBsZXMsIHRyYWNrSWQ6
ICVkIiwgdGhpcywgbWVkaWFTYW1wbGVzLnNpemUoKSwgdHJhY2tJRC50b0ludCgpKTsKKyAgICBp
ZiAodHJhY2tJRCA9PSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQpCisgICAgICAgIGZsdXNoQW5kRW5x
dWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKG1lZGlhU2FtcGxlcywgbV9kaXNwbGF5TGF5ZXIuZ2V0
KCkpOworICAgIGVsc2UgaWYgKG1fYXVkaW9SZW5kZXJlcnMuY291bnQodHJhY2tJRCkpCisgICAg
ICAgIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKG1lZGlhU2FtcGxlcywgbV9h
dWRpb1JlbmRlcmVyc1t0cmFja0lEXS5nZXQoKSk7Cit9CiAKLSAgICBbbV9kaXNwbGF5TGF5ZXIg
Zmx1c2hdOwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVl
Tm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+IG1lZGlhU2Ft
cGxlcywgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKiByZW5kZXJlcikKK3sKKyAgICBbcmVu
ZGVyZXIgZmx1c2hdOwogCiAgICAgZm9yIChhdXRvIGl0ID0gbWVkaWFTYW1wbGVzLmJlZ2luKCks
IGVuZCA9IG1lZGlhU2FtcGxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJl
ZlB0cjxNZWRpYVNhbXBsZT4mIG1lZGlhU2FtcGxlID0gKml0OwpAQCAtNTE1LDE2ICs1NzYsMzMg
QEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlz
cGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlAKIAogICAgICAgICBSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KHBsYXRmb3Jt
U2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcik7CiAKLSAgICAgICAgW21fZGlzcGxheUxheWVy
IGVucXVldWVTYW1wbGVCdWZmZXI6c2FtcGxlQnVmZmVyLmdldCgpXTsKKyAgICAgICAgW3JlbmRl
cmVyIGVucXVldWVTYW1wbGVCdWZmZXI6c2FtcGxlQnVmZmVyLmdldCgpXTsKKyAgICB9Cit9CisK
K3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3Bs
YXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiBtZWRpYVNhbXBsZXMsIEFW
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKiBsYXllcikKK3sKKyAgICBbbGF5ZXIgZmx1c2hdOwor
CisgICAgZm9yIChhdXRvIGl0ID0gbWVkaWFTYW1wbGVzLmJlZ2luKCksIGVuZCA9IG1lZGlhU2Ft
cGxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxNZWRpYVNhbXBs
ZT4mIG1lZGlhU2FtcGxlID0gKml0OworCisgICAgICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3Jt
U2FtcGxlID0gbWVkaWFTYW1wbGUtPnBsYXRmb3JtU2FtcGxlKCk7CisgICAgICAgIEFTU0VSVChw
bGF0Zm9ybVNhbXBsZS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUp
OworCisgICAgICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyID0g
Y3JlYXRlTm9uRGlzcGxheWluZ0NvcHkocGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVm
ZmVyKTsKKworICAgICAgICBbbGF5ZXIgZW5xdWV1ZVNhbXBsZUJ1ZmZlcjpzYW1wbGVCdWZmZXIu
Z2V0KCldOwogICAgIH0KIAogICAgIGlmIChtX21lZGlhU291cmNlKQogICAgICAgICBtX21lZGlh
U291cmNlLT5wbGF5ZXIoKS0+c2V0SGFzQXZhaWxhYmxlVmlkZW9GcmFtZShmYWxzZSk7CiB9CiAK
LXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmVucXVldWVTYW1wbGUoUGFzc1JlZlB0
cjxNZWRpYVNhbXBsZT4gcHJwTWVkaWFTYW1wbGUsIEF0b21pY1N0cmluZyB0cmFja0lEKQordm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1l
ZGlhU2FtcGxlPiBwcnBNZWRpYVNhbXBsZSwgQXRvbWljU3RyaW5nIHRyYWNrSURTdHJpbmcpCiB7
Ci0gICAgaWYgKHRyYWNrSUQudG9JbnQoKSAhPSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQpCisgICAg
aW50IHRyYWNrSUQgPSB0cmFja0lEU3RyaW5nLnRvSW50KCk7CisgICAgaWYgKHRyYWNrSUQgIT0g
bV9lbmFibGVkVmlkZW9UcmFja0lEICYmICFtX2F1ZGlvUmVuZGVyZXJzLmNvdW50KHRyYWNrSUQp
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxl
ID0gcHJwTWVkaWFTYW1wbGU7CkBAIC01MzMsMTUgKzYxMSwyNSBAQCB2b2lkIFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDOjplbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+IHBy
cE1lZGlhUwogICAgIGlmIChwbGF0Zm9ybVNhbXBsZS50eXBlICE9IFBsYXRmb3JtU2FtcGxlOjpD
TVNhbXBsZUJ1ZmZlclR5cGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX2Rpc3BsYXlMYXll
ciBlbnF1ZXVlU2FtcGxlQnVmZmVyOnBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZl
cl07Ci0gICAgaWYgKG1fbWVkaWFTb3VyY2UpCi0gICAgICAgIG1fbWVkaWFTb3VyY2UtPnBsYXll
cigpLT5zZXRIYXNBdmFpbGFibGVWaWRlb0ZyYW1lKHRydWUpOworICAgIGlmICh0cmFja0lEID09
IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkgeworICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgZW5xdWV1
ZVNhbXBsZUJ1ZmZlcjpwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuY21TYW1wbGVCdWZmZXJdOworICAg
ICAgICBpZiAobV9tZWRpYVNvdXJjZSkKKyAgICAgICAgICAgIG1fbWVkaWFTb3VyY2UtPnBsYXll
cigpLT5zZXRIYXNBdmFpbGFibGVWaWRlb0ZyYW1lKHRydWUpOworICAgIH0gZWxzZQorICAgICAg
ICBbbV9hdWRpb1JlbmRlcmVyc1t0cmFja0lEXSBlbnF1ZXVlU2FtcGxlQnVmZmVyOnBsYXRmb3Jt
U2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcl07CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakM6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcgdHJhY2tJRCkK
K2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyhB
dG9taWNTdHJpbmcgdHJhY2tJRFN0cmluZykKIHsKLSAgICBVTlVTRURfUEFSQU0odHJhY2tJRCk7
Ci0gICAgcmV0dXJuIFttX2Rpc3BsYXlMYXllciBpc1JlYWR5Rm9yTW9yZU1lZGlhRGF0YV07Cisg
ICAgaW50IHRyYWNrSUQgPSB0cmFja0lEU3RyaW5nLnRvSW50KCk7CisgICAgaWYgKHRyYWNrSUQg
PT0gbV9lbmFibGVkVmlkZW9UcmFja0lEKQorICAgICAgICByZXR1cm4gW21fZGlzcGxheUxheWVy
IGlzUmVhZHlGb3JNb3JlTWVkaWFEYXRhXTsKKyAgICBlbHNlIGlmIChtX2F1ZGlvUmVuZGVyZXJz
LmNvdW50KHRyYWNrSUQpKQorICAgICAgICByZXR1cm4gW21fYXVkaW9SZW5kZXJlcnNbdHJhY2tJ
RF0gaXNSZWFkeUZvck1vcmVNZWRpYURhdGFdOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM6OnNldEFjdGl2ZShib29sIGlzQWN0aXZlKQpAQCAtNTYzLDYgKzY1MSwz
NiBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGlt
ZSB0aW1lKQogICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUo
dGhpcywgdGltZSk7CiB9CiAKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZEJl
Y29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoaW50IHRyYWNrSUQpCit7CisgICAgaWYgKHRyYWNrSUQg
PT0gbV9lbmFibGVkVmlkZW9UcmFja0lEKQorICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgc3RvcFJl
cXVlc3RpbmdNZWRpYURhdGFdOworICAgIGVsc2UgaWYgKG1fYXVkaW9SZW5kZXJlcnMuY291bnQo
dHJhY2tJRCkpCisgICAgICAgIFttX2F1ZGlvUmVuZGVyZXJzW3RyYWNrSURdIHN0b3BSZXF1ZXN0
aW5nTWVkaWFEYXRhXTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlRGlkQmVjb21lUmVhZHlGb3JNb3JlU2FtcGxlcyh0
aGlzLCBBdG9taWNTdHJpbmc6Om51bWJlcih0cmFja0lEKSk7Cit9CisKK3ZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakM6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKEF0
b21pY1N0cmluZyB0cmFja0lEU3RyaW5nKQoreworICAgIGludCB0cmFja0lEID0gdHJhY2tJRFN0
cmluZy50b0ludCgpOworICAgIGlmICh0cmFja0lEID09IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkg
eworICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgcmVxdWVzdE1lZGlhRGF0YVdoZW5SZWFkeU9uUXVl
dWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Jsb2NrOl57CisgICAgICAgICAgICBk
aWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSUQpOworICAgICAgICB9XTsKKyAgICB9
IGVsc2UgaWYgKG1fYXVkaW9SZW5kZXJlcnMuY291bnQodHJhY2tJRCkpIHsKKyAgICAgICAgW21f
YXVkaW9SZW5kZXJlcnNbdHJhY2tJRF0gcmVxdWVzdE1lZGlhRGF0YVdoZW5SZWFkeU9uUXVldWU6
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Jsb2NrOl57CisgICAgICAgICAgICBkaWRC
ZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSUQpOworICAgICAgICB9XTsKKyAgICB9IGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219534</attachid>
            <date>2013-12-18 07:32:38 -0800</date>
            <delta_ts>2013-12-18 09:53:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125905-20131218073237.patch</filename>
            <type>text/plain</type>
            <size>21927</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IyMDIwMTE4ZDMyMTBl
MWMwN2RhYjcwYTM5YzQwNGJjMDg1MTE5OC4uNmZmNzMzZDMzYTRlMDJlNmU3YjQyMGUyN2Q2NzNi
NmExODM5OGM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDEzLTEyLTE3ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNU0VdW01hY10gQWRkIEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1OTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT24gcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgQVZT
YW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyLCBhZGQgc3VwcG9ydAorICAgICAgICBmb3IgcGxheWJh
Y2sgb2YgYXVkaW8gQ01TYW1wbGVCdWZmZXJSZWZzIGdlbmVyYXRlZCBieSBBVlN0cmVhbURhdGFQ
YXJzZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmlzQXZhaWxhYmxlKTogUmVxdWlyZSBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNldFZvbHVtZSk6IFBhc3MgdGhyb3VnaCB0byBldmVyeSBhdWRpbyByZW5kZXJlci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6
c2V0TXV0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6IFNsYXZlIHRoZSByZW5kZXJlcidz
CisgICAgICAgICAgICB0aW1lYmFzZSB0byB0aGUgbWFzdGVyIGNsb2NrLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZW1vdmVBdWRpb1Jl
bmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9T
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OlNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDKTogRHJpdmUgYnkgZml4OyBpbml0aWFsaXplCisgICAgICAgICAgICBtX2VuYWJs
ZWRWaWRlb1RyYWNrSUQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKTogRmx1c2ggYW5kIGRlc3Ryb3kgdGhl
CisgICAgICAgICAgICBhdWRpbyByZW5kZXJlcnMuCisgICAgICAgIChXZWJDb3JlOjpjYWxsUHJv
Y2Vzc0NvZGVkRnJhbWVGb3JFYWNoU2FtcGxlKTogRHJpdmUgYnkgZml4OyBjb252ZXJ0IHRoZSBi
b29sIHJldHVybiB0byBhbiBPU0Vyci4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKTogRmx1c2ggYW5kIGRlc3Ryb3kg
dGhlIGF1ZGlvCisgICAgICAgICAgICByZW5kZXJlcnMuCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6dHJhY2tEaWRDaGFuZ2VFbmFibGVkKTogRW5hYmxlIG9y
IGRpc2FibGUgdGhlIGF1ZGlvCisgICAgICAgICAgICByZW5kZXJlciBpbiByZXNwb25zZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVl
dWVOb25EaXNwbGF5aW5nU2FtcGxlcyk6IEFkZGVkIGF1ZGlvCisgICAgICAgICAgICBzcGVjaWZp
YyB2ZXJzaW9uLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6
OmVucXVldWVTYW1wbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRCZWNvbWVSZWFkeUZvck1vcmVT
YW1wbGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6bm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMpOiBEaXR0by4KKworMjAx
My0xMi0xNyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAgICBbTVNF
XSBQZXJpb2RpY2FsbHkgbW9uaXRvciBzb3VyY2UgYnVmZmVycy4KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTg5OAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5oCmluZGV4IGM0ODRmMzlkZjM1ZjMwOWM2NDUwOTlmMTU2ODFiMzBjM2JhMzBhOWEuLjg5
ZjgyMjkyNDljMWI1MjI5MjQwNmZhMzI1ZGQwMzVlYmQxMmEzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oCkBAIC0zMSw4ICszMSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlIDx3
dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBPQkpDX0NMQVNTIEFW
QXNzZXQ7CitPQkpDX0NMQVNTIEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcjsKIE9CSkNfQ0xB
U1MgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNN
VGltZWJhc2UqIENNVGltZWJhc2VSZWY7CkBAIC01Miw2ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZERpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOwogICAgIHZv
aWQgcmVtb3ZlRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7CiAKKyAg
ICB2b2lkIGFkZEF1ZGlvUmVuZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKik7Cisg
ICAgdm9pZCByZW1vdmVBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciop
OworCiAgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgp
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSk7CkBAIC04Miw2ICs4NywxMCBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHNl
dFZvbHVtZShmbG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTXV0aW5n
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRN
dXRlZChib29sKSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NjYW5uaW5n
KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBj
b25zdCBPVkVSUklERTsKQEAgLTE1MSw2ICsxNjAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBtX21lZGlhU291cmNlUHJpdmF0ZTsKICAgICBSZXRh
aW5QdHI8QVZBc3NldD4gbV9hc3NldDsKICAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXI+IG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyOworICAgIFZlY3RvcjxSZXRhaW5Q
dHI8QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyPj4gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1DbG9ja0NNPiBtX2Nsb2NrOwogICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCmlu
ZGV4IGRhZmIwYjJiM2I3YTAzYzU5ZGQyZjdiZGQ2OThkN2E3NGY1ZTAwM2YuLjAyYmEyNDZlZjUx
MWNhODcxZGVkZDNmMDUwM2VjMjlhNzA4ZGNmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KQEAgLTQ4LDEwICs0OCwxMyBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVN
ZWRpYSkKIAogU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZBc3NldCkK
IFNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWVVJMQXNzZXQpCitTT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXIpCiBTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllcikKIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24s
IEFWU3RyZWFtRGF0YVBhcnNlcikKIFNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRp
b24sIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MpCiAKK1NPRlRfTElOSyhDb3JlTWVkaWEsIEZp
Z1JlYWRPbmx5VGltZWJhc2VTZXRUYXJnZXRUaW1lYmFzZSwgT1NTdGF0dXMsIChDTVRpbWViYXNl
UmVmIHRpbWViYXNlLCBDTVRpbWViYXNlUmVmIG5ld1RhcmdldFRpbWViYXNlKSwgKHRpbWViYXNl
LCBuZXdUYXJnZXRUaW1lYmFzZSkpCisKICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgQVZW
aWRlb1BlcmZvcm1hbmNlTWV0cmljcwogCkBAIC02Niw2ICs2OSwxOCBAQCBTT0ZUX0xJTktfQ0xB
U1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzKQogLSAo
QVZWaWRlb1BlcmZvcm1hbmNlTWV0cmljcyAqKXZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzOwogQGVu
ZAogCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZTYW1wbGVCdWZmZXJBdWRpb1Jl
bmRlcmVyCisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwOTAKK0Bp
bnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyIDogTlNPYmplY3QKKy0gKENNVGlt
ZWJhc2VSZWYpdGltZWJhc2U7CistICh2b2lkKXNldFZvbHVtZTooZmxvYXQpdm9sdW1lOworLSAo
dm9pZClzZXRNdXRlZDooQk9PTCltdXRlZDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNwcmFnbWEgbWFyayAtCkBAIC0xMDEsNyArMTE2LDcgQEAgUGFzc093blB0cjxN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6Y3IKIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OmlzQXZhaWxhYmxlKCkKIHsKLSAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpICYmIENv
cmVNZWRpYUxpYnJhcnkoKSAmJiBnZXRBVlN0cmVhbURhdGFQYXJzZXJDbGFzcygpOworICAgIHJl
dHVybiBBVkZvdW5kYXRpb25MaWJyYXJ5KCkgJiYgQ29yZU1lZGlhTGlicmFyeSgpICYmIGdldEFW
U3RyZWFtRGF0YVBhcnNlckNsYXNzKCkgJiYgZ2V0QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVy
Q2xhc3MoKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKQEAg
LTIxMSwxMSArMjI2LDIzIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwYXVzZWQoKSBjb25zdAogICAgIHJldHVybiAhbV9jbG9jay0+aXNSdW5uaW5nKCk7CiB9
CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRWb2x1bWUo
ZmxvYXQgdm9sdW1lKQoreworICAgIGZvciAoYXV0byBpdCA9IG1fc2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBbKml0IHNldFZvbHVtZTp2b2x1bWVdOworfQor
CiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNTY2Fu
bmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGZv
ciAoYXV0byBpdCA9IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0g
bV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICBbKml0IHNldE11dGVkOm11dGVkXTsKK30KKwogSW50U2l6ZSBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKICAgICAvLyBGSVhN
RSgxMjUxNTYpOiBSZXBvcnQgdGhlIGludHJpbnNpYyBzaXplIG9mIHRoZSBlbmFibGVkIHZpZGVv
IHRyYWNrLgpAQCAtNDY4LDYgKzQ5NSwyNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcAogICAg
IG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVD
aGFuZ2VkKG1fcGxheWVyKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmFkZEF1ZGlvUmVuZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKiBh
dWRpb1JlbmRlcmVyKQoreworICAgIGlmIChtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmNv
bnRhaW5zKGF1ZGlvUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1
ZmZlckF1ZGlvUmVuZGVyZXJzLmFwcGVuZChhdWRpb1JlbmRlcmVyKTsKKyAgICBGaWdSZWFkT25s
eVRpbWViYXNlU2V0VGFyZ2V0VGltZWJhc2UoW2F1ZGlvUmVuZGVyZXIgdGltZWJhc2VdLCBtX2Ns
b2NrLT50aW1lYmFzZSgpKTsKKyAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVk
aWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZW1vdmVBdWRpb1JlbmRlcmVyKEFWU2Ft
cGxlQnVmZmVyQXVkaW9SZW5kZXJlciogYXVkaW9SZW5kZXJlcikKK3sKKyAgICBzaXplX3QgcG9z
ID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5maW5kKGF1ZGlvUmVuZGVyZXIpOworICAg
IGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2FtcGxlQnVm
ZmVyQXVkaW9SZW5kZXJlcnMucmVtb3ZlKHBvcyk7CisgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVy
Q2xpZW50KCktPm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQor
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDLmgKaW5kZXggYTJkYjNiNWViNjk1N2EwMDRiYjRjYjUwN2VkNDZmMDI5
YWY5Y2VjNS4uYjA4NWRjYTU1MmNjYTQ4NTQxZGY4ODY5NTFmODI5ZTdkYzYxMjdjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5o
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9V
TkRBVElPTikKIAogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKKyNpbmNsdWRlIDxt
YXA+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CkBAIC0zOSw2ICs0MCw3IEBACiAKIE9CSkNfQ0xBU1Mg
QVZBc3NldDsKIE9CSkNfQ0xBU1MgQVZTdHJlYW1EYXRhUGFyc2VyOworT0JKQ19DTEFTUyBBVlNh
bXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXI7CiBPQkpDX0NMQVNTIEFWU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyOwogT0JKQ19DTEFTUyBOU0Vycm9yOwogT0JKQ19DTEFTUyBOU09iamVjdDsKQEAgLTk0
LDYgKzk2LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGVucXVldWVTYW1wbGUoUGFz
c1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmluZyB0cmFja0lEKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZyB0cmFja0lE
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9t
aWNTdHJpbmcgdHJhY2tJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5v
bkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQVZTYW1wbGVC
dWZmZXJBdWRpb1JlbmRlcmVyKik7CisgICAgdm9pZCBmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5
aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyKik7CisKKyAgICB2b2lkIGRpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoaW50
IHRyYWNrSUQpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZT4+IG1fdmlk
ZW9UcmFja3M7CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZT4+IG1fYXVkaW9U
cmFja3M7CkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8QVZTdHJl
YW1EYXRhUGFyc2VyPiBtX3BhcnNlcjsKICAgICBSZXRhaW5QdHI8QVZBc3NldD4gbV9hc3NldDsK
ICAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+IG1fZGlzcGxheUxheWVy
OworICAgIHN0ZDo6bWFwPGludCwgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJl
cj4+IG1fYXVkaW9SZW5kZXJlcnM7CiAgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2RlbGVnYXRl
OwogCiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQyogbV9tZWRpYVNvdXJjZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0K
aW5kZXggZWRmYWJjODdhYWVjYmYyOWZiNzU0MWI4NDNiNmFmMzA2MWM1Yzg0MS4uMWE4ODliODRk
NDQ3ZjQwMDRhOWNmMzljNjU3ZGJiZGJmOWI2MTY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTU5LDYgKzU5LDcg
QEAgU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKIFNPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWQXNzZXRUcmFjaykKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24s
IEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQogCiBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJ
T05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCkBAIC0xMDcs
OSArMTA4LDcgQEAgU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TZXRBdHRhY2htZW50LCB2b2lkLCAo
Q01BdHRhY2htZW50QmVhcmVyUmVmIHRhcmdldCwgQ0ZTdHIKIAogI3ByYWdtYSBtYXJrIC0KICNw
cmFnbWEgbWFyayBBVlN0cmVhbURhdGFQYXJzZXIKLUBjbGFzcyBBVlN0cmVhbURhdGFQYXJzZXJJ
bnRlcm5hbDsKIAotTlNfQ0xBU1NfQVZBSUxBQkxFKFRCRCwgVEJEKQogQGludGVyZmFjZSBBVlN0
cmVhbURhdGFQYXJzZXIgOiBOU09iamVjdAogLSAodm9pZClzZXREZWxlZ2F0ZTooaWQpZGVsZWdh
dGU7CiAtICh2b2lkKWFwcGVuZFN0cmVhbURhdGE6KE5TRGF0YSAqKWRhdGE7CkBAIC0xMTgsNiAr
MTE3LDIxIEBAIE5TX0NMQVNTX0FWQUlMQUJMRShUQkQsIFRCRCkKIEBlbmQKIAogI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIKKworI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA5MAorQGludGVyZmFjZSBBVlNhbXBs
ZUJ1ZmZlckF1ZGlvUmVuZGVyZXIgOiBOU09iamVjdAorLSAoTlNJbnRlZ2VyKXN0YXR1czsKKy0g
KE5TRXJyb3IqKWVycm9yOworLSAodm9pZCllbnF1ZXVlU2FtcGxlQnVmZmVyOihDTVNhbXBsZUJ1
ZmZlclJlZilzYW1wbGVCdWZmZXI7CistICh2b2lkKWZsdXNoOworLSAoQk9PTClpc1JlYWR5Rm9y
TW9yZU1lZGlhRGF0YTsKKy0gKHZvaWQpcmVxdWVzdE1lZGlhRGF0YVdoZW5SZWFkeU9uUXVldWU6
KGRpc3BhdGNoX3F1ZXVlX3QpcXVldWUgdXNpbmdCbG9jazoodm9pZCAoXikodm9pZCkpYmxvY2s7
CistICh2b2lkKXN0b3BSZXF1ZXN0aW5nTWVkaWFEYXRhOworQGVuZAorI2VuZGlmCisKKyNwcmFn
bWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIKIAog
QGludGVyZmFjZSBXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lciA6IE5TT2JqZWN0IHsKQEAg
LTI5MCw2ICszMDQsNyBAQCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMoTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQwogICAgICwgbV9tZWRpYVNv
dXJjZShwYXJlbnQpCiAgICAgLCBtX2NsaWVudCgwKQogICAgICwgbV9wYXJzaW5nU3VjY2VlZGVk
KHRydWUpCisgICAgLCBtX2VuYWJsZWRWaWRlb1RyYWNrSUQoLTEpCiB7CiB9CiAKQEAgLTMwMiw2
ICszMTcsMTYgQEAgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6On5Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQygpCiAgICAgICAgIFttX2Rpc3BsYXlMYXllciBzdG9wUmVxdWVzdGluZ01lZGlh
RGF0YV07CiAgICAgICAgIG1fZGlzcGxheUxheWVyID0gbnVsbHB0cjsKICAgICB9CisKKyAgICBm
b3IgKGF1dG8gaXQgPSBtX2F1ZGlvUmVuZGVyZXJzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9SZW5k
ZXJlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBVlNhbXBsZUJ1ZmZlckF1
ZGlvUmVuZGVyZXIqIHJlbmRlcmVyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKG1f
bWVkaWFTb3VyY2UpCisgICAgICAgICAgICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+cmVtb3Zl
QXVkaW9SZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAgIFtyZW5kZXJlciBmbHVzaF07CisgICAg
ICAgIFtyZW5kZXJlciBzdG9wUmVxdWVzdGluZ01lZGlhRGF0YV07CisgICAgfQorCisgICAgbV9h
dWRpb1JlbmRlcmVycy5jbGVhcigpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQpAQCAtMzUyLDcg
KzM3Nyw3IEBAIHN0cnVjdCBQcm9jZXNzQ29kZWRGcmFtZUluZm8gewogc3RhdGljIE9TU3RhdHVz
IGNhbGxQcm9jZXNzQ29kZWRGcmFtZUZvckVhY2hTYW1wbGUoQ01TYW1wbGVCdWZmZXJSZWYgc2Ft
cGxlQnVmZmVyLCBDTUl0ZW1Db3VudCwgdm9pZCAqcmVmY29uKQogewogICAgIFByb2Nlc3NDb2Rl
ZEZyYW1lSW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PFByb2Nlc3NDb2RlZEZyYW1lSW5mbyo+KHJl
ZmNvbik7Ci0gICAgcmV0dXJuIGluZm8tPnNvdXJjZUJ1ZmZlci0+cHJvY2Vzc0NvZGVkRnJhbWUo
aW5mby0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyLCBpbmZvLT5tZWRpYVR5cGUpOworICAgIHJldHVy
biBpbmZvLT5zb3VyY2VCdWZmZXItPnByb2Nlc3NDb2RlZEZyYW1lKGluZm8tPnRyYWNrSUQsIHNh
bXBsZUJ1ZmZlciwgaW5mby0+bWVkaWFUeXBlKSA/IG5vRXJyIDogcGFyYW1FcnI7CiB9CiAKIHZv
aWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFj
a0lEKGludCB0cmFja0lELCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIGNvbnN0IFN0
cmluZyYgbWVkaWFUeXBlLCB1bnNpZ25lZCBmbGFncykKQEAgLTQxMSw2ICs0MzYsMTYgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpCiAg
ICAgICAgIG1fZGlzcGxheUxheWVyID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICBmb3IgKGF1dG8g
aXQgPSBtX2F1ZGlvUmVuZGVyZXJzLmJlZ2luKCksIGVuZCA9IG1fYXVkaW9SZW5kZXJlcnMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVy
ZXIqIHJlbmRlcmVyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTb3Vy
Y2UpCisgICAgICAgICAgICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+cmVtb3ZlQXVkaW9SZW5k
ZXJlcihyZW5kZXJlcik7CisgICAgICAgIFtyZW5kZXJlciBmbHVzaF07CisgICAgICAgIFtyZW5k
ZXJlciBzdG9wUmVxdWVzdGluZ01lZGlhRGF0YV07CisgICAgfQorCisgICAgbV9hdWRpb1JlbmRl
cmVycy5jbGVhcigpOworCiAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCiAgICAgICAgIG1fbWVkaWFT
b3VyY2UtPnJlbW92ZVNvdXJjZUJ1ZmZlcih0aGlzKTsKIH0KQEAgLTQ2OCwxOCArNTAzLDM4IEBA
IHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZChW
aWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291CiAgICAgICAgIGlmICghbV9kaXNwbGF5TGF5ZXIpIHsK
ICAgICAgICAgICAgIG1fZGlzcGxheUxheWVyID0gW1tnZXRBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllckNsYXNzKCkgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW21fZGlzcGxheUxheWVyIHJl
cXVlc3RNZWRpYURhdGFXaGVuUmVhZHlPblF1ZXVlOmRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkg
dXNpbmdCbG9jazpeewotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgbV9jbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRCZWNvbWVSZWFkeUZvck1v
cmVTYW1wbGVzKHRoaXMsIEF0b21pY1N0cmluZzo6bnVtYmVyKHRyYWNrSUQpKTsKKyAgICAgICAg
ICAgICAgICBkaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSUQpOwogICAgICAgICAg
ICAgfV07Ci0gICAgICAgICAgICBpZiAobV9tZWRpYVNvdXJjZSkKLSAgICAgICAgICAgICAgICBt
X21lZGlhU291cmNlLT5wbGF5ZXIoKS0+YWRkRGlzcGxheUxheWVyKG1fZGlzcGxheUxheWVyLmdl
dCgpKTsKICAgICAgICAgfQorICAgICAgICBpZiAobV9tZWRpYVNvdXJjZSkKKyAgICAgICAgICAg
IG1fbWVkaWFTb3VyY2UtPnBsYXllcigpLT5hZGREaXNwbGF5TGF5ZXIobV9kaXNwbGF5TGF5ZXIu
Z2V0KCkpOwogICAgIH0KIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6dHJh
Y2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKikK
K3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZChB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogdHJhY2spCiB7Ci0gICAgLy8gTm8t
b3AuCisgICAgaW50IHRyYWNrSUQgPSB0cmFjay0+dHJhY2tJRCgpOworCisgICAgaWYgKCF0cmFj
ay0+ZW5hYmxlZCgpKSB7CisgICAgICAgIEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciogcmVu
ZGVyZXIgPSBtX2F1ZGlvUmVuZGVyZXJzW3RyYWNrSURdLmdldCgpOworICAgICAgICBbbV9wYXJz
ZXIgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YTpOTyBmb3JUcmFja0lEOnRyYWNrSURdOworICAg
ICAgICBpZiAobV9tZWRpYVNvdXJjZSkKKyAgICAgICAgICAgIG1fbWVkaWFTb3VyY2UtPnBsYXll
cigpLT5yZW1vdmVBdWRpb1JlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBbbV9wYXJzZXIgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YTpZRVMgZm9yVHJhY2tJRDp0cmFj
a0lEXTsKKyAgICAgICAgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKiByZW5kZXJlcjsKKyAg
ICAgICAgaWYgKCFtX2F1ZGlvUmVuZGVyZXJzLmNvdW50KHRyYWNrSUQpKSB7CisgICAgICAgICAg
ICByZW5kZXJlciA9IFtbZ2V0QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyQ2xhc3MoKSBhbGxv
Y10gaW5pdF07CisgICAgICAgICAgICBbcmVuZGVyZXIgcmVxdWVzdE1lZGlhRGF0YVdoZW5SZWFk
eU9uUXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Jsb2NrOl57CisgICAgICAg
ICAgICAgICAgZGlkQmVjb21lUmVhZHlGb3JNb3JlU2FtcGxlcyh0cmFja0lEKTsKKyAgICAgICAg
ICAgIH1dOworICAgICAgICAgICAgbV9hdWRpb1JlbmRlcmVyc1t0cmFja0lEXSA9IHJlbmRlcmVy
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlbmRlcmVyID0gbV9hdWRpb1JlbmRlcmVy
c1t0cmFja0lEXS5nZXQoKTsKKworICAgICAgICBpZiAobV9tZWRpYVNvdXJjZSkKKyAgICAgICAg
ICAgIG1fbWVkaWFTb3VyY2UtPnBsYXllcigpLT5hZGRBdWRpb1JlbmRlcmVyKHJlbmRlcmVyKTsK
KyAgICB9CiB9CiAKIHN0YXRpYyBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZU5v
bkRpc3BsYXlpbmdDb3B5KENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcikKQEAgLTQ5OCwx
NCArNTUzLDIwIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZU5v
bkRpc3BsYXlpbmdDb3B5KENNU2FtcGxlQnVmZmVyUmVmIHNhCiAgICAgcmV0dXJuIGFkb3B0Q0Yo
bmV3U2FtcGxlQnVmZmVyKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNh
bXBsZT4+IG1lZGlhU2FtcGxlcywgQXRvbWljU3RyaW5nIHRyYWNrSUQpCit2b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyhW
ZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4gbWVkaWFTYW1wbGVzLCBBdG9taWNTdHJpbmcgdHJh
Y2tJRFN0cmluZykKIHsKLSAgICBpZiAodHJhY2tJRC50b0ludCgpICE9IG1fZW5hYmxlZFZpZGVv
VHJhY2tJRCkKLSAgICAgICAgcmV0dXJuOworICAgIGludCB0cmFja0lEID0gdHJhY2tJRFN0cmlu
Zy50b0ludCgpOworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpm
bHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyglcCkgc2FtcGxlczogJWQgc2FtcGxl
cywgdHJhY2tJZDogJWQiLCB0aGlzLCBtZWRpYVNhbXBsZXMuc2l6ZSgpLCB0cmFja0lEKTsKIAot
ICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVl
dWVOb25EaXNwbGF5aW5nU2FtcGxlcyglcCkgc2FtcGxlczogJWQgc2FtcGxlcywgdHJhY2tJZDog
JWQiLCB0aGlzLCBtZWRpYVNhbXBsZXMuc2l6ZSgpLCB0cmFja0lELnRvSW50KCkpOworICAgIGlm
ICh0cmFja0lEID09IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkKKyAgICAgICAgZmx1c2hBbmRFbnF1
ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMobWVkaWFTYW1wbGVzLCBtX2Rpc3BsYXlMYXllci5nZXQo
KSk7CisgICAgZWxzZSBpZiAobV9hdWRpb1JlbmRlcmVycy5jb3VudCh0cmFja0lEKSkKKyAgICAg
ICAgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMobWVkaWFTYW1wbGVzLCBtX2F1
ZGlvUmVuZGVyZXJzW3RyYWNrSURdLmdldCgpKTsKK30KIAotICAgIFttX2Rpc3BsYXlMYXllciBm
bHVzaF07Cit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVldWVO
b25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4gbWVkaWFTYW1w
bGVzLCBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIFtyZW5k
ZXJlciBmbHVzaF07CiAKICAgICBmb3IgKGF1dG8gaXQgPSBtZWRpYVNhbXBsZXMuYmVnaW4oKSwg
ZW5kID0gbWVkaWFTYW1wbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVm
UHRyPE1lZGlhU2FtcGxlPiYgbWVkaWFTYW1wbGUgPSAqaXQ7CkBAIC01MTUsMTYgKzU3NiwzMyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVldWVOb25EaXNw
bGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUAogCiAgICAgICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1
ZmZlclJlZj4gc2FtcGxlQnVmZmVyID0gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkocGxhdGZvcm1T
YW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKTsKIAotICAgICAgICBbbV9kaXNwbGF5TGF5ZXIg
ZW5xdWV1ZVNhbXBsZUJ1ZmZlcjpzYW1wbGVCdWZmZXIuZ2V0KCldOworICAgICAgICBbcmVuZGVy
ZXIgZW5xdWV1ZVNhbXBsZUJ1ZmZlcjpzYW1wbGVCdWZmZXIuZ2V0KCldOworICAgIH0KK30KKwor
dm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxh
eWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+IG1lZGlhU2FtcGxlcywgQVZT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqIGxheWVyKQoreworICAgIFtsYXllciBmbHVzaF07CisK
KyAgICBmb3IgKGF1dG8gaXQgPSBtZWRpYVNhbXBsZXMuYmVnaW4oKSwgZW5kID0gbWVkaWFTYW1w
bGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhU2FtcGxl
PiYgbWVkaWFTYW1wbGUgPSAqaXQ7CisKKyAgICAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1T
YW1wbGUgPSBtZWRpYVNhbXBsZS0+cGxhdGZvcm1TYW1wbGUoKTsKKyAgICAgICAgQVNTRVJUKHBs
YXRmb3JtU2FtcGxlLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7
CisKKyAgICAgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIgPSBj
cmVhdGVOb25EaXNwbGF5aW5nQ29weShwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuY21TYW1wbGVCdWZm
ZXIpOworCisgICAgICAgIFtsYXllciBlbnF1ZXVlU2FtcGxlQnVmZmVyOnNhbXBsZUJ1ZmZlci5n
ZXQoKV07CiAgICAgfQogCiAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCiAgICAgICAgIG1fbWVkaWFT
b3VyY2UtPnBsYXllcigpLT5zZXRIYXNBdmFpbGFibGVWaWRlb0ZyYW1lKGZhbHNlKTsKIH0KIAot
dm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRy
PE1lZGlhU2FtcGxlPiBwcnBNZWRpYVNhbXBsZSwgQXRvbWljU3RyaW5nIHRyYWNrSUQpCit2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjplbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVk
aWFTYW1wbGU+IHBycE1lZGlhU2FtcGxlLCBBdG9taWNTdHJpbmcgdHJhY2tJRFN0cmluZykKIHsK
LSAgICBpZiAodHJhY2tJRC50b0ludCgpICE9IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkKKyAgICBp
bnQgdHJhY2tJRCA9IHRyYWNrSURTdHJpbmcudG9JbnQoKTsKKyAgICBpZiAodHJhY2tJRCAhPSBt
X2VuYWJsZWRWaWRlb1RyYWNrSUQgJiYgIW1fYXVkaW9SZW5kZXJlcnMuY291bnQodHJhY2tJRCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gbWVkaWFTYW1wbGUg
PSBwcnBNZWRpYVNhbXBsZTsKQEAgLTUzMywxNSArNjExLDI1IEBAIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM6OmVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gcHJw
TWVkaWFTCiAgICAgaWYgKHBsYXRmb3JtU2FtcGxlLnR5cGUgIT0gUGxhdGZvcm1TYW1wbGU6OkNN
U2FtcGxlQnVmZmVyVHlwZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fZGlzcGxheUxheWVy
IGVucXVldWVTYW1wbGVCdWZmZXI6cGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVy
XTsKLSAgICBpZiAobV9tZWRpYVNvdXJjZSkKLSAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVy
KCktPnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUodHJ1ZSk7CisgICAgaWYgKHRyYWNrSUQgPT0g
bV9lbmFibGVkVmlkZW9UcmFja0lEKSB7CisgICAgICAgIFttX2Rpc3BsYXlMYXllciBlbnF1ZXVl
U2FtcGxlQnVmZmVyOnBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcl07CisgICAg
ICAgIGlmIChtX21lZGlhU291cmNlKQorICAgICAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVy
KCktPnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUodHJ1ZSk7CisgICAgfSBlbHNlCisgICAgICAg
IFttX2F1ZGlvUmVuZGVyZXJzW3RyYWNrSURdIGVucXVldWVTYW1wbGVCdWZmZXI6cGxhdGZvcm1T
YW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVyXTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZyB0cmFja0lEKQor
Ym9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0
b21pY1N0cmluZyB0cmFja0lEU3RyaW5nKQogewotICAgIFVOVVNFRF9QQVJBTSh0cmFja0lEKTsK
LSAgICByZXR1cm4gW21fZGlzcGxheUxheWVyIGlzUmVhZHlGb3JNb3JlTWVkaWFEYXRhXTsKKyAg
ICBpbnQgdHJhY2tJRCA9IHRyYWNrSURTdHJpbmcudG9JbnQoKTsKKyAgICBpZiAodHJhY2tJRCA9
PSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQpCisgICAgICAgIHJldHVybiBbbV9kaXNwbGF5TGF5ZXIg
aXNSZWFkeUZvck1vcmVNZWRpYURhdGFdOworICAgIGVsc2UgaWYgKG1fYXVkaW9SZW5kZXJlcnMu
Y291bnQodHJhY2tJRCkpCisgICAgICAgIHJldHVybiBbbV9hdWRpb1JlbmRlcmVyc1t0cmFja0lE
XSBpc1JlYWR5Rm9yTW9yZU1lZGlhRGF0YV07CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQzo6c2V0QWN0aXZlKGJvb2wgaXNBY3RpdmUpCkBAIC01NjMsNiArNjUxLDM2
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUoTWVkaWFUaW1l
IHRpbWUpCiAgICAgICAgIG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZSh0
aGlzLCB0aW1lKTsKIH0KIAordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkQmVj
b21lUmVhZHlGb3JNb3JlU2FtcGxlcyhpbnQgdHJhY2tJRCkKK3sKKyAgICBpZiAodHJhY2tJRCA9
PSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQpCisgICAgICAgIFttX2Rpc3BsYXlMYXllciBzdG9wUmVx
dWVzdGluZ01lZGlhRGF0YV07CisgICAgZWxzZSBpZiAobV9hdWRpb1JlbmRlcmVycy5jb3VudCh0
cmFja0lEKSkKKyAgICAgICAgW21fYXVkaW9SZW5kZXJlcnNbdHJhY2tJRF0gc3RvcFJlcXVlc3Rp
bmdNZWRpYURhdGFdOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKHRo
aXMsIEF0b21pY1N0cmluZzo6bnVtYmVyKHRyYWNrSUQpKTsKK30KKwordm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQzo6bm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoQXRv
bWljU3RyaW5nIHRyYWNrSURTdHJpbmcpCit7CisgICAgaW50IHRyYWNrSUQgPSB0cmFja0lEU3Ry
aW5nLnRvSW50KCk7CisgICAgaWYgKHRyYWNrSUQgPT0gbV9lbmFibGVkVmlkZW9UcmFja0lEKSB7
CisgICAgICAgIFttX2Rpc3BsYXlMYXllciByZXF1ZXN0TWVkaWFEYXRhV2hlblJlYWR5T25RdWV1
ZTpkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6XnsKKyAgICAgICAgICAgIGRp
ZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXModHJhY2tJRCk7CisgICAgICAgIH1dOworICAgIH0g
ZWxzZSBpZiAobV9hdWRpb1JlbmRlcmVycy5jb3VudCh0cmFja0lEKSkgeworICAgICAgICBbbV9h
dWRpb1JlbmRlcmVyc1t0cmFja0lEXSByZXF1ZXN0TWVkaWFEYXRhV2hlblJlYWR5T25RdWV1ZTpk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6XnsKKyAgICAgICAgICAgIGRpZEJl
Y29tZVJlYWR5Rm9yTW9yZVNhbXBsZXModHJhY2tJRCk7CisgICAgICAgIH1dOworICAgIH0gZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElPTikK
</data>
<flag name="review"
          id="243178"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>