<?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>135346</bug_id>
          
          <creation_ts>2014-07-28 12:56:44 -0700</creation_ts>
          <short_desc>Make WKOriginDataManager actually operate on IndexedDatabases</short_desc>
          <delta_ts>2014-07-29 13:15:57 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>135029</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jeffrey+webkit</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1025188</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 12:56:44 -0700</bug_when>
    <thetext>Make WKOriginDataManager correctly operate on IndexedDatabases

This patch will get the list of origins with databases by checking for their entries in the directory structure on disk.
It will also delete the database files (and any resulting empty directories) when requested.

&lt;rdar://problem/15917314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025190</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 12:59:55 -0700</bug_when>
    <thetext>In this patch, open handles to the database files on disk will not be notified and invalidated.

This is probably quite an acceptable situation for now. because:
    - For read-only operations, they will continue functioning as normal on the unlinked file.
    - For write operations, they will start producing errors as SQLite notices the missing backing store.

But it should still be fixed, and I filed https://bugs.webkit.org/show_bug.cgi?id=135347 to track that in a followup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025200</commentid>
    <comment_count>2</comment_count>
      <attachid>235611</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 13:17:08 -0700</bug_when>
    <thetext>Created attachment 235611
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025275</commentid>
    <comment_count>3</comment_count>
      <attachid>235611</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-07-28 16:03:06 -0700</bug_when>
    <thetext>Comment on attachment 235611
Patch v1

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

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:60
&gt; +    // FIXME (&lt;rdar://problem/9127819&gt;): Is there a more explicit way of doing this besides accessing the UTF8Encoding?

This should probably be a bugzilla bug.

&gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:116
&gt; +    if (!callback) {
&gt; +        LOG_ERROR(&quot;WebOriginDataManagerProxy::didGetOrigins - Invalid callback ID&quot;);
&gt; +        return;
&gt; +    }
&gt; +

When can this happen?  Should this be a MESSAGE_CHECK()?

&gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:131
&gt; +    if (!(types &amp; kWKIndexedDatabaseData)) {
&gt; +        callbackFunction(CallbackBase::Error::None);
&gt;          return;
&gt; +    }

This should probably have the same comment as above (or just move the one from below).

&gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:160
&gt; +    if (!(types &amp; kWKIndexedDatabaseData)) {
&gt; +        callbackFunction(CallbackBase::Error::None);
&gt;          return;
&gt; +    }

This should probably have the same comment as above (or just move the one from below).

&gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:190
&gt; +    if (!(types &amp; kWKIndexedDatabaseData)) {
&gt; +        callbackFunction(CallbackBase::Error::None);
&gt;          return;
&gt; +    }

This should probably have the same comment as above (or just move the one from below).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025279</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 16:07:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 235611 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235611&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:60
&gt; &gt; +    // FIXME (&lt;rdar://problem/9127819&gt;): Is there a more explicit way of doing this besides accessing the UTF8Encoding?
&gt; 
&gt; This should probably be a bugzilla bug.

Yah, probably!

&gt; &gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:116
&gt; &gt; +    if (!callback) {
&gt; &gt; +        LOG_ERROR(&quot;WebOriginDataManagerProxy::didGetOrigins - Invalid callback ID&quot;);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; When can this happen?  Should this be a MESSAGE_CHECK()?

Shouldn&apos;t happen.  Should probably be a MESSAGE_CHECK.

&gt; This should probably have the same comment as above (or just move the one from below).
...
&gt; This should probably have the same comment as above (or just move the one from below).
...
&gt; This should probably have the same comment as above (or just move the one from below).

Willdo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025287</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 16:12:37 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=135365 for that radar.  Will update the comment in the patch (as well as the comment in LocalStorageDatabaseTracker.cpp) before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025298</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 16:26:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:116
&gt; &gt; &gt; +    if (!callback) {
&gt; &gt; &gt; +        LOG_ERROR(&quot;WebOriginDataManagerProxy::didGetOrigins - Invalid callback ID&quot;);
&gt; &gt; &gt; +        return;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; When can this happen?  Should this be a MESSAGE_CHECK()?
&gt; 
&gt; Shouldn&apos;t happen.  Should probably be a MESSAGE_CHECK.

MESSAGE_CHECK requires you know what Connection the current dispatched message came from.

Right now, that can only be the DatabaseProcess, so I can do it.

In the future, WebOriginDataManagerProxy will *not* know what Connection this message is coming from, so we&apos;ll have to deal with that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025307</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 16:40:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:116
&gt; &gt; &gt; &gt; +    if (!callback) {
&gt; &gt; &gt; &gt; +        LOG_ERROR(&quot;WebOriginDataManagerProxy::didGetOrigins - Invalid callback ID&quot;);
&gt; &gt; &gt; &gt; +        return;
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; When can this happen?  Should this be a MESSAGE_CHECK()?
&gt; &gt; 
&gt; &gt; Shouldn&apos;t happen.  Should probably be a MESSAGE_CHECK.
&gt; 
&gt; MESSAGE_CHECK requires you know what Connection the current dispatched message came from.
&gt; 
&gt; Right now, that can only be the DatabaseProcess, so I can do it.
&gt; 
&gt; In the future, WebOriginDataManagerProxy will *not* know what Connection this message is coming from, so we&apos;ll have to deal with that later.

Actually with the magic of WantsConnection, we can do this.

New patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025337</commentid>
    <comment_count>8</comment_count>
      <attachid>235647</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 17:12:49 -0700</bug_when>
    <thetext>Created attachment 235647
Patch v2 - Also added a new API we&apos;ll need very soon anyways</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025386</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-28 21:57:47 -0700</bug_when>
    <thetext>Sorry about the &quot;Also added a new API we&apos;ll need very soon anyways&quot; - That got in there from autocomplete history.

This V2 is basically V1 with review feedback addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025498</commentid>
    <comment_count>10</comment_count>
      <attachid>235647</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-07-29 09:42:37 -0700</bug_when>
    <thetext>Comment on attachment 235647
Patch v2 - Also added a new API we&apos;ll need very soon anyways

r=me on the parts of the patch that touch the filesystem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025510</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-29 10:29:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 235647 [details])
&gt; r=me on the parts of the patch that touch the filesystem.
me, too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025511</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-29 10:38:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/171749</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025550</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-07-29 13:15:57 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; http://trac.webkit.org/changeset/171749

and the buildfix landed in http://trac.webkit.org/changeset/171753</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235611</attachid>
            <date>2014-07-28 13:17:08 -0700</date>
            <delta_ts>2014-07-28 17:12:49 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21870</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OTUxMTUwLi4yY2VhY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTQtMDctMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgV0tPcmlnaW5EYXRhTWFuYWdlciBhY3R1YWxseSBvcGVyYXRlIG9uIEluZGV4ZWRE
YXRhYmFzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzUzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDE0LTA3LTI4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIExldCBXaGVlbEV2ZW50IHdyYXAgYSBQbGF0Zm9y
bVdoZWVsRXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMzM4NTMwNS4uYzdjNDdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KQEAgLTEwNjYsNiArMTA2Niw4IEBAIF9fWk43V2ViQ29yZTM2c3Rh
bmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lRVJLTjNXVEY2U3RyaW5nRVMzXwogX19a
TjdXZWJDb3JlMzdXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlMTFtb3ZlV2lk
Z2V0c0V2CiBfX1pON1dlYkNvcmUzN1dpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2Nv
cGUzNXNfd2lkZ2V0SGllcmFyY2h5VXBkYXRlU3VzcGVuZENvdW50RQogX19aTjdXZWJDb3JlM1VS
TDEwaW52YWxpZGF0ZUV2CitfX1pON1dlYkNvcmUzVVJMMTFzZXRQcm90b2NvbEVSS04zV1RGNlN0
cmluZ0UKK19fWk43V2ViQ29yZTNVUkw3c2V0UGF0aEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTNVUkxDMUVOU18xOFBhcnNlZFVSTFN0cmluZ1RhZ0VSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTNVUkxDMUVQNU5TVVJMCiBfX1pON1dlYkNvcmUzVVJMQzFFUEs3X19DRlVSTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGMyN2E3ZTguLmU2MTFiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAor
MjAxNC0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBXS09yaWdpbkRhdGFNYW5hZ2VyIGFjdHVhbGx5IG9wZXJhdGUgb24gSW5kZXhlZERhdGFi
YXNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRh
dGFiYXNlUHJvY2Vzczo6RGF0YWJhc2VQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJh
c2VQcm9jZXNzOjpnZXRJbmRleGVkRGF0YWJhc2VPcmlnaW5zKTogCisgICAgICAgIChXZWJLaXQ6
OkRhdGFiYXNlUHJvY2Vzczo6ZG9HZXRJbmRleGVkRGF0YWJhc2VPcmlnaW5zKToKKyAgICAgICAg
KFdlYktpdDo6cmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aCk6IFV0aWxpdHkgdG8gZGVs
ZXRlIGFsbCBkYXRhYmFzZSBmaWxlcyBmb3IgdGhlIGdpdmVuIG9yaWdpbiBwYXRoCisgICAgICAg
ICAgICB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4KKyAg
ICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpkZWxldGVJbmRleGVkRGF0YWJhc2VFbnRy
aWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpkb0RlbGV0
ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpEYXRh
YmFzZVByb2Nlc3M6OmRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZEJldHdlZW5E
YXRlcyk6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZG9EZWxldGVJbmRleGVk
RGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpE
YXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZUVudHJpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmRvRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlRW50
cmllcyk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oOgorCisg
ICAgICAgICogU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT46OmNvcHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9z
c1RocmVhZENvcGllci5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5h
Z2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5
OjpnZXRPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94
eTo6ZGlkR2V0T3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUVudHJpZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVBbGxFbnRy
aWVzKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvT3JpZ2luRGF0YS9XZWJPcmlnaW5EYXRhTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpnZXRPcmln
aW5zKTogUGlwZSBJREIgcmVxdWVzdHMgdGhyb3VnaCB0byB0aGUgRGF0YWJhc2VQcm9jZXNzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zvck9y
aWdpbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVs
ZXRlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpkZWxldGVBbGxFbnRyaWVzKTogRGl0dG8uCisKIDIwMTQt
MDctMjcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
W0dUS10gS2VlcCBub24tREFUQUJBU0VfUFJPQ0VTUyBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCBiZmYzNzgwLi4x
YmNiNDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJh
c2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJh
c2VQcm9jZXNzLmNwcApAQCAtMzQsOSArMzQsMTIgQEAKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nl
c3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0
aW9uLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJXZWJDcm9z
c1RocmVhZENvcGllci5oIgogI2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYk9yaWdp
bkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01Myw2ICs1Niw5IEBA
IERhdGFiYXNlUHJvY2Vzczo6RGF0YWJhc2VQcm9jZXNzKCkKICAgICA6IG1fcXVldWUoYWRvcHRS
ZWYoKldvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkRhdGFiYXNlUHJvY2VzcyIp
LmxlYWtSZWYoKSkpCiAgICAgLCBtX3dlYk9yaWdpbkRhdGFNYW5hZ2VyKHN0ZDo6bWFrZV91bmlx
dWU8V2ViT3JpZ2luRGF0YU1hbmFnZXI+KHRoaXMpKQogeworICAgIC8vIE1ha2Ugc3VyZSB0aGUg
VVRGOEVuY29kaW5nIGVuY29kaW5nIGFuZCB0aGUgdGV4dCBlbmNvZGluZyBtYXBzIGhhdmUgYmVl
biBidWlsdCBvbiB0aGUgbWFpbiB0aHJlYWQsIGFzIGEgYmFja2dyb3VuZCB0aHJlYWQgbWlnaHQg
dHJ5IHRvIGRvIGl0IHRoZXJlIGluc3RlYWQuCisgICAgLy8gRklYTUUgKDxyZGFyOi8vcHJvYmxl
bS85MTI3ODE5Pik6IElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCB3YXkgb2YgZG9pbmcgdGhpcyBi
ZXNpZGVzIGFjY2Vzc2luZyB0aGUgVVRGOEVuY29kaW5nPworICAgIFVURjhFbmNvZGluZygpOwog
fQogCiBEYXRhYmFzZVByb2Nlc3M6On5EYXRhYmFzZVByb2Nlc3MoKQpAQCAtMTg1LDYgKzE5MSwx
MjYgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbigpCiAjZW5kaWYKIH0KIAordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmdldEluZGV4ZWRE
YXRhYmFzZU9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJkRhdGFiYXNlUHJvY2Vzczo6ZG9HZXRJbmRleGVk
RGF0YWJhc2VPcmlnaW5zLCBjYWxsYmFja0lEKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNz
Ojpkb0dldEluZGV4ZWREYXRhYmFzZU9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAg
ICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiByZXN1bHRzOworCisgICAgaWYgKG1faW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWRHZXRPcmlnaW5zKHJlc3VsdHMsIGNhbGxiYWNr
SUQpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJpbmc+IG9y
aWdpblBhdGhzID0gbGlzdERpcmVjdG9yeShtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgIioi
KTsKKyAgICBmb3IgKGF1dG8mIG9yaWdpblBhdGggOiBvcmlnaW5QYXRocykgeworICAgICAgICBV
UkwgdXJsOworICAgICAgICB1cmwuc2V0UHJvdG9jb2woQVNDSUlMaXRlcmFsKCJmaWxlIikpOwor
ICAgICAgICB1cmwuc2V0UGF0aChvcmlnaW5QYXRoKTsKKworICAgICAgICBTdHJpbmcgZGF0YWJh
c2VJZGVudGlmaWVyID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisKKyAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjptYXliZUNy
ZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICAgICAg
aWYgKCFzZWN1cml0eU9yaWdpbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJl
c3VsdHMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKHNlY3Vy
aXR5T3JpZ2luLmdldCgpKSk7CisgICAgfQorCisgICAgc2VuZChNZXNzYWdlczo6V2ViT3JpZ2lu
RGF0YU1hbmFnZXJQcm94eTo6RGlkR2V0T3JpZ2lucyhyZXN1bHRzLCBjYWxsYmFja0lEKSwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBhdGgoY29uc3Qg
U3RyaW5nJiBvcmlnaW5QYXRoLCBkb3VibGUgc3RhcnREYXRlLCBkb3VibGUgZW5kRGF0ZSkKK3sK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gY2xvc2UvaW52YWxpZGF0ZSBhbnkgbGl2ZSBo
YW5kbGVzIHRvIHRoZSBkYXRhYmFzZSBmaWxlcyB3ZSBhcmUgYWJvdXQgdG8gZGVsZXRlLgorICAg
IC8vIFJpZ2h0IG5vdzoKKyAgICAvLyAgICAgLSBGb3IgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIHRo
ZXkgd2lsbCBjb250aW51ZSBmdW5jdGlvbmluZyBhcyBub3JtYWwgb24gdGhlIHVubGlua2VkIGZp
bGUuCisgICAgLy8gICAgIC0gRm9yIHdyaXRlIG9wZXJhdGlvbnMsIHRoZXkgd2lsbCBzdGFydCBw
cm9kdWNpbmcgZXJyb3JzIGFzIFNRTGl0ZSBub3RpY2VzIHRoZSBtaXNzaW5nIGJhY2tpbmcgc3Rv
cmUuCisgICAgLy8gVGhpcyBpcyB0cmFja2VkIGJ5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUzNDcKKworICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNlUGF0aHMg
PSBsaXN0RGlyZWN0b3J5KG9yaWdpblBhdGgsICIqIik7CisKKyAgICBmb3IgKGF1dG8mIGRhdGFi
YXNlUGF0aCA6IGRhdGFiYXNlUGF0aHMpIHsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZSA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZVBhdGgsICJJbmRleGVkREIuc3FsaXRl
MyIpOworCisgICAgICAgIGlmICghZmlsZUV4aXN0cyhkYXRhYmFzZUZpbGUpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgdGltZV90IG1vZFRpbWU7CisgICAgICAgIGdldEZpbGVN
b2RpZmljYXRpb25UaW1lKGRhdGFiYXNlRmlsZSwgbW9kVGltZSk7CisKKyAgICAgICAgaWYgKG1v
ZFRpbWUgPCBzdGFydERhdGUgfHwgbW9kVGltZSA+IGVuZERhdGUpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBkZWxldGVGaWxlKGRhdGFiYXNlRmlsZSk7CisgICAgICAgIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KGRhdGFiYXNlUGF0aCk7CisgICAgfQorCisgICAgZGVsZXRlRW1wdHlE
aXJlY3Rvcnkob3JpZ2luUGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkZWxldGVJ
bmRleGVkRGF0YWJhc2VFbnRyaWVzRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQXN5bmNUYXNrKCp0aGlzLCAmRGF0YWJhc2VQcm9jZXNzOjpkb0RlbGV0ZUluZGV4ZWREYXRh
YmFzZUVudHJpZXNGb3JPcmlnaW4sIG9yaWdpbiwgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIERh
dGFiYXNlUHJvY2Vzczo6ZG9EZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzRm9yT3JpZ2luKGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luRGF0YSwgdWludDY0X3QgY2FsbGJhY2tJRCkK
K3sKKyAgICBpZiAobV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRpZERlbGV0ZUVu
dHJpZXMoY2FsbGJhY2tJRCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBvcmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2luKCk7
CisgICAgU3RyaW5nIGRhdGFiYXNlSWRlbnRpZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCk7CisgICAgU3RyaW5nIG9yaWdpblBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIGRhdGFiYXNlSWRlbnRpZmllcik7CisKKyAgICBy
ZW1vdmVBbGxEYXRhYmFzZXNGb3JPcmlnaW5QYXRoKG9yaWdpblBhdGgsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bG93ZXN0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4
KCkpOworCisgICAgc2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6RGlk
RGVsZXRlRW50cmllcyhjYWxsYmFja0lEKSwgMCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNz
OjpkZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMoZG91Ymxl
IHN0YXJ0RGF0ZSwgZG91YmxlIGVuZERhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZEYXRhYmFzZVByb2Nlc3M6
OmRvRGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzLCBzdGFy
dERhdGUsIGVuZERhdGUsIGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6
OmRvRGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKGRvdWJs
ZSBzdGFydERhdGUsIGRvdWJsZSBlbmREYXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAg
IGlmIChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6RGlkRGVsZXRlRW50cmllcyhj
YWxsYmFja0lEKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3Ry
aW5nPiBvcmlnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkobV9pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnksICIqIik7CisgICAgZm9yIChhdXRvJiBvcmlnaW5QYXRoIDogb3JpZ2luUGF0aHMpCisgICAg
ICAgIHJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBhdGgob3JpZ2luUGF0aCwgc3RhcnREYXRl
LCBlbmREYXRlKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJv
eHk6OkRpZERlbGV0ZUVudHJpZXMoY2FsbGJhY2tJRCksIDApOworfQorCit2b2lkIERhdGFiYXNl
UHJvY2Vzczo6ZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlRW50cmllcyh1aW50NjRfdCBjYWxsYmFj
a0lEKQoreworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmRGF0
YWJhc2VQcm9jZXNzOjpkb0RlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZUVudHJpZXMsIGNhbGxiYWNr
SUQpKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmRvRGVsZXRlQWxsSW5kZXhlZERhdGFi
YXNlRW50cmllcyh1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIGlmIChtX2luZGV4ZWREYXRh
YmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViT3Jp
Z2luRGF0YU1hbmFnZXJQcm94eTo6RGlkRGVsZXRlQWxsRW50cmllcyhjYWxsYmFja0lEKSwgMCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U3RyaW5nPiBvcmlnaW5QYXRo
cyA9IGxpc3REaXJlY3RvcnkobV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksICIqIik7CisgICAg
Zm9yIChhdXRvJiBvcmlnaW5QYXRoIDogb3JpZ2luUGF0aHMpCisgICAgICAgIHJlbW92ZUFsbERh
dGFiYXNlc0Zvck9yaWdpblBhdGgob3JpZ2luUGF0aCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWREZWxldGVBbGxF
bnRyaWVzKGNhbGxiYWNrSUQpLCAwKTsKK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQg
RGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCmluZGV4IGIxNGMxYTkuLjNkZDM2NGNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCkBAIC02
MCw2ICs2MCwxMSBAQCBwdWJsaWM6CiAKICAgICBXb3JrUXVldWUmIHF1ZXVlKCkgeyByZXR1cm4g
bV9xdWV1ZS5nZXQoKTsgfQogCisgICAgdm9pZCBnZXRJbmRleGVkRGF0YWJhc2VPcmlnaW5zKHVp
bnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmll
c0Zvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmLCB1aW50NjRfdCBjYWxsYmFja0lE
KTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZEJldHdlZW5E
YXRlcyhkb3VibGUgc3RhcnREYXRlLCBkb3VibGUgZW5kRGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCk7CisgICAgdm9pZCBkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VFbnRyaWVzKHVpbnQ2NF90IGNh
bGxiYWNrSUQpOworCiBwcml2YXRlOgogICAgIERhdGFiYXNlUHJvY2VzcygpOwogCkBAIC04NSw2
ICs5MCwxMCBAQCBwcml2YXRlOgogICAgIC8vIEZvciBleGVjdXRpb24gb24gd29yayBxdWV1ZSB0
aHJlYWQgb25seQogICAgIHZvaWQgcGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKICAgICB2b2lk
IGVuc3VyZVBhdGhFeGlzdHMoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkb0dldEluZGV4ZWRE
YXRhYmFzZU9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBkb0RlbGV0ZUlu
ZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwg
dWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBkb0RlbGV0ZUluZGV4ZWREYXRhYmFzZUVu
dHJpZXNNb2RpZmllZEJldHdlZW5EYXRlcyhkb3VibGUgc3RhcnREYXRlLCBkb3VibGUgZW5kRGF0
ZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBkb0RlbGV0ZUFsbEluZGV4ZWREYXRh
YmFzZUVudHJpZXModWludDY0X3QgY2FsbGJhY2tJRCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPERh
dGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4+IG1fZGF0YWJhc2VUb1dlYlByb2Nlc3NDb25u
ZWN0aW9uczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhy
ZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGll
ci5jcHAKaW5kZXggM2Q4MDQ0Yi4uZmUwMzEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJJREJJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JREJLZXlEYXRhLmg+CiAKQEAgLTc5LDYgKzgw
LDExIEBAIFZlY3RvcjxWZWN0b3I8SURCS2V5RGF0YT4+IENyb3NzVGhyZWFkQ29waWVyQmFzZTxm
YWxzZSwgZmFsc2UsIFZlY3RvcjxWZWN0b3I8SURCCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
U2VjdXJpdHlPcmlnaW5EYXRhIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFNl
Y3VyaXR5T3JpZ2luRGF0YT46OmNvcHkoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0
eU9yaWdpbkRhdGEpCit7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENv
cHkoKTsKK30KKwogQVNDSUlMaXRlcmFsIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFs
c2UsIEFTQ0lJTGl0ZXJhbD46OmNvcHkoY29uc3QgQVNDSUlMaXRlcmFsJiBsaXRlcmFsKQogewog
ICAgIHJldHVybiBsaXRlcmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNyb3NzVGhyZWFkQ29waWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJl
YWRDb3BpZXIuaAppbmRleCA5YTJhYjMwLi4xOWVmNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMzYsNiArMzYsOCBAQCBjbGFzcyBJREJJ
ZGVudGlmaWVyOwogY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOwogCiBlbnVtIGNs
YXNzIFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOworCitzdHJ1Y3QgU2VjdXJpdHlPcmln
aW5EYXRhOwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTYwLDYgKzYyLDEwIEBAIHRlbXBsYXRl
PD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VTCiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0OjpTZWN1cml0eU9yaWdpbkRhdGE+IHsK
KyAgICBzdGF0aWMgV2ViS2l0OjpTZWN1cml0eU9yaWdpbkRhdGEgY29weShjb25zdCBXZWJLaXQ6
OlNlY3VyaXR5T3JpZ2luRGF0YSYgdHlwZSk7Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9z
c1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBWZWN0b3I8Y2hhcj4+IHsKICAgICBzdGF0
aWMgVmVjdG9yPGNoYXI+IGNvcHkoY29uc3QgVmVjdG9yPGNoYXI+Jik7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3Bw
CmluZGV4IDRkMDM2Y2EuLjJjYzhiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5jcHAKQEAgLTMxLDYgKzMxLDEwIEBA
CiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTgyLDYgKzg2LDEzIEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCiAKIHZvaWQgV2ViT3JpZ2lu
RGF0YU1hbmFnZXJQcm94eTo6Z2V0T3JpZ2lucyhXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgc3Rk
OjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7CisgICAgLy8gRklYTUU6IE9uY2Ugd2UgaGFuZGxlIG1vcmUgZGF0YSB0
eXBlcyBiZXNpZGVzIEluZGV4ZWREYXRhYmFzZSB3ZSdsbCBoYXZlIHRvIHNlbmQgdGhlIHJlcXVl
c3RzIHRvIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzZXMuCisgICAgLy8gV2UnbGwgYWxzbyBoYXZl
IHRoZSBhZ2dyZWdhdGUgdGhlIHJlc3VsdHMgaGVyZS4KKyAgICBpZiAoISh0eXBlcyAmIGtXS0lu
ZGV4ZWREYXRhYmFzZURhdGEpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24obnVsbHB0ciwg
Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBBcnJheUNhbGxiYWNrOjpjcmVhdGUo
V1RGOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIAogICAgIGlmICghY29udGV4dCgpKSB7CkBA
IC05MiwyMCArMTAzLDMyIEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6Z2V0T3Jp
Z2lucyhXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgc3RkOjpmdW5jdGlvCiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9hcnJheUNhbGxiYWNr
cy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIAotICAgIC8vIEZJWE1FIChN
dWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9ibGVtLzEyMjM5NzY1PiBNYWtlIG1hbmlwdWxh
dGluZyBjYWNoZSBpbmZvcm1hdGlvbiB3b3JrIHdpdGggcGVyLXRhYiBXZWJQcm9jZXNzLgotICAg
IGNvbnRleHQoKS0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVtSWZOZWNlc3Nhcnko
TWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpHZXRPcmlnaW5zKHR5cGVzLCBjYWxsYmFj
a0lEKSk7CisgICAgY29udGV4dCgpLT5zZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6R2V0T3JpZ2lucyh0eXBl
cywgY2FsbGJhY2tJRCkpOwogfQogCi12b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRp
ZEdldE9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFz
LCB1aW50NjRfdCBjYWxsYmFja0lEKQordm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5Ojpk
aWRHZXRPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5JZGVu
dGlmaWVycywgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBSZWZQdHI8QXJyYXlDYWxsYmFj
az4gY2FsbGJhY2sgPSBtX2FycmF5Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7Ci0gICAgcGVy
Zm9ybUFQSUNhbGxiYWNrV2l0aFNlY3VyaXR5T3JpZ2luRGF0YVZlY3RvcihvcmlnaW5EYXRhcywg
Y2FsbGJhY2suZ2V0KCkpOworICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkaWRHZXRPcmlnaW5zIC0gSW52YWxpZCBjYWxs
YmFjayBJRCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IHNlY3VyaXR5T3JpZ2luczsKKyAgICBzZWN1cml0eU9yaWdpbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5JZGVudGlmaWVycy5zaXplKCkpOworCisgICAgZm9yIChj
b25zdCBhdXRvJiBvcmlnaW5JZGVudGlmaWVyIDogb3JpZ2luSWRlbnRpZmllcnMpCisgICAgICAg
IHNlY3VyaXR5T3JpZ2lucy51bmNoZWNrZWRBcHBlbmQoV2ViU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShvcmlnaW5JZGVudGlmaWVyLnNlY3VyaXR5T3JpZ2luKCkpKTsKKworICAgIGNhbGxiYWNrLT5w
ZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoQVBJOjpBcnJheTo6Y3JlYXRlKFdURjo6bW92
ZShzZWN1cml0eU9yaWdpbnMpKS5nZXQoKSk7CiB9CiAKIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eTo6ZGVsZXRlRW50cmllc0Zvck9yaWdpbihXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywg
V2ViU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jh
c2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBpZiAoISh0eXBlcyAmIGtXS0lu
ZGV4ZWREYXRhYmFzZURhdGEpKQorICAgIGlmICghKHR5cGVzICYga1dLSW5kZXhlZERhdGFiYXNl
RGF0YSkpIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpO
b25lKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIEZJWE1FOiBSaWdodCBub3cg
d2Ugb25seSBzdXBwb3J0IEluZGV4ZWREYXRhYmFzZSBkYXRhIHNvIHdlIGtub3cgdGhhdCB3ZSdy
ZSBvbmx5IHNlbmRpbmcgdGhpcyByZXF1ZXN0IHRvIHRoZSBEYXRhYmFzZVByb2Nlc3MuCiAgICAg
Ly8gVGhhdCdzIHdoeSBoYXZpbmcgb25lIHNpbmdsZSBjYWxsYmFjayB3b3Jrcy4KQEAgLTEzMSw4
ICsxNTQsMTAgQEAgdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbnRyaWVz
Rm9yT3JpZ2luKFdLT3JpZ2luRGF0YVR5cGVzIHR5cGVzLAogCiB2b2lkIFdlYk9yaWdpbkRhdGFN
YW5hZ2VyUHJveHk6OmRlbGV0ZUVudHJpZXNNb2RpZmllZEJldHdlZW5EYXRlcyhXS09yaWdpbkRh
dGFUeXBlcyB0eXBlcywgZG91YmxlIHN0YXJ0RGF0ZSwgZG91YmxlIGVuZERhdGUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgaWYgKCEodHlwZXMgJiBrV0tJbmRleGVkRGF0YWJhc2VEYXRhKSkKKyAgICBpZiAoISh0eXBl
cyAmIGtXS0luZGV4ZWREYXRhYmFzZURhdGEpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICAvLyBGSVhNRTogUmlnaHQgbm93IHdlIG9ubHkgc3VwcG9ydCBJbmRleGVkRGF0YWJhc2UgZGF0
YSBzbyB3ZSBrbm93IHRoYXQgd2UncmUgb25seSBzZW5kaW5nIHRoaXMgcmVxdWVzdCB0byB0aGUg
RGF0YWJhc2VQcm9jZXNzLgogICAgIC8vIFRoYXQncyB3aHkgaGF2aW5nIG9uZSBzaW5nbGUgY2Fs
bGJhY2sgd29ya3MuCkBAIC0xNTksOCArMTg0LDEwIEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eTo6ZGlkRGVsZXRlRW50cmllcyh1aW50NjRfdCBjYWxsYmFja0lEKQogCiB2b2lkIFdl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbEVudHJpZXMoV0tPcmlnaW5EYXRhVHlw
ZXMgdHlwZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgaWYgKCEodHlwZXMgJiBrV0tJbmRleGVkRGF0YWJhc2VEYXRh
KSkKKyAgICBpZiAoISh0eXBlcyAmIGtXS0luZGV4ZWREYXRhYmFzZURhdGEpKSB7CisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHdlIG9ubHkgc3VwcG9ydCBJ
bmRleGVkRGF0YWJhc2UgZGF0YSBzbyB3ZSBrbm93IHRoYXQgd2UncmUgb25seSBzZW5kaW5nIHRo
aXMgcmVxdWVzdCB0byB0aGUgRGF0YWJhc2VQcm9jZXNzLgogICAgIC8vIFRoYXQncyB3aHkgaGF2
aW5nIG9uZSBzaW5nbGUgY2FsbGJhY2sgd29ya3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL09yaWdpbkRhdGEvV2ViT3JpZ2luRGF0YU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9PcmlnaW5EYXRhL1dlYk9yaWdpbkRhdGFNYW5hZ2VyLmNwcApp
bmRleCBhNGY3ZGFjLi5lZWQ2YTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL09yaWdpbkRhdGEvV2ViT3JpZ2luRGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvT3JpZ2luRGF0YS9XZWJPcmlnaW5EYXRhTWFuYWdlci5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJPcmlnaW5EYXRh
TWFuYWdlci5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJN
ZXNzYWdlcy5oIgpAQCAtNTEsNDggKzUxLDU0IEBAIFdlYk9yaWdpbkRhdGFNYW5hZ2VyOjpXZWJP
cmlnaW5EYXRhTWFuYWdlcihDaGlsZFByb2Nlc3MqIGNoaWxkUHJvY2VzcykKICAgICBtX2NoaWxk
UHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKLXZvaWQgV2ViT3JpZ2luRGF0
YU1hbmFnZXI6OmdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCit2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyOjpnZXRPcmlnaW5zKFdLT3JpZ2luRGF0YVR5
cGVzIHR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIEhhc2hTZXQ8UmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPj4gb3JpZ2luczsKLQotICAgIC8vIEZJWE1FOiBwb3B1bGF0ZSBvcmlnaW5z
Ci0KLSAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBpZGVudGlmaWVyczsKLSAgICBpZGVu
dGlmaWVycy5yZXNlcnZlQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkpOwotCi0gICAgSGFzaFNldDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+Pjo6aXRlcmF0b3IgZW5kID0gb3JpZ2lucy5lbmQoKTsKLSAg
ICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+OjppdGVyYXRvciBpID0gb3JpZ2lucy5i
ZWdpbigpOwotICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luID0gKmk7Ci0KLSAgICAgICAgU2VjdXJpdHlPcmlnaW5EYXRhIG9y
aWdpbkRhdGE7Ci0gICAgICAgIG9yaWdpbkRhdGEucHJvdG9jb2wgPSBvcmlnaW4tPnByb3RvY29s
KCk7Ci0gICAgICAgIG9yaWdpbkRhdGEuaG9zdCA9IG9yaWdpbi0+aG9zdCgpOwotICAgICAgICBv
cmlnaW5EYXRhLnBvcnQgPSBvcmlnaW4tPnBvcnQoKTsKLQotICAgICAgICBpZGVudGlmaWVycy51
bmNoZWNrZWRBcHBlbmQob3JpZ2luRGF0YSk7CisgICAgLy8gRklYTUU6IEZvciBub3csIHRoZSBE
YXRhYmFzZVByb2Nlc3Mgb25seSBoYW5kbGVzIEluZGV4ZWREYXRhYmFzZSBvcmlnaW4gZGF0YS4K
KyAgICAvLyBJZiBpdCBldmVyIHN0YXJ0cyBoYW5kbGluZyBvdGhlciBkYXRhIHR5cGVzIChlLmcu
IFdlYlNRTCkgdGhlbiBpdCB3aWxsIGhhdmUgdG8gYWdncmVncmF0ZSByZXF1ZXN0cworICAgIC8v
IGZvciBtdWx0aXBsZSB0eXBlcyBpbnRvIHRoZSBvbmUgY2FsbGJhY2suCisgICAgaWYgKHR5cGVz
ICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkgeworICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNo
YXJlZCgpLmdldEluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY2FsbGJhY2tJRCk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2NoaWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViT3Jp
Z2luRGF0YU1hbmFnZXJQcm94eTo6RGlkR2V0T3JpZ2lucyhpZGVudGlmaWVycywgY2FsbGJhY2tJ
RCksIDApOworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IHJlc3VsdHM7CisgICAgbV9j
aGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRp
ZEdldE9yaWdpbnMocmVzdWx0cywgY2FsbGJhY2tJRCksIDApOwogfQogCi12b2lkIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2luRGF0YVR5cGVzLCBj
b25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbmRhdGEsIHVpbnQ2NF90IGNhbGxiYWNrSUQp
Cit2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3Jp
Z2luRGF0YVR5cGVzIHR5cGVzLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbkRhdGEs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgLy8gRklYTUU6IGRlbGV0ZSBlbnRyaWVzIGZv
ciBvcmlnaW4KKyAgICAvLyBGSVhNRTogRm9yIG5vdywgdGhlIERhdGFiYXNlUHJvY2VzcyBvbmx5
IGhhbmRsZXMgSW5kZXhlZERhdGFiYXNlIG9yaWdpbiBkYXRhLgorICAgIC8vIElmIGl0IGV2ZXIg
c3RhcnRzIGhhbmRsaW5nIG90aGVyIGRhdGEgdHlwZXMgKGUuZy4gV2ViU1FMKSB0aGVuIGl0IHdp
bGwgaGF2ZSB0byBhZ2dyZWdyYXRlIHJlcXVlc3RzCisgICAgLy8gZm9yIG11bHRpcGxlIHR5cGVz
IGludG8gdGhlIG9uZSBjYWxsYmFjay4KKyAgICBpZiAodHlwZXMgJiBrV0tJbmRleGVkRGF0YWJh
c2VEYXRhKSB7CisgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZGVsZXRlSW5kZXhl
ZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbihvcmlnaW5EYXRhLCBjYWxsYmFja0lEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWREZWxldGVFbnRyaWVzKGNhbGxiYWNrSUQpLCAw
KTsKIH0KIAotdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVsZXRlRW50cmllc01vZGlmaWVk
QmV0d2VlbkRhdGVzKFdLT3JpZ2luRGF0YVR5cGVzLCBkb3VibGUsIGRvdWJsZSwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKK3ZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXI6OmRlbGV0ZUVudHJpZXNNb2Rp
ZmllZEJldHdlZW5EYXRlcyhXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgZG91YmxlIHN0YXJ0VGlt
ZSwgZG91YmxlIGVuZFRpbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgLy8gRklYTUU6
IGRlbGV0ZSBlbnRyaWVzIG1vZGlmaWVkIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZQot
CisgICAgLy8gRklYTUU6IEZvciBub3csIHRoZSBEYXRhYmFzZVByb2Nlc3Mgb25seSBoYW5kbGVz
IEluZGV4ZWREYXRhYmFzZSBvcmlnaW4gZGF0YS4KKyAgICAvLyBJZiBpdCBldmVyIHN0YXJ0cyBo
YW5kbGluZyBvdGhlciBkYXRhIHR5cGVzIChlLmcuIFdlYlNRTCkgdGhlbiBpdCB3aWxsIGhhdmUg
dG8gYWdncmVncmF0ZSByZXF1ZXN0cworICAgIC8vIGZvciBtdWx0aXBsZSB0eXBlcyBpbnRvIHRo
ZSBvbmUgY2FsbGJhY2suCisgICAgaWYgKHR5cGVzICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkg
eworICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLmRlbGV0ZUluZGV4ZWREYXRhYmFz
ZUVudHJpZXNNb2RpZmllZEJldHdlZW5EYXRlcyhzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNr
SUQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWREZWxldGVFbnRyaWVzKGNhbGxi
YWNrSUQpLCAwKTsKIH0KIAotdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVsZXRlQWxsRW50
cmllcyhXS09yaWdpbkRhdGFUeXBlcywgdWludDY0X3QgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViT3Jp
Z2luRGF0YU1hbmFnZXI6OmRlbGV0ZUFsbEVudHJpZXMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgLy8gRklYTUU6IGRlbGV0ZSBlbnRyaWVzCi0K
KyAgICAvLyBGSVhNRTogRm9yIG5vdywgdGhlIERhdGFiYXNlUHJvY2VzcyBvbmx5IGhhbmRsZXMg
SW5kZXhlZERhdGFiYXNlIG9yaWdpbiBkYXRhLgorICAgIC8vIElmIGl0IGV2ZXIgc3RhcnRzIGhh
bmRsaW5nIG90aGVyIGRhdGEgdHlwZXMgKGUuZy4gV2ViU1FMKSB0aGVuIGl0IHdpbGwgaGF2ZSB0
byBhZ2dyZWdyYXRlIHJlcXVlc3RzCisgICAgLy8gZm9yIG11bHRpcGxlIHR5cGVzIGludG8gdGhl
IG9uZSBjYWxsYmFjay4KKyAgICBpZiAodHlwZXMgJiBrV0tJbmRleGVkRGF0YWJhc2VEYXRhKSB7
CisgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZGVsZXRlQWxsSW5kZXhlZERhdGFi
YXNlRW50cmllcyhjYWxsYmFja0lEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2No
aWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6RGlk
RGVsZXRlQWxsRW50cmllcyhjYWxsYmFja0lEKSwgMCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235647</attachid>
            <date>2014-07-28 17:12:49 -0700</date>
            <delta_ts>2014-07-29 09:42:37 -0700</delta_ts>
            <desc>Patch v2 - Also added a new API we&apos;ll need very soon anyways</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25546</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhOTNmODM5Li41YTkxNjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTQtMDctMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1ha2UgV0tPcmlnaW5EYXRhTWFuYWdlciBhY3R1YWxseSBvcGVyYXRlIG9uIEluZGV4ZWRE
YXRhYmFzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzUzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUuZXhwLmluOgorCisyMDE0LTA3LTI4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KKwogICAgICAgICBSRUdSRVNTSU9OKDE2ODM3Nik6IFN0YW5kYWxvbmUgaW1h
Z2VzIHBhc3RlZCB0byBPdXRsb29rIDIwMTEgZG9uJ3QgZGlzcGxheQogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMTc3NjgzNzE+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MzYzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMzM4NTMwNS4uYzdjNDdhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEwNjYsNiArMTA2Niw4IEBAIF9fWk43V2ViQ29yZTM2
c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lRVJLTjNXVEY2U3RyaW5nRVMzXwog
X19aTjdXZWJDb3JlMzdXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlMTFtb3Zl
V2lkZ2V0c0V2CiBfX1pON1dlYkNvcmUzN1dpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9u
U2NvcGUzNXNfd2lkZ2V0SGllcmFyY2h5VXBkYXRlU3VzcGVuZENvdW50RQogX19aTjdXZWJDb3Jl
M1VSTDEwaW52YWxpZGF0ZUV2CitfX1pON1dlYkNvcmUzVVJMMTFzZXRQcm90b2NvbEVSS04zV1RG
NlN0cmluZ0UKK19fWk43V2ViQ29yZTNVUkw3c2V0UGF0aEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTNVUkxDMUVOU18xOFBhcnNlZFVSTFN0cmluZ1RhZ0VSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTNVUkxDMUVQNU5TVVJMCiBfX1pON1dlYkNvcmUzVVJMQzFFUEs3X19DRlVSTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDg2OGIxMGYuLjMyYmFiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBA
QAorMjAxNC0wNy0yOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTWFrZSBXS09yaWdpbkRhdGFNYW5hZ2VyIGFjdHVhbGx5IG9wZXJhdGUgb24gSW5kZXhlZERh
dGFiYXNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRhdGFiYXNlUHJvY2Vzczo6RGF0YWJhc2VQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGF0
YWJhc2VQcm9jZXNzOjpnZXRJbmRleGVkRGF0YWJhc2VPcmlnaW5zKTogCisgICAgICAgIChXZWJL
aXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZG9HZXRJbmRleGVkRGF0YWJhc2VPcmlnaW5zKToKKyAgICAg
ICAgKFdlYktpdDo6cmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aCk6IFV0aWxpdHkgdG8g
ZGVsZXRlIGFsbCBkYXRhYmFzZSBmaWxlcyBmb3IgdGhlIGdpdmVuIG9yaWdpbiBwYXRoCisgICAg
ICAgICAgICB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4K
KyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpkZWxldGVJbmRleGVkRGF0YWJhc2VF
bnRyaWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpkb0Rl
bGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpE
YXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZEJldHdl
ZW5EYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZG9EZWxldGVJbmRl
eGVkRGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMpOgorICAgICAgICAoV2ViS2l0
OjpEYXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZUVudHJpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmRvRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNl
RW50cmllcyk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oOgor
CisgICAgICAgICogU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT46OmNvcHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
cm9zc1RocmVhZENvcGllci5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFN
YW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlclBy
b3h5OjpnZXRPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eTo6ZGlkR2V0T3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5h
Z2VyUHJveHk6OmRlbGV0ZUVudHJpZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVBbGxF
bnRyaWVzKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvT3JpZ2luRGF0YS9XZWJPcmlnaW5EYXRh
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpnZXRP
cmlnaW5zKTogUGlwZSBJREIgcmVxdWVzdHMgdGhyb3VnaCB0byB0aGUgRGF0YWJhc2VQcm9jZXNz
LgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zv
ck9yaWdpbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6
ZGVsZXRlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpkZWxldGVBbGxFbnRyaWVzKTogRGl0dG8uCisKIDIw
MTQtMDctMjggIFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBE
aXNhYmxlIHRhZ2dlZCBzdHJpbmdzIGZvciB0aGUgcGx1Z2luIHByb2Nlc3MuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IGJm
ZjM3ODAuLmI5MGRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0zNCw5ICszNCwxMiBAQAogI2luY2x1ZGUgIkRhdGFi
YXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IldlYkNyb3NzVGhyZWFkQ29waWVyLmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXIu
aCIKICNpbmNsdWRlICJXZWJPcmlnaW5EYXRhTWFuYWdlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzLDYg
KzU2LDkgQEAgRGF0YWJhc2VQcm9jZXNzOjpEYXRhYmFzZVByb2Nlc3MoKQogICAgIDogbV9xdWV1
ZShhZG9wdFJlZigqV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuRGF0YWJhc2VQ
cm9jZXNzIikubGVha1JlZigpKSkKICAgICAsIG1fd2ViT3JpZ2luRGF0YU1hbmFnZXIoc3RkOjpt
YWtlX3VuaXF1ZTxXZWJPcmlnaW5EYXRhTWFuYWdlcj4odGhpcykpCiB7CisgICAgLy8gTWFrZSBz
dXJlIHRoZSBVVEY4RW5jb2RpbmcgZW5jb2RpbmcgYW5kIHRoZSB0ZXh0IGVuY29kaW5nIG1hcHMg
aGF2ZSBiZWVuIGJ1aWx0IG9uIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgYSBiYWNrZ3JvdW5kIHRo
cmVhZCBuZWVkcyBpdC4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTM2NSAtIE5lZWQgYSBtb3JlIGV4cGxpY2l0IHdheSBvZiBkb2luZyB0
aGlzIGJlc2lkZXMgYWNjZXNzaW5nIHRoZSBVVEY4RW5jb2RpbmcuCisgICAgVVRGOEVuY29kaW5n
KCk7CiB9CiAKIERhdGFiYXNlUHJvY2Vzczo6fkRhdGFiYXNlUHJvY2VzcygpCkBAIC0xODUsNiAr
MTkxLDEyNiBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6Y3JlYXRlRGF0YWJhc2VUb1dlYlByb2Nl
c3NDb25uZWN0aW9uKCkKICNlbmRpZgogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6Z2V0SW5k
ZXhlZERhdGFiYXNlT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmRGF0YWJhc2VQcm9jZXNzOjpkb0dldElu
ZGV4ZWREYXRhYmFzZU9yaWdpbnMsIGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBEYXRhYmFzZVBy
b2Nlc3M6OmRvR2V0SW5kZXhlZERhdGFiYXNlT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQor
eworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IHJlc3VsdHM7CisKKyAgICBpZiAobV9p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRpZEdldE9yaWdpbnMocmVzdWx0cywgY2Fs
bGJhY2tJRCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFN0cmlu
Zz4gb3JpZ2luUGF0aHMgPSBsaXN0RGlyZWN0b3J5KG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
LCAiKiIpOworICAgIGZvciAoYXV0byYgb3JpZ2luUGF0aCA6IG9yaWdpblBhdGhzKSB7CisgICAg
ICAgIFVSTCB1cmw7CisgICAgICAgIHVybC5zZXRQcm90b2NvbChBU0NJSUxpdGVyYWwoImZpbGUi
KSk7CisgICAgICAgIHVybC5zZXRQYXRoKG9yaWdpblBhdGgpOworCisgICAgICAgIFN0cmluZyBk
YXRhYmFzZUlkZW50aWZpZXIgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKKworICAgICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46Om1h
eWJlQ3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpOworICAg
ICAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgcmVzdWx0cy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
c2VjdXJpdHlPcmlnaW4uZ2V0KCkpKTsKKyAgICB9CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWRHZXRPcmlnaW5zKHJlc3VsdHMsIGNhbGxiYWNrSUQp
LCAwKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aChj
b25zdCBTdHJpbmcmIG9yaWdpblBhdGgsIGRvdWJsZSBzdGFydERhdGUsIGRvdWJsZSBlbmREYXRl
KQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWxzbyBjbG9zZS9pbnZhbGlkYXRlIGFueSBs
aXZlIGhhbmRsZXMgdG8gdGhlIGRhdGFiYXNlIGZpbGVzIHdlIGFyZSBhYm91dCB0byBkZWxldGUu
CisgICAgLy8gUmlnaHQgbm93OgorICAgIC8vICAgICAtIEZvciByZWFkLW9ubHkgb3BlcmF0aW9u
cywgdGhleSB3aWxsIGNvbnRpbnVlIGZ1bmN0aW9uaW5nIGFzIG5vcm1hbCBvbiB0aGUgdW5saW5r
ZWQgZmlsZS4KKyAgICAvLyAgICAgLSBGb3Igd3JpdGUgb3BlcmF0aW9ucywgdGhleSB3aWxsIHN0
YXJ0IHByb2R1Y2luZyBlcnJvcnMgYXMgU1FMaXRlIG5vdGljZXMgdGhlIG1pc3NpbmcgYmFja2lu
ZyBzdG9yZS4KKyAgICAvLyBUaGlzIGlzIHRyYWNrZWQgYnkgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTM0NworCisgICAgVmVjdG9yPFN0cmluZz4gZGF0YWJhc2VQ
YXRocyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0aCwgIioiKTsKKworICAgIGZvciAoYXV0byYg
ZGF0YWJhc2VQYXRoIDogZGF0YWJhc2VQYXRocykgeworICAgICAgICBTdHJpbmcgZGF0YWJhc2VG
aWxlID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlUGF0aCwgIkluZGV4ZWREQi5z
cWxpdGUzIik7CisKKyAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGRhdGFiYXNlRmlsZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0aW1lX3QgbW9kVGltZTsKKyAgICAgICAgZ2V0
RmlsZU1vZGlmaWNhdGlvblRpbWUoZGF0YWJhc2VGaWxlLCBtb2RUaW1lKTsKKworICAgICAgICBp
ZiAobW9kVGltZSA8IHN0YXJ0RGF0ZSB8fCBtb2RUaW1lID4gZW5kRGF0ZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGRlbGV0ZUZpbGUoZGF0YWJhc2VGaWxlKTsKKyAgICAgICAg
ZGVsZXRlRW1wdHlEaXJlY3RvcnkoZGF0YWJhc2VQYXRoKTsKKyAgICB9CisKKyAgICBkZWxldGVF
bXB0eURpcmVjdG9yeShvcmlnaW5QYXRoKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmRl
bGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZEYXRhYmFzZVByb2Nlc3M6OmRvRGVsZXRlSW5kZXhl
ZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbiwgb3JpZ2luLCBjYWxsYmFja0lEKSk7Cit9CisKK3Zv
aWQgRGF0YWJhc2VQcm9jZXNzOjpkb0RlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmln
aW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW5EYXRhLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQoreworICAgIGlmIChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6RGlkRGVs
ZXRlRW50cmllcyhjYWxsYmFja0lEKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IG9yaWdpbkRhdGEuc2VjdXJpdHlPcmln
aW4oKTsKKyAgICBTdHJpbmcgZGF0YWJhc2VJZGVudGlmaWVyID0gb3JpZ2luLT5kYXRhYmFzZUlk
ZW50aWZpZXIoKTsKKyAgICBTdHJpbmcgb3JpZ2luUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YWJhc2VJZGVudGlmaWVyKTsKKwor
ICAgIHJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBhdGgob3JpZ2luUGF0aCwgc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXgoKSk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5
OjpEaWREZWxldGVFbnRyaWVzKGNhbGxiYWNrSUQpLCAwKTsKK30KKwordm9pZCBEYXRhYmFzZVBy
b2Nlc3M6OmRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZEJldHdlZW5EYXRlcyhk
b3VibGUgc3RhcnREYXRlLCBkb3VibGUgZW5kRGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJkRhdGFiYXNlUHJv
Y2Vzczo6ZG9EZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMs
IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIERhdGFiYXNlUHJv
Y2Vzczo6ZG9EZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMo
ZG91YmxlIHN0YXJ0RGF0ZSwgZG91YmxlIGVuZERhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7
CisgICAgaWYgKG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWREZWxldGVFbnRy
aWVzKGNhbGxiYWNrSUQpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rv
cjxTdHJpbmc+IG9yaWdpblBhdGhzID0gbGlzdERpcmVjdG9yeShtX2luZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSwgIioiKTsKKyAgICBmb3IgKGF1dG8mIG9yaWdpblBhdGggOiBvcmlnaW5QYXRocykK
KyAgICAgICAgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aChvcmlnaW5QYXRoLCBzdGFy
dERhdGUsIGVuZERhdGUpOworCisgICAgc2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eTo6RGlkRGVsZXRlRW50cmllcyhjYWxsYmFja0lEKSwgMCk7Cit9CisKK3ZvaWQgRGF0
YWJhc2VQcm9jZXNzOjpkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VFbnRyaWVzKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCit7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMs
ICZEYXRhYmFzZVByb2Nlc3M6OmRvRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlRW50cmllcywgY2Fs
bGJhY2tJRCkpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZG9EZWxldGVBbGxJbmRleGVk
RGF0YWJhc2VFbnRyaWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgaWYgKG1faW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWREZWxldGVBbGxFbnRyaWVzKGNhbGxiYWNrSUQp
LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdp
blBhdGhzID0gbGlzdERpcmVjdG9yeShtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgIioiKTsK
KyAgICBmb3IgKGF1dG8mIG9yaWdpblBhdGggOiBvcmlnaW5QYXRocykKKyAgICAgICAgcmVtb3Zl
QWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aChvcmlnaW5QYXRoLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46Omxvd2VzdCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsK
KworICAgIHNlbmQoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRpZERlbGV0
ZUFsbEVudHJpZXMoY2FsbGJhY2tJRCksIDApOworfQorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQog
dm9pZCBEYXRhYmFzZVByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggYjE0YzFhOS4uM2RkMzY0Y2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgK
QEAgLTYwLDYgKzYwLDExIEBAIHB1YmxpYzoKIAogICAgIFdvcmtRdWV1ZSYgcXVldWUoKSB7IHJl
dHVybiBtX3F1ZXVlLmdldCgpOyB9CiAKKyAgICB2b2lkIGdldEluZGV4ZWREYXRhYmFzZU9yaWdp
bnModWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBkZWxldGVJbmRleGVkRGF0YWJhc2VF
bnRyaWVzRm9yT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpOworICAgIHZvaWQgZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc01vZGlmaWVkQmV0
d2VlbkRhdGVzKGRvdWJsZSBzdGFydERhdGUsIGRvdWJsZSBlbmREYXRlLCB1aW50NjRfdCBjYWxs
YmFja0lEKTsKKyAgICB2b2lkIGRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZUVudHJpZXModWludDY0
X3QgY2FsbGJhY2tJRCk7CisKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VQcm9jZXNzKCk7CiAKQEAg
LTg1LDYgKzkwLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gRm9yIGV4ZWN1dGlvbiBvbiB3b3JrIHF1
ZXVlIHRocmVhZCBvbmx5CiAgICAgdm9pZCBwZXJmb3JtTmV4dERhdGFiYXNlVGFzaygpOwogICAg
IHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRvR2V0SW5k
ZXhlZERhdGFiYXNlT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGRvRGVs
ZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGRvRGVsZXRlSW5kZXhlZERhdGFi
YXNlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKGRvdWJsZSBzdGFydERhdGUsIGRvdWJsZSBl
bmREYXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGRvRGVsZXRlQWxsSW5kZXhl
ZERhdGFiYXNlRW50cmllcyh1aW50NjRfdCBjYWxsYmFja0lEKTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uPj4gbV9kYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFk
Q29waWVyLmNwcAppbmRleCAzZDgwNDRiLi5mZTAzMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEuaD4KIApAQCAtNzks
NiArODAsMTEgQEAgVmVjdG9yPFZlY3RvcjxJREJLZXlEYXRhPj4gQ3Jvc3NUaHJlYWRDb3BpZXJC
YXNlPGZhbHNlLCBmYWxzZSwgVmVjdG9yPFZlY3RvcjxJREIKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCitTZWN1cml0eU9yaWdpbkRhdGEgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxz
ZSwgU2VjdXJpdHlPcmlnaW5EYXRhPjo6Y29weShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNl
Y3VyaXR5T3JpZ2luRGF0YSkKK3sKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xh
dGVkQ29weSgpOworfQorCiBBU0NJSUxpdGVyYWwgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNl
LCBmYWxzZSwgQVNDSUlMaXRlcmFsPjo6Y29weShjb25zdCBBU0NJSUxpdGVyYWwmIGxpdGVyYWwp
CiB7CiAgICAgcmV0dXJuIGxpdGVyYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9z
c1RocmVhZENvcGllci5oCmluZGV4IDlhMmFiMzAuLjE5ZWY1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oCkBAIC0zNiw2ICszNiw4IEBAIGNsYXNz
IElEQklkZW50aWZpZXI7CiBjbGFzcyBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI7CiAKIGVu
dW0gY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU7CisKK3N0cnVjdCBTZWN1cml0
eU9yaWdpbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjAsNiArNjIsMTAgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZVMKICAgICB9CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9z
c1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0
YT4geworICAgIHN0YXRpYyBXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YSBjb3B5KGNvbnN0IFdl
YktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhJiB0eXBlKTsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFZlY3RvcjxjaGFyPj4gewogICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gY29weShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94
eS5jcHAKaW5kZXggNGQwMzZjYS4uZTBjNmYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcApAQCAtMzEsNiArMzEs
MTAgQEAKICNpbmNsdWRlICJXZWJPcmlnaW5EYXRhTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtODIsNiArODYsMTQgQEAgdm9pZCBXZWJPcmlnaW5E
YXRhTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKIAogdm9pZCBXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5OjpnZXRPcmlnaW5zKFdLT3JpZ2luRGF0YVR5cGVzIHR5cGVz
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4g
Y2FsbGJhY2tGdW5jdGlvbikKIHsKKyAgICAvLyBGSVhNRTogUmlnaHQgbm93IHdlIG9ubHkgc3Vw
cG9ydCBJbmRleGVkRGF0YWJhc2UgZGF0YSBzbyB3ZSBrbm93IHRoYXQgd2UncmUgb25seSBzZW5k
aW5nIHRoaXMgcmVxdWVzdCB0byB0aGUgRGF0YWJhc2VQcm9jZXNzLgorICAgIC8vIFRoYXQncyB3
aHkgaGF2aW5nIG9uZSBzaW5nbGUgY2FsbGJhY2sgd29ya3MuCisgICAgLy8gSW4gdGhlIGZ1dHVy
ZSB3aGVuIHdlIG1lc3NhZ2UgTi1wcm9jZXNzZXMgd2UnbGwgaGF2ZSB0byB3YWl0IGZvciBhbGwg
TiByZXBsaWVzIGJlZm9yZSByZXNwb25kaW5nIHRvIHRoZSBjbGllbnQuCisgICAgaWYgKCEodHlw
ZXMgJiBrV0tJbmRleGVkRGF0YWJhc2VEYXRhKSkgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxsYmFj
azo6Y3JlYXRlKFdURjo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAKICAgICBpZiAoIWNvbnRl
eHQoKSkgewpAQCAtOTIsMjQgKzEwNCwzMiBAQCB2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJv
eHk6OmdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMsIHN0ZDo6ZnVuY3RpbwogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJy
YXlDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAKLSAgICAv
LyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IDxyZGFyOi8vcHJvYmxlbS8xMjIzOTc2NT4gTWFr
ZSBtYW5pcHVsYXRpbmcgY2FjaGUgaW5mb3JtYXRpb24gd29yayB3aXRoIHBlci10YWIgV2ViUHJv
Y2Vzcy4KLSAgICBjb250ZXh0KCktPnNlbmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6R2V0T3JpZ2lucyh0eXBl
cywgY2FsbGJhY2tJRCkpOworICAgIGNvbnRleHQoKS0+c2VuZFRvRGF0YWJhc2VQcm9jZXNzUmVs
YXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6OkdldE9y
aWdpbnModHlwZXMsIGNhbGxiYWNrSUQpKTsKIH0KIAotdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5OjpkaWRHZXRPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBv
cmlnaW5EYXRhcywgdWludDY0X3QgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eTo6ZGlkR2V0T3JpZ2lucyhJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0
IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5JZGVudGlmaWVycywgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKIHsKICAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2Fy
cmF5Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7Ci0gICAgcGVyZm9ybUFQSUNhbGxiYWNrV2l0
aFNlY3VyaXR5T3JpZ2luRGF0YVZlY3RvcihvcmlnaW5EYXRhcywgY2FsbGJhY2suZ2V0KCkpOwor
ICAgIE1FU1NBR0VfQ0hFQ0tfQkFTRShjYWxsYmFjaywgY29ubmVjdGlvbik7CisKKyAgICBWZWN0
b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc2VjdXJpdHlPcmlnaW5zOworICAgIHNlY3VyaXR5T3Jp
Z2lucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbklkZW50aWZpZXJzLnNpemUoKSk7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbklkZW50aWZpZXIgOiBvcmlnaW5JZGVudGlmaWVy
cykKKyAgICAgICAgc2VjdXJpdHlPcmlnaW5zLnVuY2hlY2tlZEFwcGVuZChXZWJTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKG9yaWdpbklkZW50aWZpZXIuc2VjdXJpdHlPcmlnaW4oKSkpOworCisgICAg
Y2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShBUEk6OkFycmF5OjpjcmVh
dGUoV1RGOjptb3ZlKHNlY3VyaXR5T3JpZ2lucykpLmdldCgpKTsKIH0KIAogdm9pZCBXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2luRGF0YVR5
cGVzIHR5cGVzLCBXZWJTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGlmICghKHR5
cGVzICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8v
IEZJWE1FOiBSaWdodCBub3cgd2Ugb25seSBzdXBwb3J0IEluZGV4ZWREYXRhYmFzZSBkYXRhIHNv
IHdlIGtub3cgdGhhdCB3ZSdyZSBvbmx5IHNlbmRpbmcgdGhpcyByZXF1ZXN0IHRvIHRoZSBEYXRh
YmFzZVByb2Nlc3MuCiAgICAgLy8gVGhhdCdzIHdoeSBoYXZpbmcgb25lIHNpbmdsZSBjYWxsYmFj
ayB3b3Jrcy4KICAgICAvLyBJbiB0aGUgZnV0dXJlIHdoZW4gd2UgbWVzc2FnZSBOLXByb2Nlc3Nl
cyB3ZSdsbCBoYXZlIHRvIHdhaXQgZm9yIGFsbCBOIHJlcGxpZXMgYmVmb3JlIHJlc3BvbmRpbmcg
dG8gdGhlIGNsaWVudC4KKyAgICBpZiAoISh0eXBlcyAmIGtXS0luZGV4ZWREYXRhYmFzZURhdGEp
KSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxs
YmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFdURjo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CiAKQEAgLTEzMSwxMiArMTUxLDEzIEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6
ZGVsZXRlRW50cmllc0Zvck9yaWdpbihXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywKIAogdm9pZCBX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0
ZXMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMsIGRvdWJsZSBzdGFydERhdGUsIGRvdWJsZSBlbmRE
YXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGlmICghKHR5cGVzICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiBSaWdodCBub3cgd2Ugb25seSBzdXBwb3J0
IEluZGV4ZWREYXRhYmFzZSBkYXRhIHNvIHdlIGtub3cgdGhhdCB3ZSdyZSBvbmx5IHNlbmRpbmcg
dGhpcyByZXF1ZXN0IHRvIHRoZSBEYXRhYmFzZVByb2Nlc3MuCiAgICAgLy8gVGhhdCdzIHdoeSBo
YXZpbmcgb25lIHNpbmdsZSBjYWxsYmFjayB3b3Jrcy4KICAgICAvLyBJbiB0aGUgZnV0dXJlIHdo
ZW4gd2UgbWVzc2FnZSBOLXByb2Nlc3NlcyB3ZSdsbCBoYXZlIHRvIHdhaXQgZm9yIGFsbCBOIHJl
cGxpZXMgYmVmb3JlIHJlc3BvbmRpbmcgdG8gdGhlIGNsaWVudC4KKyAgICBpZiAoISh0eXBlcyAm
IGtXS0luZGV4ZWREYXRhYmFzZURhdGEpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBS
ZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFdURjo6
bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAKQEAgLTE1MSwyMCArMTcyLDIyIEBAIHZvaWQgV2Vi
T3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6ZGVsZXRlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVz
KFdLT3JpZ2luRGF0YVR5CiAgICAgY29udGV4dCgpLT5zZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6RGVsZXRl
RW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKHR5cGVzLCBzdGFydERhdGUsIGVuZERhdGUsIGNh
bGxiYWNrSUQpKTsKIH0KIAotdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkaWREZWxl
dGVFbnRyaWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCit2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHk6OmRpZERlbGV0ZUVudHJpZXMoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50
NjRfdCBjYWxsYmFja0lEKQogewogICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IGNhbGxiYWNrID0g
bV92b2lkQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7CisgICAgTUVTU0FHRV9DSEVDS19CQVNF
KGNhbGxiYWNrLCBjb25uZWN0aW9uKTsKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrKCk7
CiB9CiAKIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsRW50cmllcyhX
S09yaWdpbkRhdGFUeXBlcyB0eXBlcywgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6
OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBpZiAoISh0eXBlcyAmIGtXS0luZGV4
ZWREYXRhYmFzZURhdGEpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBGSVhNRTogUmlnaHQg
bm93IHdlIG9ubHkgc3VwcG9ydCBJbmRleGVkRGF0YWJhc2UgZGF0YSBzbyB3ZSBrbm93IHRoYXQg
d2UncmUgb25seSBzZW5kaW5nIHRoaXMgcmVxdWVzdCB0byB0aGUgRGF0YWJhc2VQcm9jZXNzLgog
ICAgIC8vIFRoYXQncyB3aHkgaGF2aW5nIG9uZSBzaW5nbGUgY2FsbGJhY2sgd29ya3MuCiAgICAg
Ly8gSW4gdGhlIGZ1dHVyZSB3aGVuIHdlIG1lc3NhZ2UgTi1wcm9jZXNzZXMgd2UnbGwgaGF2ZSB0
byB3YWl0IGZvciBhbGwgTiByZXBsaWVzIGJlZm9yZSByZXNwb25kaW5nIHRvIHRoZSBjbGllbnQu
CisgICAgaWYgKCEodHlwZXMgJiBrV0tJbmRleGVkRGF0YWJhc2VEYXRhKSkgeworICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBWb2lkQ2Fs
bGJhY2s6OmNyZWF0ZShXVEY6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogCkBAIC0xNzksOSAr
MjAyLDEwIEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsRW50cmll
cyhXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgc3RkOjpmCiAgICAgY29udGV4dCgpLT5zZW5kVG9E
YXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJPcmlnaW5E
YXRhTWFuYWdlcjo6RGVsZXRlQWxsRW50cmllcyh0eXBlcywgY2FsbGJhY2tJRCkpOwogfQogCi12
b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRpZERlbGV0ZUFsbEVudHJpZXModWludDY0
X3QgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6ZGlkRGVsZXRl
QWxsRW50cmllcyhJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCiB7CiAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX3ZvaWRDYWxsYmFj
a3MudGFrZShjYWxsYmFja0lEKTsKKyAgICBNRVNTQUdFX0NIRUNLX0JBU0UoY2FsbGJhY2ssIGNv
bm5lY3Rpb24pOwogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2soKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgK
aW5kZXggOTAxMDkyNS4uNWMyMjc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCkBAIC02Nyw5ICs2Nyw5IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eShXZWJD
b250ZXh0Kik7CiAKLSAgICB2b2lkIGRpZEdldE9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4mLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2b2lkIGRpZERlbGV0ZUVu
dHJpZXModWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBkaWREZWxldGVBbGxFbnRyaWVz
KHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZGlkR2V0T3JpZ2lucyhJUEM6OkNvbm5l
Y3Rpb24qLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpOworICAgIHZvaWQgZGlkRGVsZXRlRW50cmllcyhJUEM6OkNvbm5lY3Rpb24qLCB1aW50
NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGRpZERlbGV0ZUFsbEVudHJpZXMoSVBDOjpDb25u
ZWN0aW9uKiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKICAgICAvLyBXZWJDb250ZXh0U3VwcGxl
bWVudAogICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGNmMzhhMjguLjU4YWM4YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMSw3ICsyMSw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIG1l
c3NhZ2VzIC0+IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkgewotICAgIERpZEdldE9yaWdpbnMo
VmVjdG9yPFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5JZGVudGlmaWVycywgdWlu
dDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgRGlkRGVsZXRlRW50cmllcyh1aW50NjRfdCBjYWxsYmFj
a0lEKTsKLSAgICBEaWREZWxldGVBbGxFbnRyaWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAg
IERpZEdldE9yaWdpbnMoVmVjdG9yPFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5J
ZGVudGlmaWVycywgdWludDY0X3QgY2FsbGJhY2tJRCkgV2FudHNDb25uZWN0aW9uCisgICAgRGlk
RGVsZXRlRW50cmllcyh1aW50NjRfdCBjYWxsYmFja0lEKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBE
aWREZWxldGVBbGxFbnRyaWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpIFdhbnRzQ29ubmVjdGlvbgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9PcmlnaW5EYXRhL1dlYk9y
aWdpbkRhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvT3JpZ2luRGF0
YS9XZWJPcmlnaW5EYXRhTWFuYWdlci5jcHAKaW5kZXggYTRmN2RhYy4uZWVkNmEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9PcmlnaW5EYXRhL1dlYk9yaWdpbkRhdGFN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL09yaWdpbkRhdGEvV2Vi
T3JpZ2luRGF0YU1hbmFnZXIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXIuaCIKIAotI2luY2x1ZGUgIkNoaWxk
UHJvY2Vzcy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzcy5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCIKQEAgLTUxLDQ4ICs1MSw1NCBA
QCBXZWJPcmlnaW5EYXRhTWFuYWdlcjo6V2ViT3JpZ2luRGF0YU1hbmFnZXIoQ2hpbGRQcm9jZXNz
KiBjaGlsZFByb2Nlc3MpCiAgICAgbV9jaGlsZFByb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRo
aXMpOwogfQogCi12b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyOjpnZXRPcmlnaW5zKFdLT3JpZ2lu
RGF0YVR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQordm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdl
cjo6Z2V0T3JpZ2lucyhXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgdWludDY0X3QgY2FsbGJhY2tJ
RCkKIHsKLSAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnM7Ci0KLSAg
ICAvLyBGSVhNRTogcG9wdWxhdGUgb3JpZ2lucwotCi0gICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2lu
RGF0YT4gaWRlbnRpZmllcnM7Ci0gICAgaWRlbnRpZmllcnMucmVzZXJ2ZUNhcGFjaXR5KG9yaWdp
bnMuc2l6ZSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj46Oml0ZXJh
dG9yIGVuZCA9IG9yaWdpbnMuZW5kKCk7Ci0gICAgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmln
aW4+Pjo6aXRlcmF0b3IgaSA9IG9yaWdpbnMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSBlbmQ7
ICsraSkgewotICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9ICppOwotCi0g
ICAgICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBvcmlnaW5EYXRhOwotICAgICAgICBvcmlnaW5EYXRh
LnByb3RvY29sID0gb3JpZ2luLT5wcm90b2NvbCgpOwotICAgICAgICBvcmlnaW5EYXRhLmhvc3Qg
PSBvcmlnaW4tPmhvc3QoKTsKLSAgICAgICAgb3JpZ2luRGF0YS5wb3J0ID0gb3JpZ2luLT5wb3J0
KCk7Ci0KLSAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKG9yaWdpbkRhdGEpOwor
ICAgIC8vIEZJWE1FOiBGb3Igbm93LCB0aGUgRGF0YWJhc2VQcm9jZXNzIG9ubHkgaGFuZGxlcyBJ
bmRleGVkRGF0YWJhc2Ugb3JpZ2luIGRhdGEuCisgICAgLy8gSWYgaXQgZXZlciBzdGFydHMgaGFu
ZGxpbmcgb3RoZXIgZGF0YSB0eXBlcyAoZS5nLiBXZWJTUUwpIHRoZW4gaXQgd2lsbCBoYXZlIHRv
IGFnZ3JlZ3JhdGUgcmVxdWVzdHMKKyAgICAvLyBmb3IgbXVsdGlwbGUgdHlwZXMgaW50byB0aGUg
b25lIGNhbGxiYWNrLgorICAgIGlmICh0eXBlcyAmIGtXS0luZGV4ZWREYXRhYmFzZURhdGEpIHsK
KyAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5nZXRJbmRleGVkRGF0YWJhc2VPcmln
aW5zKGNhbGxiYWNrSUQpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jaGlsZFBy
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRpZEdldE9y
aWdpbnMoaWRlbnRpZmllcnMsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiByZXN1bHRzOworICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpEaWRHZXRPcmlnaW5zKHJlc3VsdHMsIGNhbGxiYWNr
SUQpLCAwKTsKIH0KIAotdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlcjo6ZGVsZXRlRW50cmllc0Zv
ck9yaWdpbihXS09yaWdpbkRhdGFUeXBlcywgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmln
aW5kYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQordm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlcjo6
ZGVsZXRlRW50cmllc0Zvck9yaWdpbihXS09yaWdpbkRhdGFUeXBlcyB0eXBlcywgY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcmlnaW5EYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAg
IC8vIEZJWE1FOiBkZWxldGUgZW50cmllcyBmb3Igb3JpZ2luCisgICAgLy8gRklYTUU6IEZvciBu
b3csIHRoZSBEYXRhYmFzZVByb2Nlc3Mgb25seSBoYW5kbGVzIEluZGV4ZWREYXRhYmFzZSBvcmln
aW4gZGF0YS4KKyAgICAvLyBJZiBpdCBldmVyIHN0YXJ0cyBoYW5kbGluZyBvdGhlciBkYXRhIHR5
cGVzIChlLmcuIFdlYlNRTCkgdGhlbiBpdCB3aWxsIGhhdmUgdG8gYWdncmVncmF0ZSByZXF1ZXN0
cworICAgIC8vIGZvciBtdWx0aXBsZSB0eXBlcyBpbnRvIHRoZSBvbmUgY2FsbGJhY2suCisgICAg
aWYgKHR5cGVzICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkgeworICAgICAgICBEYXRhYmFzZVBy
b2Nlc3M6OnNoYXJlZCgpLmRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNGb3JPcmlnaW4ob3Jp
Z2luRGF0YSwgY2FsbGJhY2tJRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBtX2No
aWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6RGlk
RGVsZXRlRW50cmllcyhjYWxsYmFja0lEKSwgMCk7CiB9CiAKLXZvaWQgV2ViT3JpZ2luRGF0YU1h
bmFnZXI6OmRlbGV0ZUVudHJpZXNNb2RpZmllZEJldHdlZW5EYXRlcyhXS09yaWdpbkRhdGFUeXBl
cywgZG91YmxlLCBkb3VibGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit2b2lkIFdlYk9yaWdpbkRh
dGFNYW5hZ2VyOjpkZWxldGVFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMoV0tPcmlnaW5EYXRh
VHlwZXMgdHlwZXMsIGRvdWJsZSBzdGFydFRpbWUsIGRvdWJsZSBlbmRUaW1lLCB1aW50NjRfdCBj
YWxsYmFja0lEKQogewotICAgIC8vIEZJWE1FOiBkZWxldGUgZW50cmllcyBtb2RpZmllZCBiZXR3
ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGRhdGUKLQorICAgIC8vIEZJWE1FOiBGb3Igbm93LCB0aGUg
RGF0YWJhc2VQcm9jZXNzIG9ubHkgaGFuZGxlcyBJbmRleGVkRGF0YWJhc2Ugb3JpZ2luIGRhdGEu
CisgICAgLy8gSWYgaXQgZXZlciBzdGFydHMgaGFuZGxpbmcgb3RoZXIgZGF0YSB0eXBlcyAoZS5n
LiBXZWJTUUwpIHRoZW4gaXQgd2lsbCBoYXZlIHRvIGFnZ3JlZ3JhdGUgcmVxdWVzdHMKKyAgICAv
LyBmb3IgbXVsdGlwbGUgdHlwZXMgaW50byB0aGUgb25lIGNhbGxiYWNrLgorICAgIGlmICh0eXBl
cyAmIGtXS0luZGV4ZWREYXRhYmFzZURhdGEpIHsKKyAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpz
aGFyZWQoKS5kZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0ZXMo
c3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFja0lEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBtX2NoaWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eTo6RGlkRGVsZXRlRW50cmllcyhjYWxsYmFja0lEKSwgMCk7CiB9CiAKLXZvaWQgV2ViT3Jp
Z2luRGF0YU1hbmFnZXI6OmRlbGV0ZUFsbEVudHJpZXMoV0tPcmlnaW5EYXRhVHlwZXMsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCit2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyOjpkZWxldGVBbGxFbnRy
aWVzKFdLT3JpZ2luRGF0YVR5cGVzIHR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAg
IC8vIEZJWE1FOiBkZWxldGUgZW50cmllcwotCisgICAgLy8gRklYTUU6IEZvciBub3csIHRoZSBE
YXRhYmFzZVByb2Nlc3Mgb25seSBoYW5kbGVzIEluZGV4ZWREYXRhYmFzZSBvcmlnaW4gZGF0YS4K
KyAgICAvLyBJZiBpdCBldmVyIHN0YXJ0cyBoYW5kbGluZyBvdGhlciBkYXRhIHR5cGVzIChlLmcu
IFdlYlNRTCkgdGhlbiBpdCB3aWxsIGhhdmUgdG8gYWdncmVncmF0ZSByZXF1ZXN0cworICAgIC8v
IGZvciBtdWx0aXBsZSB0eXBlcyBpbnRvIHRoZSBvbmUgY2FsbGJhY2suCisgICAgaWYgKHR5cGVz
ICYga1dLSW5kZXhlZERhdGFiYXNlRGF0YSkgeworICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNo
YXJlZCgpLmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZUVudHJpZXMoY2FsbGJhY2tJRCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9jaGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OkRpZERlbGV0ZUFsbEVudHJpZXMoY2FsbGJhY2tJRCks
IDApOwogfQogCg==
</data>
<flag name="review"
          id="260225"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>