<?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>163878</bug_id>
          
          <creation_ts>2016-10-23 20:50:31 -0700</creation_ts>
          <short_desc>Custom elements reactions should have a queue per element</short_desc>
          <delta_ts>2016-10-24 23:21:10 -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>DOM</component>
          <version>Safari Technology Preview</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243598</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-10-23 20:50:31 -0700</bug_when>
    <thetext>Update our reactions queue&apos; semantics to match the latest specifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243605</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-10-23 21:46:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/28910901&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243606</commentid>
    <comment_count>2</comment_count>
      <attachid>292580</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-10-23 21:48:08 -0700</bug_when>
    <thetext>Created attachment 292580
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243608</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-23 21:49:58 -0700</bug_when>
    <thetext>Attachment 292580 did not pass style-queue:


ERROR: Source/WebCore/dom/CustomElementReactionQueue.cpp:250:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243659</commentid>
    <comment_count>4</comment_count>
      <attachid>292580</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-24 02:38:52 -0700</bug_when>
    <thetext>Comment on attachment 292580
Fixes the bug

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

&gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:254
&gt; +class BackupElementQueueMicrotask final : public Microtask {
&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; +private:
&gt; +    Result run() final
&gt; +    {
&gt; +        CustomElementReactionStack::processBackupQueue();
&gt; +        return Result::Done;
&gt; +    }
&gt; +};

Someone should modernize Microtask to take lambdas rather than require subclassing.

&gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:264
&gt; +CustomElementReactionStack::ElementQueue&amp; CustomElementReactionStack::ensureBackupQueue()
&gt; +{
&gt; +    auto&amp; queue = backupElementQueue();
&gt; +    if (queue)
&gt; +        return *queue; // If the processing the backup element queue flag is set, abort this algorithm.
&gt; +    queue = std::make_unique&lt;ElementQueue&gt;(); // Set the processing the backup element queue flag.
&gt; +    MicrotaskQueue::mainThreadQueue().append(std::make_unique&lt;BackupElementQueueMicrotask&gt;());
&gt; +    return *queue;
&gt; +}

I wonder if this would be easier to follow if there was an actual &quot;processing the backup element queue&quot; boolean flag instead of using the existence of backupElementQueue object. backupElementQueue could just stay alive like normal global NeverDestroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244099</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-10-24 22:08:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 292580 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292580&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:254
&gt; &gt; +class BackupElementQueueMicrotask final : public Microtask {
&gt; &gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; &gt; +private:
&gt; &gt; +    Result run() final
&gt; &gt; +    {
&gt; &gt; +        CustomElementReactionStack::processBackupQueue();
&gt; &gt; +        return Result::Done;
&gt; &gt; +    }
&gt; &gt; +};
&gt; 
&gt; Someone should modernize Microtask to take lambdas rather than require
&gt; subclassing.

Yeah, we should do that.

&gt; &gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:264
&gt; &gt; +CustomElementReactionStack::ElementQueue&amp; CustomElementReactionStack::ensureBackupQueue()
&gt; &gt; +{
&gt; &gt; +    auto&amp; queue = backupElementQueue();
&gt; &gt; +    if (queue)
&gt; &gt; +        return *queue; // If the processing the backup element queue flag is set, abort this algorithm.
&gt; &gt; +    queue = std::make_unique&lt;ElementQueue&gt;(); // Set the processing the backup element queue flag.
&gt; &gt; +    MicrotaskQueue::mainThreadQueue().append(std::make_unique&lt;BackupElementQueueMicrotask&gt;());
&gt; &gt; +    return *queue;
&gt; &gt; +}
&gt; 
&gt; I wonder if this would be easier to follow if there was an actual
&gt; &quot;processing the backup element queue&quot; boolean flag instead of using the
&gt; existence of backupElementQueue object. backupElementQueue could just stay
&gt; alive like normal global NeverDestroyed.

Done that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244101</commentid>
    <comment_count>6</comment_count>
      <attachid>292718</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-10-24 22:14:13 -0700</bug_when>
    <thetext>Created attachment 292718
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244124</commentid>
    <comment_count>7</comment_count>
      <attachid>292718</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-24 23:21:02 -0700</bug_when>
    <thetext>Comment on attachment 292718
Patch for landing

Clearing flags on attachment: 292718

Committed r207810: &lt;http://trac.webkit.org/changeset/207810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244125</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-24 23:21:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292580</attachid>
            <date>2016-10-23 21:48:08 -0700</date>
            <delta_ts>2016-10-24 22:14:08 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-163878-20161023214424.patch</filename>
            <type>text/plain</type>
            <size>40384</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJmMTk0Y2E2MDNjYWFi
ZWMzYjNlZTQ3MmE0NGVlOWMyOTk5MjFiZS4uNjI1YzJjNDExY2U2MzkwNTRiMTA5ZTI2MWFjYTU2
ZDhiNGFlMmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTEwLTIzICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEN1c3RvbSBlbGVtZW50cyBy
ZWFjdGlvbnMgc2hvdWxkIGhhdmUgYSBxdWV1ZSBwZXIgZWxlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgdGhlIGN1
c3RvbSBlbGVtZW50cyByZWFjdGlvbiBxdWV1ZSBpbnRvIHBlciBlbGVtZW50IHRvIG1hdGNoIHRo
ZSBsYXRlc3QgSFRNTCBzcGVjaWZpY2F0aW9uczoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rp
b24tcXVldWUKKyAgICAgICAgYW5kIGludHJvZHVjZXMgdGhlIGJhY2t1cCBlbGVtZW50IHF1ZXVl
OgorICAgICAgICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRp
bmcuaHRtbCNiYWNrdXAtZWxlbWVudC1xdWV1ZQorCisgICAgICAgIEluIHRlcm1zIG9mIGNvZGUg
Y2hhbmdlcywgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgbm93IGhvbGRzIG9udG8gRWxlbWVu
dFF1ZXVlLCBhbiBvcmRlcmVkIGxpc3Qgb2YgZWxlbWVudHMsCisgICAgICAgIGFuZCBtYWtlIGVh
Y2ggRWxlbWVudFJhcmVEYXRhIGtlZXAgaXRzIG93biBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS4gQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUgaXMgY3JlYXRlZAorICAgICAgICBmb3IgZWFj
aCBjdXN0b20gZWxlbWVudCB3aGVuIGl0IGlzIHN5bmNocm9ub3VzbHkgY29uc3RydWN0ZWQgb3Ig
ZW5xdWV1ZWQgdG8gdXBncmFkZS4KKworICAgICAgICBCZWNhdXNlIGVhY2ggcmVhY3Rpb24gcXVl
dWUgaXMgbm93IHNwZWNpZmljIHRvIGVhY2ggZWxlbWVudCwgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUgaW5zdGVhZCBvZgorICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0g
c3RvcmVzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS4KKworICAgICAgICBUaGUgYmFja3VwIGVs
ZW1lbnQgcXVldWUgaXMgY3JlYXRlZCBhcyBhIHNpbmdsZXRvbiByZXR1cm5lZCBieSBDdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjaydzIGJhY2t1cEVsZW1lbnRRdWV1ZSwKKyAgICAgICAgYW5kIGVu
c3VyZUJhY2t1cFF1ZXVlKCkgc2NoZWR1bGVzIGEgbmV3IG1pcm90YXNrIHRvIHByb2Nlc3MgdGhl
IGJhY2t1cCBxdWV1ZSB3aGVuIHRoZXJlIGlzbid0IGFscmVhZHkgb25lLgorCisgICAgICAgIGVu
c3VyZUN1cnJlbnRRdWV1ZSgpIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIGl0IGNhbgorICAgICAg
ICBmYWxsYmFjayB0byB0aGUgYmFja3VwIHF1ZXVlIHdoZW4gdGhlIHN0YWNrIGlzIGVtcHR5IGFz
IHNwZWNpZmllZDoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvc2NyaXB0aW5nLmh0bWwjZW5xdWV1ZS1hbi1lbGVtZW50LW9uLXRoZS1hcHByb3ByaWF0ZS1l
bGVtZW50LXF1ZXVlCisKKyAgICAgICAgTm90ZSB0aGF0IGVuc3VyZUN1cnJlbnRRdWV1ZSgpIG1h
eSBpbnNlcnQgdGhlIHNhbWUgZWxlbWVudCBtdWx0aXBsZSB0aW1lcyBpbnRvIHRoZSBlbGVtZW50
IHF1ZXVlIGZvciBub3cgc2luY2UKKyAgICAgICAgYXZvaWRpbmcgdGhpcyBkdXBsaWNhdGlvbiB3
b3VsZCByZXF1aXJlIGVpdGhlciBkb2luZyBPKG4pIGl0ZXJhdGlvbiBvbiBtX2VsZW1lbnRzIG9y
IGFkZGluZyBhIEhhc2hTZXQuCisgICAgICAgIFdlIGNhbiByZXZpc2l0IHRoaXMgaW4gdGhlIGZ1
dHVyZSBpZiB0aGUgcmVhY3Rpb24gcXVldWUgaXMgZm91bmQgdG8gZ3JvdyBiZXlvbmQgYSBmZXcg
ZW50cmllcyBzaW5jZSBlbGVtZW50cyBpbgorICAgICAgICB0aGUgZWxlbWVudCBxdWV1ZSB3aWxs
IGhhdmUgZHVwbGljYXRlcyBvbmx5IHdoZW4gZWFjaCByZWFjdGlvbiBxdWV1ZSBoYXMgbW9yZSB0
aGFuIG9uZSBpdGVtLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2N1c3RvbS1lbGVtZW50cy9iYWNr
dXAtZWxlbWVudC1xdWV1ZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2N1c3RvbS1lbGVtZW50
cy9jdXN0b20tZWxlbWVudC1yZWFjdGlvbi1xdWV1ZS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlND
dXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6aW52b2tl
KTogUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIGlzRmFpbGVkQ3VzdG9tRWxlbWVudCBzaW5jZSB0aGUg
cXVldWUKKyAgICAgICAgaXMgZXhwbGljaXRseSBjbGVhcmVkIGluIEVsZW1lbnQ6OnNldElzRmFp
bGVkQ3VzdG9tRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk6IE5vdyB0YWtlcyBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2Ugc2luY2UKKyAgICAgICAgZWFjaCBpdGVtIGluIHRoZSBxdWV1ZSBubyBs
b25nZXIgc3RvcmVzIEVsZW1lbnQgb3IgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3Jh
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVl
dWVFbGVtZW50VXBncmFkZUlmRGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVEaXNjb25u
ZWN0ZWRDYWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjplbnF1ZXVlQWRvcHRlZENhbGxiYWNrSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVBdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2tJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6ZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjppbnZva2VBbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OkVsZW1lbnRRdWV1ZTo6YWRkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6RWxlbWVu
dFF1ZXVlOjppbnZva2VBbGwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6
QmFja3VwRWxlbWVudFF1ZXVlTWljcm90YXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQmFja3VwUXVldWUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzQmFja3Vw
UXVldWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrOjpiYWNrdXBFbGVtZW50UXVldWUpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuaDoKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVVcGdyYWRlSW5TaGFkb3dJbmNsdWRpbmdU
cmVlT3JkZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGYWxsYmFja0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRJc0RlZmluZWRDdXN0b21FbGVtZW50KTog
Q3JlYXRlIGEgbmV3IHJlYWN0aW9uIHF1ZXVlIGlmIHRoZXJlIGlzbid0IGFscmVhZHkgb25lOyB3
aGVuCisgICAgICAgIHRoaXMgZWxlbWVudCBoYWQgYmVlbiB1cGdyYWRlZCwgdGhlIHJlYWN0aW9u
IHF1ZXVlIGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgaW4gRWxlbWVudDo6ZW5xdWV1ZVRvVXBn
cmFkZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldElzRmFpbGVkQ3VzdG9tRWxlbWVu
dCk6IENsZWFyIHRoZSByZWFjdGlvbiBxdWV1ZSB3aGVuIHRoZSB1cGdyYWRpbmcgaGFkIGZhaWxl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVucXVldWVUb1VwZ3JhZGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlYWN0aW9uUXVldWUpOiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6Y3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUpOiBSZXBsYWNlZCBjdXN0b21FbGVtZW50SW50ZXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFJhcmVEYXRhOjpzZXRDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk6IFJlcGxhY2Vk
IHNldEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLgorCiAyMDE2LTEwLTIzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigpIC8gcmVt
b3ZlRXZlbnRMaXN0ZW5lcigpIHNob3VsZCB1c2UgYSB1bmlvbiBmb3IgbGFzdCBwYXJhbWV0ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UuY3BwCmluZGV4IGFjNDUyZDllOGRmODAwNGU5NTljYTRhNDJhNDY4NjAyYmQwOWUw
MDMuLmZmM2YzMDE0YzFkZWI0OWM2YjgyMDUzYmZjYTUyN2VhOTE2NWY0YzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNl
LmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1
cGdyYWRlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVQb3N0VXBncmFkZVJlYWN0
aW9ucyhlbGVtZW50LCAqdGhpcyk7CisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVu
cXVldWVQb3N0VXBncmFkZVJlYWN0aW9ucyhlbGVtZW50KTsKIAogICAgIG1fY29uc3RydWN0aW9u
U3RhY2suYXBwZW5kKCZlbGVtZW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKaW5kZXggNjdkZjllZmU4NzFkMTBkMWQ5YjZiY2Zj
MTgyOTkxNTcyZGM1NmJjYS4uYTYxOTk5NzIzMDNmZWVkMTk1YmM4MTJmMzVjYmU5NTQ4Zjg4NGU0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CkBAIC01MCw1NyArNTEsNDcg
QEAgcHVibGljOgogICAgICAgICBBdHRyaWJ1dGVDaGFuZ2VkLAogICAgIH07CiAKLSAgICBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0oVHlwZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCisgICAgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWVJdGVtKFR5cGUgdHlwZSkKICAgICAgICAgOiBtX3R5cGUodHlwZSkK
LSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX2ludGVyZmFjZShlbGVt
ZW50SW50ZXJmYWNlKQogICAgIHsgfQogCi0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJ
dGVtKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVudElu
dGVyZmFjZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisg
ICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKERvY3VtZW50JiBvbGREb2N1bWVudCwg
RG9jdW1lbnQmIG5ld0RvY3VtZW50KQogICAgICAgICA6IG1fdHlwZShUeXBlOjpBZG9wdGVkKQot
ICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1faW50ZXJmYWNlKGVsZW1l
bnRJbnRlcmZhY2UpCiAgICAgICAgICwgbV9vbGREb2N1bWVudCgmb2xkRG9jdW1lbnQpCiAgICAg
ICAgICwgbV9uZXdEb2N1bWVudCgmbmV3RG9jdW1lbnQpCiAgICAgeyB9CiAKLSAgICBDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0oRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld1ZhbHVlKQorICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogICAgICAgICA6IG1fdHlwZShUeXBlOjpBdHRy
aWJ1dGVDaGFuZ2VkKQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1f
aW50ZXJmYWNlKGVsZW1lbnRJbnRlcmZhY2UpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVOYW1lKGF0
dHJpYnV0ZU5hbWUpCiAgICAgICAgICwgbV9vbGRWYWx1ZShvbGRWYWx1ZSkKICAgICAgICAgLCBt
X25ld1ZhbHVlKG5ld1ZhbHVlKQogICAgIHsgfQogCi0gICAgdm9pZCBpbnZva2UoKQorICAgIHZv
aWQgaW52b2tlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxl
bWVudEludGVyZmFjZSkKICAgICB7Ci0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzRmFpbGVkQ3Vz
dG9tRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgICAgICBjYXNlIFR5cGU6OkVsZW1lbnRVcGdyYWRlOgotICAgICAgICAgICAgbV9p
bnRlcmZhY2UtPnVwZ3JhZGVFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBl
bGVtZW50SW50ZXJmYWNlLnVwZ3JhZGVFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVHlwZTo6Q29ubmVjdGVkOgotICAgICAgICAgICAgbV9pbnRlcmZh
Y2UtPmludm9rZUNvbm5lY3RlZENhbGxiYWNrKG1fZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAg
ICBlbGVtZW50SW50ZXJmYWNlLmludm9rZUNvbm5lY3RlZENhbGxiYWNrKGVsZW1lbnQpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RGlzY29ubmVjdGVkOgotICAgICAg
ICAgICAgbV9pbnRlcmZhY2UtPmludm9rZURpc2Nvbm5lY3RlZENhbGxiYWNrKG1fZWxlbWVudC5n
ZXQoKSk7CisgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLmludm9rZURpc2Nvbm5lY3RlZENh
bGxiYWNrKGVsZW1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6
QWRvcHRlZDoKLSAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VBZG9wdGVkQ2FsbGJhY2so
bV9lbGVtZW50LmdldCgpLCAqbV9vbGREb2N1bWVudCwgKm1fbmV3RG9jdW1lbnQpOworICAgICAg
ICAgICAgZWxlbWVudEludGVyZmFjZS5pbnZva2VBZG9wdGVkQ2FsbGJhY2soZWxlbWVudCwgKm1f
b2xkRG9jdW1lbnQsICptX25ld0RvY3VtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFR5cGU6OkF0dHJpYnV0ZUNoYW5nZWQ6CiAgICAgICAgICAgICBBU1NFUlQobV9hdHRy
aWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VBdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2sobV9lbGVtZW50LmdldCgpLCBtX2F0dHJpYnV0ZU5hbWUudmFsdWUoKSwgbV9v
bGRWYWx1ZSwgbV9uZXdWYWx1ZSk7CisgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLmludm9r
ZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUudmFsdWUo
KSwgbV9vbGRWYWx1ZSwgbV9uZXdWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKLSAgICBSZWY8RWxlbWVudD4g
bV9lbGVtZW50OwotICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNl
OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9vbGREb2N1bWVudDsKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fbmV3RG9jdW1lbnQ7CiAgICAgT3B0aW9uYWw8UXVhbGlmaWVkTmFtZT4gbV9hdHRyaWJ1
dGVOYW1lOwpAQCAtMTA4LDcgKzk5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9u
ZXdWYWx1ZTsKIH07CiAKLUN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSgpCitDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6Q3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNl
KQorICAgIDogbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKIHsgfQogCiBDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZTo6fkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKCkKQEAgLTExNiwx
MSArMTA4LDE1IEBAIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjp+Q3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUoKQogICAgIEFTU0VSVChtX2l0ZW1zLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50
JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCit2
b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpjbGVhcigpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQudGFnUU5hbWUoKSA9PSBlbGVtZW50SW50ZXJmYWNlLm5hbWUoKSk7Ci0gICAgaWYgKGF1
dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1
ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlSXRlbTo6VHlwZTo6RWxlbWVudFVwZ3JhZGUsIGVsZW1lbnQsIGVsZW1lbnRJbnRlcmZh
Y2V9KTsKKyAgICBtX2l0ZW1zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiBlbGVtZW50KQoreworICAg
IGF1dG8mIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRR
dWV1ZShlbGVtZW50KTsKKyAgICBxdWV1ZS5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWVJdGVtOjpUeXBlOjpFbGVtZW50VXBncmFkZX0pOwogfQogCiB2b2lkIEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmluZWQoRWxl
bWVudCYgZWxlbWVudCkKQEAgLTEzOSw5NyArMTM1LDEwMiBAQCB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmluZWQoRWxlbWVudCYgZWxl
bWVudAogICAgIGlmICghZWxlbWVudEludGVyZmFjZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlKTsKKyAgICBl
bGVtZW50LmVucXVldWVUb1VwZ3JhZGUoKmVsZW1lbnRJbnRlcmZhY2UpOwogfQogCiB2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRl
ZChFbGVtZW50JiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50LmlzRGVmaW5lZEN1c3Rv
bUVsZW1lbnQoKSk7Ci0gICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9IGVsZW1lbnQuY3VzdG9t
RWxlbWVudEludGVyZmFjZSgpOwotICAgIEFTU0VSVChlbGVtZW50SW50ZXJmYWNlKTsKLSAgICBp
ZiAoIWVsZW1lbnRJbnRlcmZhY2UtPmhhc0Nvbm5lY3RlZENhbGxiYWNrKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
OjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtD
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW06OlR5cGU6OkNvbm5lY3RlZCwgZWxlbWVudCwg
KmVsZW1lbnRJbnRlcmZhY2V9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYgKHF1ZXVlLm1f
aW50ZXJmYWNlLT5oYXNDb25uZWN0ZWRDYWxsYmFjaygpKQorICAgICAgICBxdWV1ZS5tX2l0ZW1z
LmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBlOjpDb25uZWN0ZWR9
KTsKIH0KIAogdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZURpc2Nvbm5l
Y3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxl
bWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpOwotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZh
Y2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKTsKLSAgICBBU1NFUlQoZWxlbWVu
dEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5oYXNEaXNjb25uZWN0ZWRD
YWxsYmFjaygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCi0gICAgICAgIHF1
ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBl
OjpEaXNjb25uZWN0ZWQsIGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlfSk7CisgICAgYXV0byYg
cXVldWUgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKGVs
ZW1lbnQpOworICAgIGlmIChxdWV1ZS5tX2ludGVyZmFjZS0+aGFzRGlzY29ubmVjdGVkQ2FsbGJh
Y2soKSkKKyAgICAgICAgcXVldWUubV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlSXRlbTo6VHlwZTo6RGlzY29ubmVjdGVkfSk7CiB9CiAKIHZvaWQgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OmVucXVldWVBZG9wdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBl
bGVtZW50LCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZWxlbWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpOwotICAgIGF1dG8q
IGVsZW1lbnRJbnRlcmZhY2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKTsKLSAg
ICBBU1NFUlQoZWxlbWVudEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5o
YXNBZG9wdGVkQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHF1
ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQot
ICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe2VsZW1lbnQsICplbGVtZW50SW50ZXJmYWNl
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnR9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYg
KHF1ZXVlLm1faW50ZXJmYWNlLT5oYXNBZG9wdGVkQ2FsbGJhY2soKSkKKyAgICAgICAgcXVldWUu
bV9pdGVtcy5hcHBlbmQoe29sZERvY3VtZW50LCBuZXdEb2N1bWVudH0pOwogfQogCiB2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNr
SWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdWYWx1ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkp
OwotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRl
cmZhY2UoKTsKLSAgICBBU1NFUlQoZWxlbWVudEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50
SW50ZXJmYWNlLT5vYnNlcnZlc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVt
cy5hcHBlbmQoe2VsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlLCBhdHRyaWJ1dGVOYW1lLCBvbGRW
YWx1ZSwgbmV3VmFsdWV9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYgKHF1ZXVlLm1faW50
ZXJmYWNlLT5vYnNlcnZlc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSkKKyAg
ICAgICAgcXVldWUubV9pdGVtcy5hcHBlbmQoe2F0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlLCBuZXdW
YWx1ZX0pOwogfQogCi12b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlUG9z
dFVwZ3JhZGVSZWFjdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlJiBlbGVtZW50SW50ZXJmYWNlKQordm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6
ZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKEVsZW1lbnQmIGVsZW1lbnQpCiB7CisgICAgQVNT
RVJUKGVsZW1lbnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKTsKICAgICBpZiAo
IWVsZW1lbnQuaGFzQXR0cmlidXRlcygpICYmICFlbGVtZW50LmluRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
azo6ZW5zdXJlQ3VycmVudFF1ZXVlKCk7Ci0gICAgaWYgKCFxdWV1ZSkKLSAgICAgICAgcmV0dXJu
OworICAgIGF1dG8qIHF1ZXVlID0gZWxlbWVudC5yZWFjdGlvblF1ZXVlKCk7CisgICAgQVNTRVJU
KHF1ZXVlKTsKIAogICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewogICAgICAgICBm
b3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAg
ICAgICAgICAgIGlmIChlbGVtZW50SW50ZXJmYWNlLm9ic2VydmVzQXR0cmlidXRlKGF0dHJpYnV0
ZS5sb2NhbE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtl
bGVtZW50LCBlbGVtZW50SW50ZXJmYWNlLCBhdHRyaWJ1dGUubmFtZSgpLCBudWxsQXRvbSwgYXR0
cmlidXRlLnZhbHVlKCl9KTsKKyAgICAgICAgICAgIGlmIChxdWV1ZS0+bV9pbnRlcmZhY2UtPm9i
c2VydmVzQXR0cmlidXRlKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSkpCisgICAgICAgICAgICAgICAg
cXVldWUtPm1faXRlbXMuYXBwZW5kKHthdHRyaWJ1dGUubmFtZSgpLCBudWxsQXRvbSwgYXR0cmli
dXRlLnZhbHVlKCl9KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChlbGVtZW50LmluRG9j
dW1lbnQoKSAmJiBlbGVtZW50SW50ZXJmYWNlLmhhc0Nvbm5lY3RlZENhbGxiYWNrKCkpCi0gICAg
ICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVt
OjpUeXBlOjpDb25uZWN0ZWQsIGVsZW1lbnQsIGVsZW1lbnRJbnRlcmZhY2V9KTsKKyAgICBpZiAo
ZWxlbWVudC5pbkRvY3VtZW50KCkgJiYgcXVldWUtPm1faW50ZXJmYWNlLT5oYXNDb25uZWN0ZWRD
YWxsYmFjaygpKQorICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlSXRlbTo6VHlwZTo6Q29ubmVjdGVkfSk7CiB9CiAKLXZvaWQgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6Omludm9rZUFsbCgpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjppbnZva2VBbGwoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBxdWV1ZSBuZWVkcyB0byBiZSBwZXIgZWxlbWVudC4KICAgICB3aGlsZSAoIW1faXRlbXMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIFZlY3RvcjxDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0+
IGl0ZW1zID0gV1RGTW92ZShtX2l0ZW1zKTsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRl
bXMpCi0gICAgICAgICAgICBpdGVtLmludm9rZSgpOworICAgICAgICAgICAgaXRlbS5pbnZva2Uo
ZWxlbWVudCwgbV9pbnRlcmZhY2UuZ2V0KCkpOwogICAgIH0KIH0KIAotQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUqIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVl
dWUoKQoraW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OkVsZW1lbnRRdWV1
ZTo6YWRkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZWFybHkgZXhp
dCBpbmRpY2F0ZXMgYSBidWcgdGhhdCBzb21lIERPTSBBUEkgaXMgbWlzc2luZyBDRVJlYWN0aW9u
cwotICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAvLyBGSVhNRTogQXZvaWQgaW5zZXJ0aW5nIHRoZSBzYW1lIGVsZW1lbnQgbXVs
dGlwbGUgdGltZXMuCisgICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Cit9CisKK2lubGlu
ZSB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpFbGVtZW50UXVldWU6Omludm9rZUFs
bCgpCit7CisgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CisgICAgZWxlbWVudHMu
c3dhcChtX2VsZW1lbnRzKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewor
ICAgICAgICBhdXRvKiBxdWV1ZSA9IGVsZW1lbnQtPnJlYWN0aW9uUXVldWUoKTsKKyAgICAgICAg
QVNTRVJUKHF1ZXVlKTsKKyAgICAgICAgcXVldWUtPmludm9rZUFsbChlbGVtZW50LmdldCgpKTsK
KyAgICB9CisgICAgQVNTRVJUKG1fZWxlbWVudHMuaXNFbXB0eSgpKTsKK30KKworQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJy
ZW50UXVldWUoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlv
blF1ZXVlKCkpOworICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKSB7CisgICAgICAg
IGF1dG8mIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUJhY2t1cFF1
ZXVlKCk7CisgICAgICAgIHF1ZXVlLmFkZChlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuICplbGVt
ZW50LnJlYWN0aW9uUXVldWUoKTsKKyAgICB9CiAKICAgICBhdXRvKiYgcXVldWUgPSBzX2N1cnJl
bnRQcm9jZXNzaW5nU3RhY2stPm1fcXVldWU7CiAgICAgaWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEg
cmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNvZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjay4KLSAgICAgICAgcXVldWUgPSBuZXcgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlOworICAgICAgICBxdWV1ZSA9IG5ldyBF
bGVtZW50UXVldWU7CisgICAgcXVldWUtPmFkZChlbGVtZW50KTsKKyAgICByZXR1cm4gKmVsZW1l
bnQucmVhY3Rpb25RdWV1ZSgpOwogfQogCiBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayogQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9IG51bGxw
dHI7CkBAIC0yNDIsNiArMjQzLDM5IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6
OnByb2Nlc3NRdWV1ZSgpCiAgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9CiAKK2NsYXNzIEJhY2t1
cEVsZW1lbnRRdWV1ZU1pY3JvdGFzayBmaW5hbCA6IHB1YmxpYyBNaWNyb3Rhc2sgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHJpdmF0ZToKKyAgICBSZXN1bHQgcnVuKCkgZmluYWwK
KyAgICB7CisgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzQmFja3Vw
UXVldWUoKTsKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6RG9uZTsKKyAgICB9Cit9OworCitDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjazo6RWxlbWVudFF1ZXVlJiBDdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjazo6ZW5zdXJlQmFja3VwUXVldWUoKQoreworICAgIGF1dG8mIHF1ZXVlID0gYmFja3Vw
RWxlbWVudFF1ZXVlKCk7CisgICAgaWYgKHF1ZXVlKQorICAgICAgICByZXR1cm4gKnF1ZXVlOyAv
LyBJZiB0aGUgcHJvY2Vzc2luZyB0aGUgYmFja3VwIGVsZW1lbnQgcXVldWUgZmxhZyBpcyBzZXQs
IGFib3J0IHRoaXMgYWxnb3JpdGhtLgorICAgIHF1ZXVlID0gc3RkOjptYWtlX3VuaXF1ZTxFbGVt
ZW50UXVldWU+KCk7IC8vIFNldCB0aGUgcHJvY2Vzc2luZyB0aGUgYmFja3VwIGVsZW1lbnQgcXVl
dWUgZmxhZy4KKyAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8QmFja3VwRWxlbWVudFF1ZXVlTWljcm90YXNrPigpKTsKKyAgICByZXR1
cm4gKnF1ZXVlOworfQorCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNz
QmFja3VwUXVldWUoKQoreworICAgIGF1dG8mIHF1ZXVlID0gYmFja3VwRWxlbWVudFF1ZXVlKCk7
CisgICAgcXVldWUtPmludm9rZUFsbCgpOworICAgIHF1ZXVlID0gbnVsbHB0cjsgLy8gVW5zZXQg
dGhlIHByb2Nlc3NpbmcgdGhlIGJhY2t1cCBlbGVtZW50IHF1ZXVlIGZsYWcuCit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6RWxlbWVudFF1ZXVlPiYgQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmJhY2t1cEVsZW1lbnRRdWV1ZSgpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UXVldWU+PiBxdWV1ZTsK
KyAgICByZXR1cm4gcXVldWU7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCmluZGV4IDc3ZjA2MDcwMjRhOTNmYzM5
MTY1MmYyYjAzOWEyMTA0NGFiMzczNmEuLmY3YmFjYTM0M2EzZDliMjMxYWMwYzI3YWUyMTMyZTEw
M2U3ZWIwNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5oCkBAIC00MiwyMCArNDIsMjIgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNz
IEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk7CiBwdWJsaWM6Ci0gICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUoKTsKKyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZShKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UmKTsKICAgICB+Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiwgSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlJik7CisgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRVcGdyYWRl
KEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmlu
ZWQoRWxlbWVudCYpOwogICAgIHN0YXRpYyB2b2lkIGVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lm
TmVlZGVkKEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlRGlzY29ubmVjdGVkQ2Fs
bGJhY2tJZk5lZWRlZChFbGVtZW50Jik7CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUFkb3B0ZWRD
YWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50
JiBuZXdEb2N1bWVudCk7CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZUNoYW5nZWRD
YWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7Ci0gICAg
c3RhdGljIHZvaWQgZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKEVsZW1lbnQmLCBKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UmKTsKKyAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlUG9zdFVwZ3JhZGVS
ZWFjdGlvbnMoRWxlbWVudCYpOwogCi0gICAgdm9pZCBpbnZva2VBbGwoKTsKKyAgICB2b2lkIGlu
dm9rZUFsbChFbGVtZW50Jik7CisgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgorICAgIFJl
ZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0+IG1faXRlbXM7CiB9OwogCkBAIC03NCwxNSArNzYs
MjggQEAgcHVibGljOgogICAgICAgICBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sgPSBtX3ByZXZp
b3VzUHJvY2Vzc2luZ1N0YWNrOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIHJlZmVyZW5jZSBvbmNlICJlbnN1cmUiIHN0YXJ0cyB0byB3b3JrLgotICAgIHN0YXRpYyBD
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogZW5zdXJlQ3VycmVudFF1ZXVlKCk7CisgICAgc3Rh
dGljIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlJiBlbnN1cmVDdXJyZW50UXVldWUoRWxlbWVu
dCYpOwogCiAgICAgc3RhdGljIGJvb2wgaGFzQ3VycmVudFByb2Nlc3NpbmdTdGFjaygpIHsgcmV0
dXJuIHNfY3VycmVudFByb2Nlc3NpbmdTdGFjazsgfQogCisgICAgc3RhdGljIHZvaWQgcHJvY2Vz
c0JhY2t1cFF1ZXVlKCk7CisKIHByaXZhdGU6CisgICAgY2xhc3MgRWxlbWVudFF1ZXVlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZvaWQgYWRkKEVsZW1lbnQmKTsKKyAgICAgICAgdm9pZCBpbnZv
a2VBbGwoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IG1f
ZWxlbWVudHM7CisgICAgfTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1F1ZXVl
KCk7CiAKLSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogbV9xdWV1ZSB7IG51bGxwdHIg
fTsKKyAgICBzdGF0aWMgRWxlbWVudFF1ZXVlJiBlbnN1cmVCYWNrdXBRdWV1ZSgpOworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RWxlbWVudFF1ZXVlPiYgYmFja3VwRWxlbWVudFF1ZXVlKCk7
CisKKyAgICBFbGVtZW50UXVldWUqIG1fcXVldWUgeyBudWxscHRyIH07CiAgICAgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uU3RhY2sqIG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2s7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sqIHNfY3VycmVudFBy
b2Nlc3NpbmdTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3Ry
eS5jcHAKaW5kZXggODFmN2NhMTcyMzdlNzE4ODIyYzU4MTFjOTBlYWY1N2I3NTE3YWJkMi4uZjk4
NGY5MTZmYWE2MGM4ZTM0OGJlZjZiN2I4OWZhZTUxM2ZjMTc2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGlj
IHZvaWQgZW5xdWV1ZVVwZ3JhZGVJblNoYWRvd0luY2x1ZGluZ1RyZWVPcmRlcihDb250YWluZXJO
b2RlJiBub2RlLCBKU0N1c3QKIHsKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50
VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihub2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHQoKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LT5pc0N1c3Rv
bUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCkgJiYgZWxlbWVudC0+dGFnUU5hbWUoKSA9PSBlbGVt
ZW50SW50ZXJmYWNlLm5hbWUoKSkKLSAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGUoKmVsZW1lbnQsIGVsZW1lbnRJbnRlcmZhY2UpOwor
ICAgICAgICAgICAgZWxlbWVudC0+ZW5xdWV1ZVRvVXBncmFkZShlbGVtZW50SW50ZXJmYWNlKTsK
ICAgICAgICAgaWYgKGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5zaGFkb3dSb290KCkpIHsK
ICAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgIT0gU2hhZG93Um9vdDo6TW9kZTo6
VXNlckFnZW50KQogICAgICAgICAgICAgICAgIGVucXVldWVVcGdyYWRlSW5TaGFkb3dJbmNsdWRp
bmdUcmVlT3JkZXIoKnNoYWRvd1Jvb3QsIGVsZW1lbnRJbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggMTEwZTY0NzkxMThmOTFhYzQ1ZmQwMTRiNTg3MzBlNzQwMmQ3ZGY4OS4u
MzQwOGI3YjY5ZTM4OWNhNTg2MzVmMmFhYWMyMGM5NzIwNGU4OTIxNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC0xMDc1LDggKzEwNzUsNyBAQCBzdGF0aWMgUmVmPEhUTUxFbGVtZW50PiBj
cmVhdGVGYWxsYmFja0hUTUxFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUXVhbAog
ICAgICAgICBpZiAoVU5MSUtFTFkocmVnaXN0cnkpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byog
ZWxlbWVudEludGVyZmFjZSA9IHJlZ2lzdHJ5LT5maW5kSW50ZXJmYWNlKG5hbWUpKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShuYW1lLCBkb2N1
bWVudCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0SXNDdXN0b21FbGVtZW50VXBncmFk
ZUNhbmRpZGF0ZSgpOwotICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
OjplbnF1ZXVlRWxlbWVudFVwZ3JhZGUoZWxlbWVudC5nZXQoKSwgKmVsZW1lbnRJbnRlcmZhY2Up
OworICAgICAgICAgICAgICAgIGVsZW1lbnQtPmVucXVldWVUb1VwZ3JhZGUoKmVsZW1lbnRJbnRl
cmZhY2UpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZGJiYmQxNGJjZjQ4YzkzNjkwMTkz
ZWVmMjdjYWEyM2VjNzc2Y2FhNi4uODczYWEzYTZmNTU5OWYxYzA1ZjMxMTNmODQ0OTRmYmJmOWEw
ZGRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTkwMiwxNSArMTkwMiwyMiBAQCB2b2lk
IEVsZW1lbnQ6OnNldElzRGVmaW5lZEN1c3RvbUVsZW1lbnQoSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlJiBlbGVtZW50SW50ZXJmYQogewogICAgIGNsZWFyRmxhZyhJc0VkaXRpbmdUZXh0T3JVbmRl
ZmluZWRDdXN0b21FbGVtZW50RmxhZyk7CiAgICAgc2V0RmxhZyhJc0N1c3RvbUVsZW1lbnQpOwot
ICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoZWxl
bWVudEludGVyZmFjZSk7CisgICAgYXV0byYgZGF0YSA9IGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgp
OworICAgIGlmICghZGF0YS5jdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpKQorICAgICAgICBk
YXRhLnNldEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKHN0ZDo6bWFrZV91bmlxdWU8Q3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU+KGVsZW1lbnRJbnRlcmZhY2UpKTsKIH0KIAotdm9pZCBFbGVt
ZW50OjpzZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBl
bGVtZW50SW50ZXJmYWNlKQordm9pZCBFbGVtZW50OjpzZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQo
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJikKIHsKICAgICBBU1NFUlQoaXNVbmRlZmluZWRDdXN0
b21FbGVtZW50KCkpOwogICAgIEFTU0VSVChnZXRGbGFnKElzRWRpdGluZ1RleHRPclVuZGVmaW5l
ZEN1c3RvbUVsZW1lbnRGbGFnKSk7CiAgICAgY2xlYXJGbGFnKElzQ3VzdG9tRWxlbWVudCk7Ci0g
ICAgZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkuc2V0Q3VzdG9tRWxlbWVudEludGVyZmFjZShlbGVt
ZW50SW50ZXJmYWNlKTsKKworICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7CisgICAgICAgIC8vIENs
ZWFyIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRlbGV0aW5nIGl0IHNpbmNlIHRoaXMgZnVuY3Rpb24g
Y2FuIGJlIGNhbGxlZCBpbnNpZGUgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6Omludm9rZUFs
bCBkdXJpbmcgdXBncmFkZXMuCisgICAgICAgIGlmIChhdXRvKiBxdWV1ZSA9IGVsZW1lbnRSYXJl
RGF0YSgpLT5jdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpKQorICAgICAgICAgICAgcXVldWUt
PmNsZWFyKCk7CisgICAgfQogfQogCiB2b2lkIEVsZW1lbnQ6OnNldElzQ3VzdG9tRWxlbWVudFVw
Z3JhZGVDYW5kaWRhdGUoKQpAQCAtMTkyMCwxMiArMTkyNywyNSBAQCB2b2lkIEVsZW1lbnQ6OnNl
dElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKQogICAgIHNldEZsYWcoSXNFZGl0aW5n
VGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxlbWVudEZsYWcpOwogfQogCi1KU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UqIEVsZW1lbnQ6OmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKSBjb25zdAordm9pZCBF
bGVtZW50OjplbnF1ZXVlVG9VcGdyYWRlKEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVu
dEludGVyZmFjZSkKK3sKKyAgICBBU1NFUlQoIWlzRGVmaW5lZEN1c3RvbUVsZW1lbnQoKSAmJiAh
aXNGYWlsZWRDdXN0b21FbGVtZW50KCkpOworICAgIHNldEZsYWcoSXNDdXN0b21FbGVtZW50KTsK
KyAgICBzZXRGbGFnKElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVsZW1lbnRGbGFnKTsK
KworICAgIGF1dG8mIGRhdGEgPSBlbnN1cmVFbGVtZW50UmFyZURhdGEoKTsKKyAgICBBU1NFUlQo
IWRhdGEuY3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKSk7CisKKyAgICBkYXRhLnNldEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlKHN0ZDo6bWFrZV91bmlxdWU8Q3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU+KGVsZW1lbnRJbnRlcmZhY2UpKTsKKyAgICBkYXRhLmN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlKCktPmVucXVldWVFbGVtZW50VXBncmFkZSgqdGhpcyk7Cit9CisKK0N1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlKiBFbGVtZW50OjpyZWFjdGlvblF1ZXVlKCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXNEZWZpbmVk
Q3VzdG9tRWxlbWVudCgpIHx8IGlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKSk7CiAg
ICAgaWYgKCFoYXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gZWxlbWVudFJhcmVEYXRhKCktPmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKTsKKyAgICByZXR1
cm4gZWxlbWVudFJhcmVEYXRhKCktPmN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKCk7CiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggYzZlNTg5OTY0YjJhZjU4NzVjNjNjYWFlYzc2
NDAyNWUyOWU5YTM5ZC4uYTFiZDMwMTUxNGQ3ZjUyNWZkMGJhY2EzMzYyZTdjMjU3ZmFlOWUwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ2xpZW50UmVjdDsKIGNsYXNzIENsaWVudFJlY3RMaXN0OworY2xhc3MgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWU7CiBjbGFzcyBEYXRhc2V0RE9NU3RyaW5nTWFwOwogY2xhc3Mg
RGljdGlvbmFyeTsKIGNsYXNzIERPTVRva2VuTGlzdDsKQEAgLTI4NCw3ICsyODUsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJc0RlZmluZWRDdXN0b21FbGVtZW50KEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSYpOwogICAgIHZvaWQgc2V0SXNGYWlsZWRDdXN0b21FbGVtZW50KEpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZSYpOwogICAgIHZvaWQgc2V0SXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRp
ZGF0ZSgpOwotICAgIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogY3VzdG9tRWxlbWVudEludGVy
ZmFjZSgpIGNvbnN0OworICAgIHZvaWQgZW5xdWV1ZVRvVXBncmFkZShKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UmKTsKKyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogcmVhY3Rpb25RdWV1
ZSgpIGNvbnN0OwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgbm90IGJlIHZp
cnR1YWwsIGRvIG5vdCBvdmVycmlkZSB0aGlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0
YS5oCmluZGV4IDg0YTIxODkzZWExOTdmMzY2M2UzM2ZkZWZlMzkxNjQ0YTFmZjk5ZDIuLjI1Yjhl
ZmVjMGY1ZWI4Y2M2NmRjYTFmNDM3ZWRhN2I3OWMxMmI4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFJhcmVEYXRhLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgRWxlbWVudFJhcmVEYXRh
X2gKICNkZWZpbmUgRWxlbWVudFJhcmVEYXRhX2gKIAorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCiAjaW5jbHVkZSAiRGF0
YXNldERPTVN0cmluZ01hcC5oIgogI2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5o
IgpAQCAtOTUsOCArOTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaGFkb3dSb290KFJlZlB0
cjxTaGFkb3dSb290PiYmIHNoYWRvd1Jvb3QpIHsgbV9zaGFkb3dSb290ID0gV1RGTW92ZShzaGFk
b3dSb290KTsgfQogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLSAgICBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UqIGN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKSB7IHJldHVybiBtX2N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEN1c3RvbUVsZW1lbnRJbnRl
cmZhY2UoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBjdXN0b21FbGVtZW50SW50ZXJmYWNlKSB7
IG1fY3VzdG9tRWxlbWVudEludGVyZmFjZSA9ICZjdXN0b21FbGVtZW50SW50ZXJmYWNlOyB9Cisg
ICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUqIGN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
KCkgeyByZXR1cm4gbV9jdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5nZXQoKTsgfQorICAgIHZv
aWQgc2V0Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoc3RkOjp1bmlxdWVfcHRyPEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlPiYmIHF1ZXVlKSB7IG1fY3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUgPSBXVEZNb3ZlKHF1ZXVlKTsgfQogI2VuZGlmCiAKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZU1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOyB9CkBAIC0xNTYs
NyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NVG9rZW5MaXN0PiBt
X2NsYXNzTGlzdDsKICAgICBSZWZQdHI8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290OwogI2lmIEVO
QUJMRShDVVNUT01fRUxFTUVOVFMpCi0gICAgUmVmUHRyPEpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZT4gbV9jdXN0b21FbGVtZW50SW50ZXJmYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZT4gbV9jdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTsKICNlbmRp
ZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxOYW1lZE5vZGVNYXA+IG1fYXR0cmlidXRlTWFwOwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggZDU5ODVlZjY5OWI0YzVkODkzYTFhMzljYTMwYmY3MzhkYWZlMmEzZS4uOTQyNTQ4MmEz
ODQzOWEwNTE4ZmNmZWVkZDg5NDMzYWY1ZjRkM2U0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDE2LTEwLTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEN1
c3RvbSBlbGVtZW50cyByZWFjdGlvbnMgc2hvdWxkIGhhdmUgYSBxdWV1ZSBwZXIgZWxlbWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBX
M0Mgc3R5bGUgdGVzdGhhcm5lc3MuanMgdGVzdCBmb3IgbWFraW5nIHN1cmUgdGhlIGN1c3RvbSBl
bGVtZW50IHJlYWN0aW9uIHF1ZXVlIGV4aXN0cyBwZXIgZWxlbWVudCwKKyAgICAgICAgYW5kIGFk
ZGVkIGEgV2ViS2l0IHN0eWxlIHRlc3QgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIGJhY2t1cCBl
bGVtZW50IHF1ZXVlIGV4aXN0cy4KKworICAgICAgICAqIGZhc3QvY3VzdG9tLWVsZW1lbnRzL2Jh
Y2t1cC1lbGVtZW50LXF1ZXVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
dXN0b20tZWxlbWVudHMvYmFja3VwLWVsZW1lbnQtcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20t
ZWxlbWVudC1yZWFjdGlvbi1xdWV1ZS5odG1sOiBBZGRlZC4KKwogMjAxNi0xMC0yMyAgWmFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIERvIG5vdCB1cGRhdGUgc2VsZWN0
aW9uIHJlY3Qgb24gZGlydHkgbGluZWJveGVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jdXN0b20tZWxlbWVudHMvYmFja3VwLWVsZW1lbnQtcXVldWUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvYmFja3VwLWVsZW1lbnQtcXVldWUtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzZjcwNTkyOGNjYmM5ZmE5YjRhYThhNzhmNWRkOGRhZjNmNTc1
ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9i
YWNrdXAtZWxlbWVudC1xdWV1ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0
ZXN0cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBiYWNrdXAgZWxlbWVudCBxdWV1ZS4gVG8gbWFudWFs
bHkgdGVzdCwgcHJlc3MgdGhlIGRlbGV0ZSBrZXkgb25jZSB0aGUgcGFnZSBpcyBsb2FkZWQuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGNvbnN0cnVjdGVkIGlzIGZhbHNl
CitQQVNTIGVkaXRvci5pbm5lckhUTUwgPSAiYTx0ZXN0LWVsZW1lbnQ+YjwvdGVzdC1lbGVtZW50
PmMiOyBjb25zdHJ1Y3RlZCBpcyB0cnVlCitQQVNTIGVkaXRvci5mb2N1cygpOyBnZXRTZWxlY3Rp
b24oKS5zZWxlY3RBbGxDaGlsZHJlbihlZGl0b3IpOyBkaXNjb25uZWN0ZWQgaXMgZmFsc2UKK1BB
U1MgIkJlZm9yZSB0aGUgZW5kIG9mIHRoZSBtaWNybyB0YXNrIjsgZGlzY29ubmVjdGVkIGlzIGZh
bHNlCitQQVNTICJBdCB0aGUgZW5kIG9mIHRoZSBtaWNybyB0YXNrIjsgZGlzY29ubmVjdGVkIGlz
IHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVsZW1lbnRzL2JhY2t1cC1l
bGVtZW50LXF1ZXVlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9iYWNr
dXAtZWxlbWVudC1xdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4YjczNjdlZjlmMGUzNjUyNzBlY2E3
M2M1YTE0MjRmMWFhOTExZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2N1
c3RvbS1lbGVtZW50cy9iYWNrdXAtZWxlbWVudC1xdWV1ZS5odG1sCkBAIC0wLDAgKzEsNTEgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJlZGl0b3IiIGNvbnRlbnRlZGl0
YWJsZT48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHRoZSBleGlz
dGVuY2Ugb2YgdGhlIGJhY2t1cCBlbGVtZW50IHF1ZXVlLiBUbyBtYW51YWxseSB0ZXN0LCBwcmVz
cyB0aGUgZGVsZXRlIGtleSBvbmNlIHRoZSBwYWdlIGlzIGxvYWRlZC4nKTsKKwordmFyIGpzVGVz
dElzQXN5bmMgPSB0cnVlOworCit2YXIgY29uc3RydWN0ZWQgPSBmYWxzZTsKK3ZhciBkaXNjb25u
ZWN0ZWQgPSBmYWxzZTsKK2NsYXNzIFRlc3RFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQgewor
ICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICBzdXBlcigpOworICAgICAgICBjb25zdHJ1Y3Rl
ZCA9IHRydWU7CisgICAgfQorICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgeworICAgICAgICBk
aXNjb25uZWN0ZWQgPSB0cnVlOworICAgIH0KK30KK2N1c3RvbUVsZW1lbnRzLmRlZmluZSgndGVz
dC1lbGVtZW50JywgVGVzdEVsZW1lbnQpOworCit2YXIgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2VkaXRvcicpOworc2hvdWxkQmUoJ2NvbnN0cnVjdGVkJywgJ2ZhbHNlJyk7Citz
aG91bGRCZSgnZWRpdG9yLmlubmVySFRNTCA9ICJhPHRlc3QtZWxlbWVudD5iPC90ZXN0LWVsZW1l
bnQ+YyI7IGNvbnN0cnVjdGVkJywgJ3RydWUnKTsKK3Nob3VsZEJlKCdlZGl0b3IuZm9jdXMoKTsg
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZWRpdG9yKTsgZGlzY29ubmVjdGVkJywg
J2ZhbHNlJyk7CisKK2Z1bmN0aW9uIGNoZWNrRGlzY29ubmVjdGVkQXRFbmRPZk1pY3RvdGFzaygp
Cit7CisgICAgc2hvdWxkQmUoJyJCZWZvcmUgdGhlIGVuZCBvZiB0aGUgbWljcm8gdGFzayI7IGRp
c2Nvbm5lY3RlZCcsICdmYWxzZScpOworICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rp
b24gKCkgeworICAgICAgICBzaG91bGRCZSgnIkF0IHRoZSBlbmQgb2YgdGhlIG1pY3JvIHRhc2si
OyBkaXNjb25uZWN0ZWQnLCAndHJ1ZScpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
KTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5leGVjQ29t
bWFuZCgnZGVsZXRlJywgZmFsc2UsIG51bGwpOworICAgIGNoZWNrRGlzY29ubmVjdGVkQXRFbmRP
Zk1pY3RvdGFzaygpOworfSBlbHNlIHsKKyAgICBlZGl0b3Iub25pbnB1dCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgY2hlY2tEaXNjb25uZWN0ZWRBdEVuZE9mTWljdG90YXNrKCk7CisgICAgfQor
fQorCisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1l
bnQtcmVhY3Rpb24tcXVldWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNTBkNGZjMmEyYTMw
Y2QyZjlmOGUxNjQ4ZTgyZTFkNmRhYmRjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxlbWVudC1yZWFjdGlvbi1xdWV1ZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKK1BBU1MgVXBncmFkaW5nIGEgY3VzdG9tIGVsZW1l
bnQgbXVzdCBpbnZva2UgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIGFuZCBjb25uZWN0ZWRDYWxs
YmFjayBiZWZvcmUgc3RhcnQgdXBncmFkaW5nIGFub3RoZXIgZWxlbWVudCAKK1BBU1MgTXV0YXRp
bmcgYSB1bmRlZmluZWQgY3VzdG9tIGVsZW1lbnQgd2hpbGUgdXBncmFkaW5nIGEgY3VzdG9tIGVs
ZW1lbnQgbXVzdCBub3QgZW5xdWV1ZSBvciBpbnZva2UgcmVhY3Rpb25zIG9uIHRoZSBtdXRhdGVk
IGVsZW1lbnQgCitQQVNTIE11dGF0aW5nIGFub3RoZXIgY3VzdG9tIGVsZW1lbnQgaW5zaWRlIGFk
b3B0ZWQgY2FsbGJhY2sgbXVzdCBpbnZva2UgYWxsIHBlbmRpbmcgY2FsbGJhY2tzIG9uIHRoZSBt
dXRhdGVkIGVsZW1lbnQgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVs
ZW1lbnRzL2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uLXF1ZXVlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxlbWVudC1yZWFjdGlvbi1xdWV1ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE1NDY0NDBiM2M0OTRiZDAzNDQzMzE0N2NlODM3OTBmMjZjN2ExMWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxl
bWVudC1yZWFjdGlvbi1xdWV1ZS5odG1sCkBAIC0wLDAgKzEsMTgxIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Q3VzdG9tIEVsZW1lbnRzOiBFYWNoIGVsZW1lbnQg
bXVzdCBoYXZlIGl0cyBvd24gY3VzdG9tIGVsZW1lbnQgcmVhY3Rpb24gcXVldWU8L3RpdGxlPgor
PG1ldGEgbmFtZT0iYXV0aG9yIiB0aXRsZT0iUnlvc3VrZSBOaXdhIiBocmVmPSJtYWlsdG86cm5p
d2FAd2Via2l0Lm9yZyI+Cis8bWV0YSBuYW1lPSJhc3NlcnQiIGNvbnRlbnQ9IkVhY2ggZWxlbWVu
dCBtdXN0IGhhdmUgaXRzIG93biBjdXN0b20gZWxlbWVudCByZWFjdGlvbiBxdWV1ZSI+Cis8bWV0
YSBuYW1lPSJoZWxwIiBjb250ZW50PSJodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRp
cGFnZS9zY3JpcHRpbmcuaHRtbCNjdXN0b20tZWxlbWVudC1yZWFjdGlvbi1xdWV1ZSI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3VzdG9t
LWVsZW1lbnRzL3Jlc291cmNlcy9jdXN0b20tZWxlbWVudHMtaGVscGVycy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgorCitmdW5j
dGlvbiBjcmVhdGVfY29uc3RydWN0b3JfbG9nKGVsZW1lbnQpIHsKKyAgICByZXR1cm4ge3R5cGU6
ICdjb25zdHJ1Y3RlZCcsIGVsZW1lbnQ6IGVsZW1lbnR9OworfQorCitmdW5jdGlvbiBhc3NlcnRf
Y29uc3RydWN0b3JfbG9nX2VudHJ5KGxvZywgZWxlbWVudCkgeworICAgIGFzc2VydF9lcXVhbHMo
bG9nLnR5cGUsICdjb25zdHJ1Y3RlZCcpOworICAgIGFzc2VydF9lcXVhbHMobG9nLmVsZW1lbnQs
IGVsZW1lbnQpOworfQorCitmdW5jdGlvbiBhc3NlcnRfYWRvcHRlZF9sb2dfZW50cnkobG9nLCBl
bGVtZW50KSB7CisgICAgYXNzZXJ0X2VxdWFscyhsb2cudHlwZSwgJ2Fkb3B0ZWQnKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGxvZy5lbGVtZW50LCBlbGVtZW50KTsKK30KKworZnVuY3Rpb24gY3JlYXRl
X2Fkb3B0ZWRfY2FsbGJhY2tfbG9nKGVsZW1lbnQpIHsKKyAgICByZXR1cm4ge3R5cGU6ICdhZG9w
dGVkJywgZWxlbWVudDogZWxlbWVudH07Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZV9jb25uZWN0ZWRf
Y2FsbGJhY2tfbG9nKGVsZW1lbnQpIHsKKyAgICByZXR1cm4ge3R5cGU6ICdjb25uZWN0ZWQnLCBl
bGVtZW50OiBlbGVtZW50fTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X2Nvbm5lY3RlZF9sb2dfZW50
cnkobG9nLCBlbGVtZW50KSB7CisgICAgYXNzZXJ0X2VxdWFscyhsb2cudHlwZSwgJ2Nvbm5lY3Rl
ZCcpOworICAgIGFzc2VydF9lcXVhbHMobG9nLmVsZW1lbnQsIGVsZW1lbnQpOworfQorCit0ZXN0
X3dpdGhfd2luZG93KGZ1bmN0aW9uIChjb250ZW50V2luZG93KSB7CisgICAgY29uc3QgY29udGVu
dERvY3VtZW50ID0gY29udGVudFdpbmRvdy5kb2N1bWVudDsKKyAgICBjb250ZW50RG9jdW1lbnQu
d3JpdGUoJzx0ZXN0LWVsZW1lbnQgaWQ9ImZpcnN0LWVsZW1lbnQiPicpOworICAgIGNvbnRlbnRE
b2N1bWVudC53cml0ZSgnPHRlc3QtZWxlbWVudCBpZD0ic2Vjb25kLWVsZW1lbnQiPicpOworCisg
ICAgY29uc3QgZWxlbWVudDEgPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0
LWVsZW1lbnQnKTsKKyAgICBjb25zdCBlbGVtZW50MiA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2Vjb25kLWVsZW1lbnQnKTsKKyAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQ
cm90b3R5cGVPZihlbGVtZW50MSksIGNvbnRlbnRXaW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBl
KTsKKyAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbGVtZW50MiksIGNv
bnRlbnRXaW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlKTsKKworICAgIGxldCBsb2cgPSBbXTsK
KyAgICBjbGFzcyBUZXN0RWxlbWVudCBleHRlbmRzIGNvbnRlbnRXaW5kb3cuSFRNTEVsZW1lbnQg
eworICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAg
ICAgICBsb2cucHVzaChjcmVhdGVfY29uc3RydWN0b3JfbG9nKHRoaXMpKTsKKyAgICAgICAgfQor
ICAgICAgICBjb25uZWN0ZWRDYWxsYmFjayguLi5hcmdzKSB7CisgICAgICAgICAgICBsb2cucHVz
aChjcmVhdGVfY29ubmVjdGVkX2NhbGxiYWNrX2xvZyh0aGlzLCAuLi5hcmdzKSk7CisgICAgICAg
IH0KKyAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKC4uLmFyZ3MpIHsKKyAgICAgICAg
ICAgIGxvZy5wdXNoKGNyZWF0ZV9hdHRyaWJ1dGVfY2hhbmdlZF9jYWxsYmFja19sb2codGhpcywg
Li4uYXJncykpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1
dGVzKCkgeyByZXR1cm4gWydpZCddOyB9CisgICAgfQorICAgIGNvbnRlbnRXaW5kb3cuY3VzdG9t
RWxlbWVudHMuZGVmaW5lKCd0ZXN0LWVsZW1lbnQnLCBUZXN0RWxlbWVudCk7CisgICAgYXNzZXJ0
X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudDEpLCBUZXN0RWxlbWVudC5wcm90
b3R5cGUpOworICAgIGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQy
KSwgVGVzdEVsZW1lbnQucHJvdG90eXBlKTsKKworICAgIGFzc2VydF9lcXVhbHMobG9nLmxlbmd0
aCwgNik7CisgICAgYXNzZXJ0X2NvbnN0cnVjdG9yX2xvZ19lbnRyeShsb2dbMF0sIGVsZW1lbnQx
KTsKKyAgICBhc3NlcnRfYXR0cmlidXRlX2xvZ19lbnRyeShsb2dbMV0sIHtuYW1lOiAnaWQnLCBv
bGRWYWx1ZTogbnVsbCwgbmV3VmFsdWU6ICdmaXJzdC1lbGVtZW50JywgbmFtZXNwYWNlOiBudWxs
fSk7CisgICAgYXNzZXJ0X2Nvbm5lY3RlZF9sb2dfZW50cnkobG9nWzJdLCBlbGVtZW50MSk7Cisg
ICAgYXNzZXJ0X2NvbnN0cnVjdG9yX2xvZ19lbnRyeShsb2dbM10sIGVsZW1lbnQyKTsKKyAgICBh
c3NlcnRfYXR0cmlidXRlX2xvZ19lbnRyeShsb2dbNF0sIHtuYW1lOiAnaWQnLCBvbGRWYWx1ZTog
bnVsbCwgbmV3VmFsdWU6ICdzZWNvbmQtZWxlbWVudCcsIG5hbWVzcGFjZTogbnVsbH0pOworICAg
IGFzc2VydF9jb25uZWN0ZWRfbG9nX2VudHJ5KGxvZ1s1XSwgZWxlbWVudDIpOworfSwgJ1VwZ3Jh
ZGluZyBhIGN1c3RvbSBlbGVtZW50IG11c3QgaW52b2tlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFj
ayBhbmQgY29ubmVjdGVkQ2FsbGJhY2sgYmVmb3JlIHN0YXJ0IHVwZ3JhZGluZyBhbm90aGVyIGVs
ZW1lbnQnKTsKKwordGVzdF93aXRoX3dpbmRvdyhmdW5jdGlvbiAoY29udGVudFdpbmRvdykgewor
ICAgIGNvbnN0IGNvbnRlbnREb2N1bWVudCA9IGNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CisgICAg
Y29udGVudERvY3VtZW50LndyaXRlKCc8dGVzdC1lbGVtZW50IGlkPSJmaXJzdC1lbGVtZW50Ij4n
KTsKKyAgICBjb250ZW50RG9jdW1lbnQud3JpdGUoJzx0ZXN0LWVsZW1lbnQgaWQ9InNlY29uZC1l
bGVtZW50Ij4nKTsKKworICAgIGNvbnN0IGVsZW1lbnQxID0gY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdmaXJzdC1lbGVtZW50Jyk7CisgICAgY29uc3QgZWxlbWVudDIgPSBjb250ZW50
RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZC1lbGVtZW50Jyk7CisgICAgYXNzZXJ0X2Vx
dWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudDEpLCBjb250ZW50V2luZG93LkhUTUxF
bGVtZW50LnByb3RvdHlwZSk7CisgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBl
T2YoZWxlbWVudDIpLCBjb250ZW50V2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSk7CisKKyAg
ICBsZXQgbG9nID0gW107CisgICAgY2xhc3MgVGVzdEVsZW1lbnQgZXh0ZW5kcyBjb250ZW50V2lu
ZG93LkhUTUxFbGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgICAgICBz
dXBlcigpOworICAgICAgICAgICAgbG9nLnB1c2goY3JlYXRlX2NvbnN0cnVjdG9yX2xvZyh0aGlz
KSk7CisgICAgICAgICAgICBpZiAodGhpcyA9PSBlbGVtZW50MSkKKyAgICAgICAgICAgICAgICBl
bGVtZW50Mi5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2ZvbycpOworICAgICAgICB9CisgICAgICAg
IGNvbm5lY3RlZENhbGxiYWNrKC4uLmFyZ3MpIHsKKyAgICAgICAgICAgIGxvZy5wdXNoKGNyZWF0
ZV9jb25uZWN0ZWRfY2FsbGJhY2tfbG9nKHRoaXMsIC4uLmFyZ3MpKTsKKyAgICAgICAgfQorICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soLi4uYXJncykgeworICAgICAgICAgICAgbG9n
LnB1c2goY3JlYXRlX2F0dHJpYnV0ZV9jaGFuZ2VkX2NhbGxiYWNrX2xvZyh0aGlzLCAuLi5hcmdz
KSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7
IHJldHVybiBbJ2lkJywgJ2NsYXNzJ107IH0KKyAgICB9CisgICAgY29udGVudFdpbmRvdy5jdXN0
b21FbGVtZW50cy5kZWZpbmUoJ3Rlc3QtZWxlbWVudCcsIFRlc3RFbGVtZW50KTsKKyAgICBhc3Nl
cnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbGVtZW50MSksIFRlc3RFbGVtZW50LnBy
b3RvdHlwZSk7CisgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVu
dDIpLCBUZXN0RWxlbWVudC5wcm90b3R5cGUpOworCisgICAgYXNzZXJ0X2VxdWFscyhsb2cubGVu
Z3RoLCA3KTsKKyAgICBhc3NlcnRfY29uc3RydWN0b3JfbG9nX2VudHJ5KGxvZ1swXSwgZWxlbWVu
dDEpOworICAgIGFzc2VydF9hdHRyaWJ1dGVfbG9nX2VudHJ5KGxvZ1sxXSwge25hbWU6ICdpZCcs
IG9sZFZhbHVlOiBudWxsLCBuZXdWYWx1ZTogJ2ZpcnN0LWVsZW1lbnQnLCBuYW1lc3BhY2U6IG51
bGx9KTsKKyAgICBhc3NlcnRfY29ubmVjdGVkX2xvZ19lbnRyeShsb2dbMl0sIGVsZW1lbnQxKTsK
KyAgICBhc3NlcnRfY29uc3RydWN0b3JfbG9nX2VudHJ5KGxvZ1szXSwgZWxlbWVudDIpOworICAg
IGFzc2VydF9hdHRyaWJ1dGVfbG9nX2VudHJ5KGxvZ1s0XSwge25hbWU6ICdpZCcsIG9sZFZhbHVl
OiBudWxsLCBuZXdWYWx1ZTogJ3NlY29uZC1lbGVtZW50JywgbmFtZXNwYWNlOiBudWxsfSk7Cisg
ICAgYXNzZXJ0X2F0dHJpYnV0ZV9sb2dfZW50cnkobG9nWzVdLCB7bmFtZTogJ2NsYXNzJywgb2xk
VmFsdWU6IG51bGwsIG5ld1ZhbHVlOiAnZm9vJywgbmFtZXNwYWNlOiBudWxsfSk7CisgICAgYXNz
ZXJ0X2Nvbm5lY3RlZF9sb2dfZW50cnkobG9nWzZdLCBlbGVtZW50Mik7Cit9LCAnTXV0YXRpbmcg
YSB1bmRlZmluZWQgY3VzdG9tIGVsZW1lbnQgd2hpbGUgdXBncmFkaW5nIGEgY3VzdG9tIGVsZW1l
bnQgbXVzdCBub3QgZW5xdWV1ZSBvciBpbnZva2UgcmVhY3Rpb25zIG9uIHRoZSBtdXRhdGVkIGVs
ZW1lbnQnKTsKKwordGVzdF93aXRoX3dpbmRvdyhmdW5jdGlvbiAoY29udGVudFdpbmRvdykgewor
ICAgIGxldCBsb2cgPSBbXTsKKyAgICBsZXQgZWxlbWVudDE7CisgICAgbGV0IGVsZW1lbnQyOwor
ICAgIGNsYXNzIFRlc3RFbGVtZW50IGV4dGVuZHMgY29udGVudFdpbmRvdy5IVE1MRWxlbWVudCB7
CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAg
ICAgIGxvZy5wdXNoKGNyZWF0ZV9jb25zdHJ1Y3Rvcl9sb2codGhpcykpOworICAgICAgICB9Cisg
ICAgICAgIGFkb3B0ZWRDYWxsYmFjayguLi5hcmdzKSB7CisgICAgICAgICAgICBsb2cucHVzaChj
cmVhdGVfYWRvcHRlZF9jYWxsYmFja19sb2codGhpcywgLi4uYXJncykpOworICAgICAgICAgICAg
aWYgKHRoaXMgPT0gZWxlbWVudDEpCisgICAgICAgICAgICAgICAgZWxlbWVudDMuc2V0QXR0cmli
dXRlKCdpZCcsICdmb28nKTsKKyAgICAgICAgfQorICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygu
Li5hcmdzKSB7CisgICAgICAgICAgICBsb2cucHVzaChjcmVhdGVfY29ubmVjdGVkX2NhbGxiYWNr
X2xvZyh0aGlzLCAuLi5hcmdzKSk7CisgICAgICAgIH0KKyAgICAgICAgYXR0cmlidXRlQ2hhbmdl
ZENhbGxiYWNrKC4uLmFyZ3MpIHsKKyAgICAgICAgICAgIGxvZy5wdXNoKGNyZWF0ZV9hdHRyaWJ1
dGVfY2hhbmdlZF9jYWxsYmFja19sb2codGhpcywgLi4uYXJncykpOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydpZCcsICdjbGFz
cyddOyB9CisgICAgfQorCisgICAgY29udGVudFdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUo
J3Rlc3QtZWxlbWVudCcsIFRlc3RFbGVtZW50KTsKKworICAgIGxldCBjb250ZW50RG9jdW1lbnQg
PSBjb250ZW50V2luZG93LmRvY3VtZW50OworICAgIGVsZW1lbnQxID0gY29udGVudERvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3Rlc3QtZWxlbWVudCcpOworICAgIGVsZW1lbnQyID0gY29udGVudERv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rlc3QtZWxlbWVudCcpOworICAgIGVsZW1lbnQzID0gY29u
dGVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rlc3QtZWxlbWVudCcpOworICAgIGFzc2VydF9l
cXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQxKSwgVGVzdEVsZW1lbnQucHJvdG90
eXBlKTsKKyAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbGVtZW50Miks
IFRlc3RFbGVtZW50LnByb3RvdHlwZSk7CisgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJv
dG90eXBlT2YoZWxlbWVudDMpLCBUZXN0RWxlbWVudC5wcm90b3R5cGUpOworCisgICAgYXNzZXJ0
X2VxdWFscyhsb2cubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnRfY29uc3RydWN0b3JfbG9nX2VudHJ5
KGxvZ1swXSwgZWxlbWVudDEpOworICAgIGFzc2VydF9jb25zdHJ1Y3Rvcl9sb2dfZW50cnkobG9n
WzFdLCBlbGVtZW50Mik7CisgICAgYXNzZXJ0X2NvbnN0cnVjdG9yX2xvZ19lbnRyeShsb2dbMl0s
IGVsZW1lbnQzKTsKKyAgICBsb2cgPSBbXTsKKworICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRl
bnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoZWxlbWVudDEpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50Mik7CisgICAg
Y29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQzKTsKKworICAgIGNvbnN0IGFub3RoZXJEb2N1
bWVudCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpOworICAg
IGFub3RoZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsK
KworICAgIGFzc2VydF9lcXVhbHMobG9nLmxlbmd0aCwgNyk7CisgICAgYXNzZXJ0X2Fkb3B0ZWRf
bG9nX2VudHJ5KGxvZ1swXSwgZWxlbWVudDEpOworICAgIGFzc2VydF9hZG9wdGVkX2xvZ19lbnRy
eShsb2dbMV0sIGVsZW1lbnQzKTsKKyAgICBhc3NlcnRfY29ubmVjdGVkX2xvZ19lbnRyeShsb2db
Ml0sIGVsZW1lbnQzKTsKKyAgICBhc3NlcnRfYXR0cmlidXRlX2xvZ19lbnRyeShsb2dbM10sIHtu
YW1lOiAnaWQnLCBvbGRWYWx1ZTogbnVsbCwgbmV3VmFsdWU6ICdmb28nLCBuYW1lc3BhY2U6IG51
bGx9KTsKKyAgICBhc3NlcnRfY29ubmVjdGVkX2xvZ19lbnRyeShsb2dbNF0sIGVsZW1lbnQxKTsK
KyAgICBhc3NlcnRfYWRvcHRlZF9sb2dfZW50cnkobG9nWzVdLCBlbGVtZW50Mik7CisgICAgYXNz
ZXJ0X2Nvbm5lY3RlZF9sb2dfZW50cnkobG9nWzZdLCBlbGVtZW50Mik7CisKK30sICdNdXRhdGlu
ZyBhbm90aGVyIGN1c3RvbSBlbGVtZW50IGluc2lkZSBhZG9wdGVkIGNhbGxiYWNrIG11c3QgaW52
b2tlIGFsbCBwZW5kaW5nIGNhbGxiYWNrcyBvbiB0aGUgbXV0YXRlZCBlbGVtZW50Jyk7CisKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292718</attachid>
            <date>2016-10-24 22:14:13 -0700</date>
            <delta_ts>2016-10-24 23:21:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163878-20161024221027.patch</filename>
            <type>text/plain</type>
            <size>40190</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJmMTk0Y2E2MDNjYWFi
ZWMzYjNlZTQ3MmE0NGVlOWMyOTk5MjFiZS4uNTNjOTFjMDE5OWY3OWE3M2JjZGVkNTcyZGExMGQ2
ZTA0ZThkM2ZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTEwLTIzICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEN1c3RvbSBlbGVtZW50cyBy
ZWFjdGlvbnMgc2hvdWxkIGhhdmUgYSBxdWV1ZSBwZXIgZWxlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgdGhlIGN1
c3RvbSBlbGVtZW50cyByZWFjdGlvbiBxdWV1ZSBpbnRvIHBlciBlbGVtZW50IHRvIG1hdGNoIHRo
ZSBsYXRlc3QgSFRNTCBzcGVjaWZpY2F0aW9uczoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rp
b24tcXVldWUKKyAgICAgICAgYW5kIGludHJvZHVjZXMgdGhlIGJhY2t1cCBlbGVtZW50IHF1ZXVl
OgorICAgICAgICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRp
bmcuaHRtbCNiYWNrdXAtZWxlbWVudC1xdWV1ZQorCisgICAgICAgIEluIHRlcm1zIG9mIGNvZGUg
Y2hhbmdlcywgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgbm93IGhvbGRzIG9udG8gRWxlbWVu
dFF1ZXVlLCBhbiBvcmRlcmVkIGxpc3Qgb2YgZWxlbWVudHMsCisgICAgICAgIGFuZCBtYWtlIGVh
Y2ggRWxlbWVudFJhcmVEYXRhIGtlZXAgaXRzIG93biBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS4gQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUgaXMgY3JlYXRlZAorICAgICAgICBmb3IgZWFj
aCBjdXN0b20gZWxlbWVudCB3aGVuIGl0IGlzIHN5bmNocm9ub3VzbHkgY29uc3RydWN0ZWQgb3Ig
ZW5xdWV1ZWQgdG8gdXBncmFkZS4KKworICAgICAgICBCZWNhdXNlIGVhY2ggcmVhY3Rpb24gcXVl
dWUgaXMgbm93IHNwZWNpZmljIHRvIGVhY2ggZWxlbWVudCwgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUgaW5zdGVhZCBvZgorICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0g
c3RvcmVzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS4KKworICAgICAgICBUaGUgYmFja3VwIGVs
ZW1lbnQgcXVldWUgaXMgY3JlYXRlZCBhcyBhIHNpbmdsZXRvbiByZXR1cm5lZCBieSBDdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjaydzIGJhY2t1cEVsZW1lbnRRdWV1ZSwKKyAgICAgICAgYW5kIGVu
c3VyZUJhY2t1cFF1ZXVlKCkgc2NoZWR1bGVzIGEgbmV3IG1pcm90YXNrIHRvIHByb2Nlc3MgdGhl
IGJhY2t1cCBxdWV1ZSB3aGVuIHRoZXJlIGlzbid0IGFscmVhZHkgb25lLgorCisgICAgICAgIGVu
c3VyZUN1cnJlbnRRdWV1ZSgpIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIGl0IGNhbgorICAgICAg
ICBmYWxsYmFjayB0byB0aGUgYmFja3VwIHF1ZXVlIHdoZW4gdGhlIHN0YWNrIGlzIGVtcHR5IGFz
IHNwZWNpZmllZDoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvc2NyaXB0aW5nLmh0bWwjZW5xdWV1ZS1hbi1lbGVtZW50LW9uLXRoZS1hcHByb3ByaWF0ZS1l
bGVtZW50LXF1ZXVlCisKKyAgICAgICAgTm90ZSB0aGF0IGVuc3VyZUN1cnJlbnRRdWV1ZSgpIG1h
eSBpbnNlcnQgdGhlIHNhbWUgZWxlbWVudCBtdWx0aXBsZSB0aW1lcyBpbnRvIHRoZSBlbGVtZW50
IHF1ZXVlIGZvciBub3cgc2luY2UKKyAgICAgICAgYXZvaWRpbmcgdGhpcyBkdXBsaWNhdGlvbiB3
b3VsZCByZXF1aXJlIGVpdGhlciBkb2luZyBPKG4pIGl0ZXJhdGlvbiBvbiBtX2VsZW1lbnRzIG9y
IGFkZGluZyBhIEhhc2hTZXQuCisgICAgICAgIFdlIGNhbiByZXZpc2l0IHRoaXMgaW4gdGhlIGZ1
dHVyZSBpZiB0aGUgcmVhY3Rpb24gcXVldWUgaXMgZm91bmQgdG8gZ3JvdyBiZXlvbmQgYSBmZXcg
ZW50cmllcyBzaW5jZSBlbGVtZW50cyBpbgorICAgICAgICB0aGUgZWxlbWVudCBxdWV1ZSB3aWxs
IGhhdmUgZHVwbGljYXRlcyBvbmx5IHdoZW4gZWFjaCByZWFjdGlvbiBxdWV1ZSBoYXMgbW9yZSB0
aGFuIG9uZSBpdGVtLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2N1c3RvbS1lbGVtZW50cy9iYWNr
dXAtZWxlbWVudC1xdWV1ZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2N1c3RvbS1lbGVtZW50
cy9jdXN0b20tZWxlbWVudC1yZWFjdGlvbi1xdWV1ZS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlND
dXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudCk6CisgICAgICAgICogZG9tL0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6aW52b2tl
KTogUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIGlzRmFpbGVkQ3VzdG9tRWxlbWVudCBzaW5jZSB0aGUg
cXVldWUKKyAgICAgICAgaXMgZXhwbGljaXRseSBjbGVhcmVkIGluIEVsZW1lbnQ6OnNldElzRmFp
bGVkQ3VzdG9tRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk6IE5vdyB0YWtlcyBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2Ugc2luY2UKKyAgICAgICAgZWFjaCBpdGVtIGluIHRoZSBxdWV1ZSBubyBs
b25nZXIgc3RvcmVzIEVsZW1lbnQgb3IgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3Jh
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVl
dWVFbGVtZW50VXBncmFkZUlmRGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVEaXNjb25u
ZWN0ZWRDYWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjplbnF1ZXVlQWRvcHRlZENhbGxiYWNrSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVBdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2tJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6ZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjppbnZva2VBbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OkVsZW1lbnRRdWV1ZTo6YWRkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6RWxlbWVu
dFF1ZXVlOjppbnZva2VBbGwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6
QmFja3VwRWxlbWVudFF1ZXVlTWljcm90YXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQmFja3VwUXVldWUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzQmFja3Vw
UXVldWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrOjpiYWNrdXBFbGVtZW50UXVldWUpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuaDoKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVVcGdyYWRlSW5TaGFkb3dJbmNsdWRpbmdU
cmVlT3JkZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGYWxsYmFja0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRJc0RlZmluZWRDdXN0b21FbGVtZW50KTog
Q3JlYXRlIGEgbmV3IHJlYWN0aW9uIHF1ZXVlIGlmIHRoZXJlIGlzbid0IGFscmVhZHkgb25lOyB3
aGVuCisgICAgICAgIHRoaXMgZWxlbWVudCBoYWQgYmVlbiB1cGdyYWRlZCwgdGhlIHJlYWN0aW9u
IHF1ZXVlIGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgaW4gRWxlbWVudDo6ZW5xdWV1ZVRvVXBn
cmFkZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldElzRmFpbGVkQ3VzdG9tRWxlbWVu
dCk6IENsZWFyIHRoZSByZWFjdGlvbiBxdWV1ZSB3aGVuIHRoZSB1cGdyYWRpbmcgaGFkIGZhaWxl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVucXVldWVUb1VwZ3JhZGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlYWN0aW9uUXVldWUpOiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6Y3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUpOiBSZXBsYWNlZCBjdXN0b21FbGVtZW50SW50ZXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFJhcmVEYXRhOjpzZXRDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSk6IFJlcGxhY2Vk
IHNldEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLgorCiAyMDE2LTEwLTIzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigpIC8gcmVt
b3ZlRXZlbnRMaXN0ZW5lcigpIHNob3VsZCB1c2UgYSB1bmlvbiBmb3IgbGFzdCBwYXJhbWV0ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UuY3BwCmluZGV4IGFjNDUyZDllOGRmODAwNGU5NTljYTRhNDJhNDY4NjAyYmQwOWUw
MDMuLmZmM2YzMDE0YzFkZWI0OWM2YjgyMDUzYmZjYTUyN2VhOTE2NWY0YzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNl
LmNwcApAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1
cGdyYWRlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVQb3N0VXBncmFkZVJlYWN0
aW9ucyhlbGVtZW50LCAqdGhpcyk7CisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVu
cXVldWVQb3N0VXBncmFkZVJlYWN0aW9ucyhlbGVtZW50KTsKIAogICAgIG1fY29uc3RydWN0aW9u
U3RhY2suYXBwZW5kKCZlbGVtZW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKaW5kZXggNjdkZjllZmU4NzFkMTBkMWQ5YjZiY2Zj
MTgyOTkxNTcyZGM1NmJjYS4uYWU4OThmZmVmMjY0ZTNiOGZmMzhhNDNmMWU4OGYwM2Y0MDRhMjY0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIk1pY3JvdGFza3MuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CkBAIC01MCw1NyArNTEsNDcg
QEAgcHVibGljOgogICAgICAgICBBdHRyaWJ1dGVDaGFuZ2VkLAogICAgIH07CiAKLSAgICBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0oVHlwZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCisgICAgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWVJdGVtKFR5cGUgdHlwZSkKICAgICAgICAgOiBtX3R5cGUodHlwZSkK
LSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX2ludGVyZmFjZShlbGVt
ZW50SW50ZXJmYWNlKQogICAgIHsgfQogCi0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJ
dGVtKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVudElu
dGVyZmFjZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisg
ICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKERvY3VtZW50JiBvbGREb2N1bWVudCwg
RG9jdW1lbnQmIG5ld0RvY3VtZW50KQogICAgICAgICA6IG1fdHlwZShUeXBlOjpBZG9wdGVkKQot
ICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1faW50ZXJmYWNlKGVsZW1l
bnRJbnRlcmZhY2UpCiAgICAgICAgICwgbV9vbGREb2N1bWVudCgmb2xkRG9jdW1lbnQpCiAgICAg
ICAgICwgbV9uZXdEb2N1bWVudCgmbmV3RG9jdW1lbnQpCiAgICAgeyB9CiAKLSAgICBDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0oRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld1ZhbHVlKQorICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogICAgICAgICA6IG1fdHlwZShUeXBlOjpBdHRy
aWJ1dGVDaGFuZ2VkKQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1f
aW50ZXJmYWNlKGVsZW1lbnRJbnRlcmZhY2UpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVOYW1lKGF0
dHJpYnV0ZU5hbWUpCiAgICAgICAgICwgbV9vbGRWYWx1ZShvbGRWYWx1ZSkKICAgICAgICAgLCBt
X25ld1ZhbHVlKG5ld1ZhbHVlKQogICAgIHsgfQogCi0gICAgdm9pZCBpbnZva2UoKQorICAgIHZv
aWQgaW52b2tlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxl
bWVudEludGVyZmFjZSkKICAgICB7Ci0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzRmFpbGVkQ3Vz
dG9tRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgICAgICBjYXNlIFR5cGU6OkVsZW1lbnRVcGdyYWRlOgotICAgICAgICAgICAgbV9p
bnRlcmZhY2UtPnVwZ3JhZGVFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBl
bGVtZW50SW50ZXJmYWNlLnVwZ3JhZGVFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVHlwZTo6Q29ubmVjdGVkOgotICAgICAgICAgICAgbV9pbnRlcmZh
Y2UtPmludm9rZUNvbm5lY3RlZENhbGxiYWNrKG1fZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAg
ICBlbGVtZW50SW50ZXJmYWNlLmludm9rZUNvbm5lY3RlZENhbGxiYWNrKGVsZW1lbnQpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6RGlzY29ubmVjdGVkOgotICAgICAg
ICAgICAgbV9pbnRlcmZhY2UtPmludm9rZURpc2Nvbm5lY3RlZENhbGxiYWNrKG1fZWxlbWVudC5n
ZXQoKSk7CisgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLmludm9rZURpc2Nvbm5lY3RlZENh
bGxiYWNrKGVsZW1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZTo6
QWRvcHRlZDoKLSAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VBZG9wdGVkQ2FsbGJhY2so
bV9lbGVtZW50LmdldCgpLCAqbV9vbGREb2N1bWVudCwgKm1fbmV3RG9jdW1lbnQpOworICAgICAg
ICAgICAgZWxlbWVudEludGVyZmFjZS5pbnZva2VBZG9wdGVkQ2FsbGJhY2soZWxlbWVudCwgKm1f
b2xkRG9jdW1lbnQsICptX25ld0RvY3VtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFR5cGU6OkF0dHJpYnV0ZUNoYW5nZWQ6CiAgICAgICAgICAgICBBU1NFUlQobV9hdHRy
aWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VBdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2sobV9lbGVtZW50LmdldCgpLCBtX2F0dHJpYnV0ZU5hbWUudmFsdWUoKSwgbV9v
bGRWYWx1ZSwgbV9uZXdWYWx1ZSk7CisgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLmludm9r
ZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUudmFsdWUo
KSwgbV9vbGRWYWx1ZSwgbV9uZXdWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAogcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKLSAgICBSZWY8RWxlbWVudD4g
bV9lbGVtZW50OwotICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNl
OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9vbGREb2N1bWVudDsKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fbmV3RG9jdW1lbnQ7CiAgICAgT3B0aW9uYWw8UXVhbGlmaWVkTmFtZT4gbV9hdHRyaWJ1
dGVOYW1lOwpAQCAtMTA4LDcgKzk5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9u
ZXdWYWx1ZTsKIH07CiAKLUN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSgpCitDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6Q3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNl
KQorICAgIDogbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKIHsgfQogCiBDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZTo6fkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKCkKQEAgLTExNiwx
MSArMTA4LDE1IEBAIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjp+Q3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUoKQogICAgIEFTU0VSVChtX2l0ZW1zLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50
JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCit2
b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpjbGVhcigpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQudGFnUU5hbWUoKSA9PSBlbGVtZW50SW50ZXJmYWNlLm5hbWUoKSk7Ci0gICAgaWYgKGF1
dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1
ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlSXRlbTo6VHlwZTo6RWxlbWVudFVwZ3JhZGUsIGVsZW1lbnQsIGVsZW1lbnRJbnRlcmZh
Y2V9KTsKKyAgICBtX2l0ZW1zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiBlbGVtZW50KQoreworICAg
IGF1dG8mIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRR
dWV1ZShlbGVtZW50KTsKKyAgICBxdWV1ZS5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWVJdGVtOjpUeXBlOjpFbGVtZW50VXBncmFkZX0pOwogfQogCiB2b2lkIEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmluZWQoRWxl
bWVudCYgZWxlbWVudCkKQEAgLTEzOSw5NyArMTM1LDEwMiBAQCB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmluZWQoRWxlbWVudCYgZWxl
bWVudAogICAgIGlmICghZWxlbWVudEludGVyZmFjZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlKTsKKyAgICBl
bGVtZW50LmVucXVldWVUb1VwZ3JhZGUoKmVsZW1lbnRJbnRlcmZhY2UpOwogfQogCiB2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRl
ZChFbGVtZW50JiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50LmlzRGVmaW5lZEN1c3Rv
bUVsZW1lbnQoKSk7Ci0gICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9IGVsZW1lbnQuY3VzdG9t
RWxlbWVudEludGVyZmFjZSgpOwotICAgIEFTU0VSVChlbGVtZW50SW50ZXJmYWNlKTsKLSAgICBp
ZiAoIWVsZW1lbnRJbnRlcmZhY2UtPmhhc0Nvbm5lY3RlZENhbGxiYWNrKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
OjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtD
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW06OlR5cGU6OkNvbm5lY3RlZCwgZWxlbWVudCwg
KmVsZW1lbnRJbnRlcmZhY2V9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYgKHF1ZXVlLm1f
aW50ZXJmYWNlLT5oYXNDb25uZWN0ZWRDYWxsYmFjaygpKQorICAgICAgICBxdWV1ZS5tX2l0ZW1z
LmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBlOjpDb25uZWN0ZWR9
KTsKIH0KIAogdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZURpc2Nvbm5l
Y3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxl
bWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpOwotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZh
Y2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKTsKLSAgICBBU1NFUlQoZWxlbWVu
dEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5oYXNEaXNjb25uZWN0ZWRD
YWxsYmFjaygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCi0gICAgICAgIHF1
ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBl
OjpEaXNjb25uZWN0ZWQsIGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlfSk7CisgICAgYXV0byYg
cXVldWUgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKGVs
ZW1lbnQpOworICAgIGlmIChxdWV1ZS5tX2ludGVyZmFjZS0+aGFzRGlzY29ubmVjdGVkQ2FsbGJh
Y2soKSkKKyAgICAgICAgcXVldWUubV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlSXRlbTo6VHlwZTo6RGlzY29ubmVjdGVkfSk7CiB9CiAKIHZvaWQgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OmVucXVldWVBZG9wdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBl
bGVtZW50LCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZWxlbWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpOwotICAgIGF1dG8q
IGVsZW1lbnRJbnRlcmZhY2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKTsKLSAg
ICBBU1NFUlQoZWxlbWVudEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5o
YXNBZG9wdGVkQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHF1
ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQot
ICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe2VsZW1lbnQsICplbGVtZW50SW50ZXJmYWNl
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnR9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYg
KHF1ZXVlLm1faW50ZXJmYWNlLT5oYXNBZG9wdGVkQ2FsbGJhY2soKSkKKyAgICAgICAgcXVldWUu
bV9pdGVtcy5hcHBlbmQoe29sZERvY3VtZW50LCBuZXdEb2N1bWVudH0pOwogfQogCiB2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNr
SWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdWYWx1ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkp
OwotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBlbGVtZW50LmN1c3RvbUVsZW1lbnRJbnRl
cmZhY2UoKTsKLSAgICBBU1NFUlQoZWxlbWVudEludGVyZmFjZSk7Ci0gICAgaWYgKCFlbGVtZW50
SW50ZXJmYWNlLT5vYnNlcnZlc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVt
cy5hcHBlbmQoe2VsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlLCBhdHRyaWJ1dGVOYW1lLCBvbGRW
YWx1ZSwgbmV3VmFsdWV9KTsKKyAgICBhdXRvJiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoZWxlbWVudCk7CisgICAgaWYgKHF1ZXVlLm1faW50
ZXJmYWNlLT5vYnNlcnZlc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSkKKyAg
ICAgICAgcXVldWUubV9pdGVtcy5hcHBlbmQoe2F0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlLCBuZXdW
YWx1ZX0pOwogfQogCi12b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlUG9z
dFVwZ3JhZGVSZWFjdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlJiBlbGVtZW50SW50ZXJmYWNlKQordm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6
ZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKEVsZW1lbnQmIGVsZW1lbnQpCiB7CisgICAgQVNT
RVJUKGVsZW1lbnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKTsKICAgICBpZiAo
IWVsZW1lbnQuaGFzQXR0cmlidXRlcygpICYmICFlbGVtZW50LmluRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
azo6ZW5zdXJlQ3VycmVudFF1ZXVlKCk7Ci0gICAgaWYgKCFxdWV1ZSkKLSAgICAgICAgcmV0dXJu
OworICAgIGF1dG8qIHF1ZXVlID0gZWxlbWVudC5yZWFjdGlvblF1ZXVlKCk7CisgICAgQVNTRVJU
KHF1ZXVlKTsKIAogICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewogICAgICAgICBm
b3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAg
ICAgICAgICAgIGlmIChlbGVtZW50SW50ZXJmYWNlLm9ic2VydmVzQXR0cmlidXRlKGF0dHJpYnV0
ZS5sb2NhbE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtl
bGVtZW50LCBlbGVtZW50SW50ZXJmYWNlLCBhdHRyaWJ1dGUubmFtZSgpLCBudWxsQXRvbSwgYXR0
cmlidXRlLnZhbHVlKCl9KTsKKyAgICAgICAgICAgIGlmIChxdWV1ZS0+bV9pbnRlcmZhY2UtPm9i
c2VydmVzQXR0cmlidXRlKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSkpCisgICAgICAgICAgICAgICAg
cXVldWUtPm1faXRlbXMuYXBwZW5kKHthdHRyaWJ1dGUubmFtZSgpLCBudWxsQXRvbSwgYXR0cmli
dXRlLnZhbHVlKCl9KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChlbGVtZW50LmluRG9j
dW1lbnQoKSAmJiBlbGVtZW50SW50ZXJmYWNlLmhhc0Nvbm5lY3RlZENhbGxiYWNrKCkpCi0gICAg
ICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVt
OjpUeXBlOjpDb25uZWN0ZWQsIGVsZW1lbnQsIGVsZW1lbnRJbnRlcmZhY2V9KTsKKyAgICBpZiAo
ZWxlbWVudC5pbkRvY3VtZW50KCkgJiYgcXVldWUtPm1faW50ZXJmYWNlLT5oYXNDb25uZWN0ZWRD
YWxsYmFjaygpKQorICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlSXRlbTo6VHlwZTo6Q29ubmVjdGVkfSk7CiB9CiAKLXZvaWQgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6Omludm9rZUFsbCgpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjppbnZva2VBbGwoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBxdWV1ZSBuZWVkcyB0byBiZSBwZXIgZWxlbWVudC4KICAgICB3aGlsZSAoIW1faXRlbXMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIFZlY3RvcjxDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0+
IGl0ZW1zID0gV1RGTW92ZShtX2l0ZW1zKTsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRl
bXMpCi0gICAgICAgICAgICBpdGVtLmludm9rZSgpOworICAgICAgICAgICAgaXRlbS5pbnZva2Uo
ZWxlbWVudCwgbV9pbnRlcmZhY2UuZ2V0KCkpOwogICAgIH0KIH0KIAotQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUqIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVl
dWUoKQoraW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OkVsZW1lbnRRdWV1
ZTo6YWRkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZWFybHkgZXhp
dCBpbmRpY2F0ZXMgYSBidWcgdGhhdCBzb21lIERPTSBBUEkgaXMgbWlzc2luZyBDRVJlYWN0aW9u
cwotICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAvLyBGSVhNRTogQXZvaWQgaW5zZXJ0aW5nIHRoZSBzYW1lIGVsZW1lbnQgbXVs
dGlwbGUgdGltZXMuCisgICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Cit9CisKK2lubGlu
ZSB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpFbGVtZW50UXVldWU6Omludm9rZUFs
bCgpCit7CisgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CisgICAgZWxlbWVudHMu
c3dhcChtX2VsZW1lbnRzKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewor
ICAgICAgICBhdXRvKiBxdWV1ZSA9IGVsZW1lbnQtPnJlYWN0aW9uUXVldWUoKTsKKyAgICAgICAg
QVNTRVJUKHF1ZXVlKTsKKyAgICAgICAgcXVldWUtPmludm9rZUFsbChlbGVtZW50LmdldCgpKTsK
KyAgICB9CisgICAgQVNTRVJUKG1fZWxlbWVudHMuaXNFbXB0eSgpKTsKK30KKworQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUmIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJy
ZW50UXVldWUoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudC5yZWFjdGlv
blF1ZXVlKCkpOworICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKSB7CisgICAgICAg
IGF1dG8mIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUJhY2t1cFF1
ZXVlKCk7CisgICAgICAgIHF1ZXVlLmFkZChlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuICplbGVt
ZW50LnJlYWN0aW9uUXVldWUoKTsKKyAgICB9CiAKICAgICBhdXRvKiYgcXVldWUgPSBzX2N1cnJl
bnRQcm9jZXNzaW5nU3RhY2stPm1fcXVldWU7CiAgICAgaWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEg
cmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNvZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjay4KLSAgICAgICAgcXVldWUgPSBuZXcgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlOworICAgICAgICBxdWV1ZSA9IG5ldyBF
bGVtZW50UXVldWU7CisgICAgcXVldWUtPmFkZChlbGVtZW50KTsKKyAgICByZXR1cm4gKmVsZW1l
bnQucmVhY3Rpb25RdWV1ZSgpOwogfQogCiBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayogQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9IG51bGxw
dHI7CkBAIC0yNDIsNiArMjQzLDM5IEBAIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6
OnByb2Nlc3NRdWV1ZSgpCiAgICAgbV9xdWV1ZSA9IG51bGxwdHI7CiB9CiAKK2NsYXNzIEJhY2t1
cEVsZW1lbnRRdWV1ZU1pY3JvdGFzayBmaW5hbCA6IHB1YmxpYyBNaWNyb3Rhc2sgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHJpdmF0ZToKKyAgICBSZXN1bHQgcnVuKCkgZmluYWwK
KyAgICB7CisgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzQmFja3Vw
UXVldWUoKTsKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6RG9uZTsKKyAgICB9Cit9OworCitzdGF0
aWMgYm9vbCBzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUgPSBmYWxzZTsKKworQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2s6OkVsZW1lbnRRdWV1ZSYgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2s6OmVuc3VyZUJhY2t1cFF1ZXVlKCkKK3sKKyAgICBpZiAoIXNfcHJvY2Vzc2luZ0JhY2t1
cEVsZW1lbnRRdWV1ZSkgeworICAgICAgICBzX3Byb2Nlc3NpbmdCYWNrdXBFbGVtZW50UXVldWUg
PSB0cnVlOworICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8QmFja3VwRWxlbWVudFF1ZXVlTWljcm90YXNrPigpKTsKKyAgICB9
CisgICAgcmV0dXJuIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOworfQorCit2b2lkIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzQmFja3VwUXVldWUoKQoreworICAgIGJhY2t1cEVsZW1l
bnRRdWV1ZSgpLmludm9rZUFsbCgpOworICAgIHNfcHJvY2Vzc2luZ0JhY2t1cEVsZW1lbnRRdWV1
ZSA9IGZhbHNlOworfQorCitDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6RWxlbWVudFF1ZXVl
JiBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6YmFja3VwRWxlbWVudFF1ZXVlKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RWxlbWVudFF1ZXVlPiBxdWV1ZTsKKyAgICByZXR1cm4g
cXVldWUuZ2V0KCk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCmluZGV4IDc3ZjA2MDcwMjRhOTNmYzM5MTY1MmYy
YjAzOWEyMTA0NGFiMzczNmEuLjljODc5ZDczYTJiZGNkNDcwZmVlNzhlM2Y3Y2E0NTE3MGUyOTM4
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5oCkBAIC00MiwyMCArNDIsMjIgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZSk7CiBwdWJsaWM6Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUoKTsKKyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZShKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UmKTsKICAgICB+Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKTsKIAotICAgIHN0
YXRpYyB2b2lkIGVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiwgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlJik7CisgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1l
bnQmKTsKICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlRWxlbWVudFVwZ3JhZGVJZkRlZmluZWQoRWxl
bWVudCYpOwogICAgIHN0YXRpYyB2b2lkIGVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVk
KEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlRGlzY29ubmVjdGVkQ2FsbGJhY2tJ
Zk5lZWRlZChFbGVtZW50Jik7CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUFkb3B0ZWRDYWxsYmFj
a0lmTmVlZGVkKEVsZW1lbnQmLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdE
b2N1bWVudCk7CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFj
a0lmTmVlZGVkKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZW5xdWV1ZVBvc3RVcGdyYWRlUmVhY3Rpb25zKEVsZW1lbnQmLCBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UmKTsKKyAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlUG9zdFVwZ3JhZGVSZWFjdGlv
bnMoRWxlbWVudCYpOwogCi0gICAgdm9pZCBpbnZva2VBbGwoKTsKKyAgICB2b2lkIGludm9rZUFs
bChFbGVtZW50Jik7CisgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgorICAgIFJlZjxKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOwogICAgIFZlY3RvcjxDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZUl0ZW0+IG1faXRlbXM7CiB9OwogCkBAIC03NCwxNSArNzYsMjggQEAg
cHVibGljOgogICAgICAgICBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sgPSBtX3ByZXZpb3VzUHJv
Y2Vzc2luZ1N0YWNrOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHJl
ZmVyZW5jZSBvbmNlICJlbnN1cmUiIHN0YXJ0cyB0byB3b3JrLgotICAgIHN0YXRpYyBDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZSogZW5zdXJlQ3VycmVudFF1ZXVlKCk7CisgICAgc3RhdGljIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlJiBlbnN1cmVDdXJyZW50UXVldWUoRWxlbWVudCYpOwog
CiAgICAgc3RhdGljIGJvb2wgaGFzQ3VycmVudFByb2Nlc3NpbmdTdGFjaygpIHsgcmV0dXJuIHNf
Y3VycmVudFByb2Nlc3NpbmdTdGFjazsgfQogCisgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1
cFF1ZXVlKCk7CisKIHByaXZhdGU6CisgICAgY2xhc3MgRWxlbWVudFF1ZXVlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZvaWQgYWRkKEVsZW1lbnQmKTsKKyAgICAgICAgdm9pZCBpbnZva2VBbGwo
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IG1fZWxlbWVu
dHM7CisgICAgfTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1F1ZXVlKCk7CiAK
LSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogbV9xdWV1ZSB7IG51bGxwdHIgfTsKKyAg
ICBzdGF0aWMgRWxlbWVudFF1ZXVlJiBlbnN1cmVCYWNrdXBRdWV1ZSgpOworICAgIHN0YXRpYyBF
bGVtZW50UXVldWUmIGJhY2t1cEVsZW1lbnRRdWV1ZSgpOworCisgICAgRWxlbWVudFF1ZXVlKiBt
X3F1ZXVlIHsgbnVsbHB0ciB9OwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKiBtX3By
ZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblN0YWNrKiBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2s7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCmluZGV4IDgxZjdjYTE3MjM3
ZTcxODgyMmM1ODExYzkwZWFmNTdiNzUxN2FiZDIuLmY5ODRmOTE2ZmFhNjBjOGUzNDhiZWY2Yjdi
ODlmYWU1MTNmYzE3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVn
aXN0cnkuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyB2b2lkIGVucXVldWVVcGdyYWRlSW5T
aGFkb3dJbmNsdWRpbmdUcmVlT3JkZXIoQ29udGFpbmVyTm9kZSYgbm9kZSwgSlNDdXN0CiB7CiAg
ICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
bm9kZSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KCplbGVtZW50
KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0
ZSgpICYmIGVsZW1lbnQtPnRhZ1FOYW1lKCkgPT0gZWxlbWVudEludGVyZmFjZS5uYW1lKCkpCi0g
ICAgICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdy
YWRlKCplbGVtZW50LCBlbGVtZW50SW50ZXJmYWNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmVu
cXVldWVUb1VwZ3JhZGUoZWxlbWVudEludGVyZmFjZSk7CiAgICAgICAgIGlmIChhdXRvKiBzaGFk
b3dSb290ID0gZWxlbWVudC0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBpZiAoc2hhZG93
Um9vdC0+bW9kZSgpICE9IFNoYWRvd1Jvb3Q6Ok1vZGU6OlVzZXJBZ2VudCkKICAgICAgICAgICAg
ICAgICBlbnF1ZXVlVXBncmFkZUluU2hhZG93SW5jbHVkaW5nVHJlZU9yZGVyKCpzaGFkb3dSb290
LCBlbGVtZW50SW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDExMGU2NDc5
MTE4ZjkxYWM0NWZkMDE0YjU4NzMwZTc0MDJkN2RmODkuLjM0MDhiN2I2OWUzODljYTU4NjM1ZjJh
YWFjMjBjOTcyMDRlODkyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTA3NSw4ICsx
MDc1LDcgQEAgc3RhdGljIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRmFsbGJhY2tIVE1MRWxlbWVu
dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFF1YWwKICAgICAgICAgaWYgKFVOTElLRUxZKHJl
Z2lzdHJ5KSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSByZWdp
c3RyeS0+ZmluZEludGVyZmFjZShuYW1lKSkgewogICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVu
dCA9IEhUTUxFbGVtZW50OjpjcmVhdGUobmFtZSwgZG9jdW1lbnQpOwotICAgICAgICAgICAgICAg
IGVsZW1lbnQtPnNldElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKTsKLSAgICAgICAg
ICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdyYWRl
KGVsZW1lbnQuZ2V0KCksICplbGVtZW50SW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICBlbGVt
ZW50LT5lbnF1ZXVlVG9VcGdyYWRlKCplbGVtZW50SW50ZXJmYWNlKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IGRiYmJkMTRiY2Y0OGM5MzY5MDE5M2VlZjI3Y2FhMjNlYzc3NmNhYTYuLjg3
M2FhM2E2ZjU1OTlmMWMwNWYzMTEzZjg0NDk0ZmJiZjlhMGRkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTE5MDIsMTUgKzE5MDIsMjIgQEAgdm9pZCBFbGVtZW50OjpzZXRJc0RlZmluZWRD
dXN0b21FbGVtZW50KEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVudEludGVyZmEKIHsK
ICAgICBjbGVhckZsYWcoSXNFZGl0aW5nVGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxlbWVudEZsYWcp
OwogICAgIHNldEZsYWcoSXNDdXN0b21FbGVtZW50KTsKLSAgICBlbnN1cmVFbGVtZW50UmFyZURh
dGEoKS5zZXRDdXN0b21FbGVtZW50SW50ZXJmYWNlKGVsZW1lbnRJbnRlcmZhY2UpOworICAgIGF1
dG8mIGRhdGEgPSBlbnN1cmVFbGVtZW50UmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEuY3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWUoKSkKKyAgICAgICAgZGF0YS5zZXRDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZShzdGQ6Om1ha2VfdW5pcXVlPEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlPihl
bGVtZW50SW50ZXJmYWNlKSk7CiB9CiAKLXZvaWQgRWxlbWVudDo6c2V0SXNGYWlsZWRDdXN0b21F
bGVtZW50KEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSkKK3ZvaWQg
RWxlbWVudDo6c2V0SXNGYWlsZWRDdXN0b21FbGVtZW50KEpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZSYpCiB7CiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpKTsKICAgICBBU1NF
UlQoZ2V0RmxhZyhJc0VkaXRpbmdUZXh0T3JVbmRlZmluZWRDdXN0b21FbGVtZW50RmxhZykpOwog
ICAgIGNsZWFyRmxhZyhJc0N1c3RvbUVsZW1lbnQpOwotICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0
YSgpLnNldEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSk7CisKKyAgICBp
ZiAoaGFzUmFyZURhdGEoKSkgeworICAgICAgICAvLyBDbGVhciB0aGUgcXVldWUgaW5zdGVhZCBv
ZiBkZWxldGluZyBpdCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW5zaWRlIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjppbnZva2VBbGwgZHVyaW5nIHVwZ3JhZGVzLgorICAg
ICAgICBpZiAoYXV0byogcXVldWUgPSBlbGVtZW50UmFyZURhdGEoKS0+Y3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUoKSkKKyAgICAgICAgICAgIHF1ZXVlLT5jbGVhcigpOworICAgIH0KIH0KIAog
dm9pZCBFbGVtZW50OjpzZXRJc0N1c3RvbUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCkKQEAgLTE5
MjAsMTIgKzE5MjcsMjUgQEAgdm9pZCBFbGVtZW50OjpzZXRJc0N1c3RvbUVsZW1lbnRVcGdyYWRl
Q2FuZGlkYXRlKCkKICAgICBzZXRGbGFnKElzRWRpdGluZ1RleHRPclVuZGVmaW5lZEN1c3RvbUVs
ZW1lbnRGbGFnKTsKIH0KIAotSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBFbGVtZW50OjpjdXN0
b21FbGVtZW50SW50ZXJmYWNlKCkgY29uc3QKK3ZvaWQgRWxlbWVudDo6ZW5xdWV1ZVRvVXBncmFk
ZShKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCit7CisgICAgQVNT
RVJUKCFpc0RlZmluZWRDdXN0b21FbGVtZW50KCkgJiYgIWlzRmFpbGVkQ3VzdG9tRWxlbWVudCgp
KTsKKyAgICBzZXRGbGFnKElzQ3VzdG9tRWxlbWVudCk7CisgICAgc2V0RmxhZyhJc0VkaXRpbmdU
ZXh0T3JVbmRlZmluZWRDdXN0b21FbGVtZW50RmxhZyk7CisKKyAgICBhdXRvJiBkYXRhID0gZW5z
dXJlRWxlbWVudFJhcmVEYXRhKCk7CisgICAgQVNTRVJUKCFkYXRhLmN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlKCkpOworCisgICAgZGF0YS5zZXRDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZShz
dGQ6Om1ha2VfdW5pcXVlPEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlPihlbGVtZW50SW50ZXJm
YWNlKSk7CisgICAgZGF0YS5jdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpLT5lbnF1ZXVlRWxl
bWVudFVwZ3JhZGUoKnRoaXMpOworfQorCitDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogRWxl
bWVudDo6cmVhY3Rpb25RdWV1ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzRGVmaW5lZEN1c3Rv
bUVsZW1lbnQoKSk7CisgICAgQVNTRVJUKGlzRGVmaW5lZEN1c3RvbUVsZW1lbnQoKSB8fCBpc0N1
c3RvbUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCkpOwogICAgIGlmICghaGFzUmFyZURhdGEoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGVsZW1lbnRSYXJlRGF0YSgpLT5j
dXN0b21FbGVtZW50SW50ZXJmYWNlKCk7CisgICAgcmV0dXJuIGVsZW1lbnRSYXJlRGF0YSgpLT5j
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CmluZGV4IGM2ZTU4OTk2NGIyYWY1ODc1YzYzY2FhZWM3NjQwMjVlMjllOWEzOWQuLmExYmQzMDE1
MTRkN2Y1MjVmZDBiYWNhMzM2MmU3YzI1N2ZhZTllMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAt
MzksNiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENsaWVudFJlY3Q7CiBj
bGFzcyBDbGllbnRSZWN0TGlzdDsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOwog
Y2xhc3MgRGF0YXNldERPTVN0cmluZ01hcDsKIGNsYXNzIERpY3Rpb25hcnk7CiBjbGFzcyBET01U
b2tlbkxpc3Q7CkBAIC0yODQsNyArMjg1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNEZWZp
bmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmKTsKICAgICB2b2lkIHNl
dElzRmFpbGVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmKTsKICAgICB2
b2lkIHNldElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKTsKLSAgICBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UqIGN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoKSBjb25zdDsKKyAgICB2b2lk
IGVucXVldWVUb1VwZ3JhZGUoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJik7CisgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWUqIHJlYWN0aW9uUXVldWUoKSBjb25zdDsKICNlbmRpZgogCiAg
ICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIG5vdCBiZSB2aXJ0dWFsLCBkbyBub3Qgb3ZlcnJpZGUg
dGhpcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAppbmRleCA4NGEyMTg5M2VhMTk3
ZjM2NjNlMzNmZGVmZTM5MTY0NGExZmY5OWQyLi4yNWI4ZWZlYzBmNWViOGNjNjZkY2ExZjQzN2Vk
YTdiNzljMTJiOGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCkBAIC0yMiw2
ICsyMiw3IEBACiAjaWZuZGVmIEVsZW1lbnRSYXJlRGF0YV9oCiAjZGVmaW5lIEVsZW1lbnRSYXJl
RGF0YV9oCiAKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgogI2luY2x1
ZGUgIkRPTVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFzZXRET01TdHJpbmdNYXAuaCIKICNp
bmNsdWRlICJKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCIKQEAgLTk1LDggKzk2LDggQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0U2hhZG93Um9vdChSZWZQdHI8U2hhZG93Um9vdD4mJiBzaGFkb3dS
b290KSB7IG1fc2hhZG93Um9vdCA9IFdURk1vdmUoc2hhZG93Um9vdCk7IH0KIAogI2lmIEVOQUJM
RShDVVNUT01fRUxFTUVOVFMpCi0gICAgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBjdXN0b21F
bGVtZW50SW50ZXJmYWNlKCkgeyByZXR1cm4gbV9jdXN0b21FbGVtZW50SW50ZXJmYWNlLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSYgY3VzdG9tRWxlbWVudEludGVyZmFjZSkgeyBtX2N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2UgPSAmY3VzdG9tRWxlbWVudEludGVyZmFjZTsgfQorICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlKiBjdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpIHsgcmV0dXJuIG1fY3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZT4mJiBx
dWV1ZSkgeyBtX2N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlID0gV1RGTW92ZShxdWV1ZSk7IH0K
ICNlbmRpZgogCiAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZU1hcC5nZXQoKTsgfQpAQCAtMTU2LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPERPTVRva2VuTGlzdD4gbV9jbGFzc0xpc3Q7CiAgICAgUmVmUHRy
PFNoYWRvd1Jvb3Q+IG1fc2hhZG93Um9vdDsKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQot
ICAgIFJlZlB0cjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1fY3VzdG9tRWxlbWVudEludGVy
ZmFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU+IG1f
Y3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmFtZWROb2RlTWFwPiBtX2F0dHJpYnV0ZU1hcDsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ1OTg1ZWY2OTliNGM1ZDg5
M2ExYTM5Y2EzMGJmNzM4ZGFmZTJhM2UuLmFjNGM5NTdiODVjMDMyYzlhYzgxYjE0ODNiM2M3MzI1
YzE0MzdmNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0xMC0yMyAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBDdXN0b20gZWxlbWVudHMgcmVhY3Rpb25z
IHNob3VsZCBoYXZlIGEgcXVldWUgcGVyIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg3OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIEFkZGVkIGEgVzNDIHN0eWxlIHRlc3RoYXJuZXNzLmpz
IHRlc3QgZm9yIG1ha2luZyBzdXJlIHRoZSBjdXN0b20gZWxlbWVudCByZWFjdGlvbiBxdWV1ZSBl
eGlzdHMgcGVyIGVsZW1lbnQsCisgICAgICAgIGFuZCBhZGRlZCBhIFdlYktpdCBzdHlsZSB0ZXN0
IGZvciBtYWtpbmcgc3VyZSB0aGF0IHRoZSBiYWNrdXAgZWxlbWVudCBxdWV1ZSBleGlzdHMuCisK
KyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy9iYWNrdXAtZWxlbWVudC1xdWV1ZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3VzdG9tLWVsZW1lbnRzL2JhY2t1cC1l
bGVtZW50LXF1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3VzdG9tLWVsZW1lbnRz
L2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uLXF1ZXVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUu
aHRtbDogQWRkZWQuCisKIDIwMTYtMTAtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBEbyBub3QgdXBkYXRlIHNlbGVjdGlvbiByZWN0IG9uIGRpcnR5IGxpbmVi
b3hlcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVsZW1lbnRzL2JhY2t1
cC1lbGVtZW50LXF1ZXVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVs
ZW1lbnRzL2JhY2t1cC1lbGVtZW50LXF1ZXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2Y3
MDU5MjhjY2JjOWZhOWI0YWE4YTc4ZjVkZDhkYWYzZjU3NWUzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvYmFja3VwLWVsZW1lbnQtcXVldWUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgdGhlIGV4aXN0ZW5jZSBvZiB0
aGUgYmFja3VwIGVsZW1lbnQgcXVldWUuIFRvIG1hbnVhbGx5IHRlc3QsIHByZXNzIHRoZSBkZWxl
dGUga2V5IG9uY2UgdGhlIHBhZ2UgaXMgbG9hZGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBjb25zdHJ1Y3RlZCBpcyBmYWxzZQorUEFTUyBlZGl0b3IuaW5uZXJIVE1M
ID0gImE8dGVzdC1lbGVtZW50PmI8L3Rlc3QtZWxlbWVudD5jIjsgY29uc3RydWN0ZWQgaXMgdHJ1
ZQorUEFTUyBlZGl0b3IuZm9jdXMoKTsgZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4o
ZWRpdG9yKTsgZGlzY29ubmVjdGVkIGlzIGZhbHNlCitQQVNTICJCZWZvcmUgdGhlIGVuZCBvZiB0
aGUgbWljcm8gdGFzayI7IGRpc2Nvbm5lY3RlZCBpcyBmYWxzZQorUEFTUyAiQXQgdGhlIGVuZCBv
ZiB0aGUgbWljcm8gdGFzayI7IGRpc2Nvbm5lY3RlZCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKworCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9iYWNrdXAtZWxlbWVudC1xdWV1ZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvYmFja3VwLWVsZW1lbnQtcXVldWUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42OGI3MzY3ZWY5ZjBlMzY1MjcwZWNhNzNjNWExNDI0ZjFhYTkxMWViCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvYmFja3VwLWVs
ZW1lbnQtcXVldWUuaHRtbApAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2Ny
aXB0PgorPGRpdiBpZD0iZWRpdG9yIiBjb250ZW50ZWRpdGFibGU+PC9kaXY+Cis8c2NyaXB0Pgor
CitkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBiYWNrdXAgZWxl
bWVudCBxdWV1ZS4gVG8gbWFudWFsbHkgdGVzdCwgcHJlc3MgdGhlIGRlbGV0ZSBrZXkgb25jZSB0
aGUgcGFnZSBpcyBsb2FkZWQuJyk7CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKwordmFy
IGNvbnN0cnVjdGVkID0gZmFsc2U7Cit2YXIgZGlzY29ubmVjdGVkID0gZmFsc2U7CitjbGFzcyBU
ZXN0RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgICAgc3VwZXIoKTsKKyAgICAgICAgY29uc3RydWN0ZWQgPSB0cnVlOworICAgIH0KKyAgICBk
aXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKKyAgICAgICAgZGlzY29ubmVjdGVkID0gdHJ1ZTsKKyAg
ICB9Cit9CitjdXN0b21FbGVtZW50cy5kZWZpbmUoJ3Rlc3QtZWxlbWVudCcsIFRlc3RFbGVtZW50
KTsKKwordmFyIGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTsKK3No
b3VsZEJlKCdjb25zdHJ1Y3RlZCcsICdmYWxzZScpOworc2hvdWxkQmUoJ2VkaXRvci5pbm5lckhU
TUwgPSAiYTx0ZXN0LWVsZW1lbnQ+YjwvdGVzdC1lbGVtZW50PmMiOyBjb25zdHJ1Y3RlZCcsICd0
cnVlJyk7CitzaG91bGRCZSgnZWRpdG9yLmZvY3VzKCk7IGdldFNlbGVjdGlvbigpLnNlbGVjdEFs
bENoaWxkcmVuKGVkaXRvcik7IGRpc2Nvbm5lY3RlZCcsICdmYWxzZScpOworCitmdW5jdGlvbiBj
aGVja0Rpc2Nvbm5lY3RlZEF0RW5kT2ZNaWN0b3Rhc2soKQoreworICAgIHNob3VsZEJlKCciQmVm
b3JlIHRoZSBlbmQgb2YgdGhlIG1pY3JvIHRhc2siOyBkaXNjb25uZWN0ZWQnLCAnZmFsc2UnKTsK
KyAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2hvdWxk
QmUoJyJBdCB0aGUgZW5kIG9mIHRoZSBtaWNybyB0YXNrIjsgZGlzY29ubmVjdGVkJywgJ3RydWUn
KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9CisKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZXhlY0NvbW1hbmQoJ2RlbGV0ZScsIGZhbHNlLCBu
dWxsKTsKKyAgICBjaGVja0Rpc2Nvbm5lY3RlZEF0RW5kT2ZNaWN0b3Rhc2soKTsKK30gZWxzZSB7
CisgICAgZWRpdG9yLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNoZWNrRGlzY29u
bmVjdGVkQXRFbmRPZk1pY3RvdGFzaygpOworICAgIH0KK30KKworCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVsZW1lbnRz
L2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uLXF1ZXVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvY3VzdG9tLWVsZW1lbnRzL2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uLXF1ZXVlLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41YjUwZDRmYzJhMmEzMGNkMmY5ZjhlMTY0OGU4MmUxZDZkYWJk
YzYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMv
Y3VzdG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBA
QAorCitQQVNTIFVwZ3JhZGluZyBhIGN1c3RvbSBlbGVtZW50IG11c3QgaW52b2tlIGF0dHJpYnV0
ZUNoYW5nZWRDYWxsYmFjayBhbmQgY29ubmVjdGVkQ2FsbGJhY2sgYmVmb3JlIHN0YXJ0IHVwZ3Jh
ZGluZyBhbm90aGVyIGVsZW1lbnQgCitQQVNTIE11dGF0aW5nIGEgdW5kZWZpbmVkIGN1c3RvbSBl
bGVtZW50IHdoaWxlIHVwZ3JhZGluZyBhIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGVucXVldWUg
b3IgaW52b2tlIHJlYWN0aW9ucyBvbiB0aGUgbXV0YXRlZCBlbGVtZW50IAorUEFTUyBNdXRhdGlu
ZyBhbm90aGVyIGN1c3RvbSBlbGVtZW50IGluc2lkZSBhZG9wdGVkIGNhbGxiYWNrIG11c3QgaW52
b2tlIGFsbCBwZW5kaW5nIGNhbGxiYWNrcyBvbiB0aGUgbXV0YXRlZCBlbGVtZW50IAorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxlbWVudC1y
ZWFjdGlvbi1xdWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jdXN0b20tZWxlbWVudHMvY3Vz
dG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTQ2NDQwYjNjNDk0
YmQwMzQ0MzMxNDdjZTgzNzkwZjI2YzdhMTFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUuaHRt
bApAQCAtMCwwICsxLDE4MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRp
dGxlPkN1c3RvbSBFbGVtZW50czogRWFjaCBlbGVtZW50IG11c3QgaGF2ZSBpdHMgb3duIGN1c3Rv
bSBlbGVtZW50IHJlYWN0aW9uIHF1ZXVlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImF1dGhvciIgdGl0
bGU9IlJ5b3N1a2UgTml3YSIgaHJlZj0ibWFpbHRvOnJuaXdhQHdlYmtpdC5vcmciPgorPG1ldGEg
bmFtZT0iYXNzZXJ0IiBjb250ZW50PSJFYWNoIGVsZW1lbnQgbXVzdCBoYXZlIGl0cyBvd24gY3Vz
dG9tIGVsZW1lbnQgcmVhY3Rpb24gcXVldWUiPgorPG1ldGEgbmFtZT0iaGVscCIgY29udGVudD0i
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjY3Vz
dG9tLWVsZW1lbnQtcmVhY3Rpb24tcXVldWUiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2N1c3RvbS1lbGVtZW50cy9yZXNvdXJjZXMvY3Vz
dG9tLWVsZW1lbnRzLWhlbHBlcnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KKworZnVuY3Rpb24gY3JlYXRlX2NvbnN0cnVjdG9y
X2xvZyhlbGVtZW50KSB7CisgICAgcmV0dXJuIHt0eXBlOiAnY29uc3RydWN0ZWQnLCBlbGVtZW50
OiBlbGVtZW50fTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X2NvbnN0cnVjdG9yX2xvZ19lbnRyeShs
b2csIGVsZW1lbnQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKGxvZy50eXBlLCAnY29uc3RydWN0ZWQn
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGxvZy5lbGVtZW50LCBlbGVtZW50KTsKK30KKworZnVuY3Rp
b24gYXNzZXJ0X2Fkb3B0ZWRfbG9nX2VudHJ5KGxvZywgZWxlbWVudCkgeworICAgIGFzc2VydF9l
cXVhbHMobG9nLnR5cGUsICdhZG9wdGVkJyk7CisgICAgYXNzZXJ0X2VxdWFscyhsb2cuZWxlbWVu
dCwgZWxlbWVudCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZV9hZG9wdGVkX2NhbGxiYWNrX2xvZyhl
bGVtZW50KSB7CisgICAgcmV0dXJuIHt0eXBlOiAnYWRvcHRlZCcsIGVsZW1lbnQ6IGVsZW1lbnR9
OworfQorCitmdW5jdGlvbiBjcmVhdGVfY29ubmVjdGVkX2NhbGxiYWNrX2xvZyhlbGVtZW50KSB7
CisgICAgcmV0dXJuIHt0eXBlOiAnY29ubmVjdGVkJywgZWxlbWVudDogZWxlbWVudH07Cit9CisK
K2Z1bmN0aW9uIGFzc2VydF9jb25uZWN0ZWRfbG9nX2VudHJ5KGxvZywgZWxlbWVudCkgeworICAg
IGFzc2VydF9lcXVhbHMobG9nLnR5cGUsICdjb25uZWN0ZWQnKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGxvZy5lbGVtZW50LCBlbGVtZW50KTsKK30KKwordGVzdF93aXRoX3dpbmRvdyhmdW5jdGlvbiAo
Y29udGVudFdpbmRvdykgeworICAgIGNvbnN0IGNvbnRlbnREb2N1bWVudCA9IGNvbnRlbnRXaW5k
b3cuZG9jdW1lbnQ7CisgICAgY29udGVudERvY3VtZW50LndyaXRlKCc8dGVzdC1lbGVtZW50IGlk
PSJmaXJzdC1lbGVtZW50Ij4nKTsKKyAgICBjb250ZW50RG9jdW1lbnQud3JpdGUoJzx0ZXN0LWVs
ZW1lbnQgaWQ9InNlY29uZC1lbGVtZW50Ij4nKTsKKworICAgIGNvbnN0IGVsZW1lbnQxID0gY29u
dGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdC1lbGVtZW50Jyk7CisgICAgY29uc3Qg
ZWxlbWVudDIgPSBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZC1lbGVtZW50
Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudDEpLCBj
b250ZW50V2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSk7CisgICAgYXNzZXJ0X2VxdWFscyhP
YmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudDIpLCBjb250ZW50V2luZG93LkhUTUxFbGVtZW50
LnByb3RvdHlwZSk7CisKKyAgICBsZXQgbG9nID0gW107CisgICAgY2xhc3MgVGVzdEVsZW1lbnQg
ZXh0ZW5kcyBjb250ZW50V2luZG93LkhUTUxFbGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3Io
KSB7CisgICAgICAgICAgICBzdXBlcigpOworICAgICAgICAgICAgbG9nLnB1c2goY3JlYXRlX2Nv
bnN0cnVjdG9yX2xvZyh0aGlzKSk7CisgICAgICAgIH0KKyAgICAgICAgY29ubmVjdGVkQ2FsbGJh
Y2soLi4uYXJncykgeworICAgICAgICAgICAgbG9nLnB1c2goY3JlYXRlX2Nvbm5lY3RlZF9jYWxs
YmFja19sb2codGhpcywgLi4uYXJncykpOworICAgICAgICB9CisgICAgICAgIGF0dHJpYnV0ZUNo
YW5nZWRDYWxsYmFjayguLi5hcmdzKSB7CisgICAgICAgICAgICBsb2cucHVzaChjcmVhdGVfYXR0
cmlidXRlX2NoYW5nZWRfY2FsbGJhY2tfbG9nKHRoaXMsIC4uLmFyZ3MpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHsgcmV0dXJuIFsnaWQnXTsg
fQorICAgIH0KKyAgICBjb250ZW50V2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgndGVzdC1l
bGVtZW50JywgVGVzdEVsZW1lbnQpOworICAgIGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3Rv
dHlwZU9mKGVsZW1lbnQxKSwgVGVzdEVsZW1lbnQucHJvdG90eXBlKTsKKyAgICBhc3NlcnRfZXF1
YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbGVtZW50MiksIFRlc3RFbGVtZW50LnByb3RvdHlw
ZSk7CisKKyAgICBhc3NlcnRfZXF1YWxzKGxvZy5sZW5ndGgsIDYpOworICAgIGFzc2VydF9jb25z
dHJ1Y3Rvcl9sb2dfZW50cnkobG9nWzBdLCBlbGVtZW50MSk7CisgICAgYXNzZXJ0X2F0dHJpYnV0
ZV9sb2dfZW50cnkobG9nWzFdLCB7bmFtZTogJ2lkJywgb2xkVmFsdWU6IG51bGwsIG5ld1ZhbHVl
OiAnZmlyc3QtZWxlbWVudCcsIG5hbWVzcGFjZTogbnVsbH0pOworICAgIGFzc2VydF9jb25uZWN0
ZWRfbG9nX2VudHJ5KGxvZ1syXSwgZWxlbWVudDEpOworICAgIGFzc2VydF9jb25zdHJ1Y3Rvcl9s
b2dfZW50cnkobG9nWzNdLCBlbGVtZW50Mik7CisgICAgYXNzZXJ0X2F0dHJpYnV0ZV9sb2dfZW50
cnkobG9nWzRdLCB7bmFtZTogJ2lkJywgb2xkVmFsdWU6IG51bGwsIG5ld1ZhbHVlOiAnc2Vjb25k
LWVsZW1lbnQnLCBuYW1lc3BhY2U6IG51bGx9KTsKKyAgICBhc3NlcnRfY29ubmVjdGVkX2xvZ19l
bnRyeShsb2dbNV0sIGVsZW1lbnQyKTsKK30sICdVcGdyYWRpbmcgYSBjdXN0b20gZWxlbWVudCBt
dXN0IGludm9rZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgYW5kIGNvbm5lY3RlZENhbGxiYWNr
IGJlZm9yZSBzdGFydCB1cGdyYWRpbmcgYW5vdGhlciBlbGVtZW50Jyk7CisKK3Rlc3Rfd2l0aF93
aW5kb3coZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBjb25zdCBjb250ZW50RG9jdW1l
bnQgPSBjb250ZW50V2luZG93LmRvY3VtZW50OworICAgIGNvbnRlbnREb2N1bWVudC53cml0ZSgn
PHRlc3QtZWxlbWVudCBpZD0iZmlyc3QtZWxlbWVudCI+Jyk7CisgICAgY29udGVudERvY3VtZW50
LndyaXRlKCc8dGVzdC1lbGVtZW50IGlkPSJzZWNvbmQtZWxlbWVudCI+Jyk7CisKKyAgICBjb25z
dCBlbGVtZW50MSA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QtZWxlbWVu
dCcpOworICAgIGNvbnN0IGVsZW1lbnQyID0gY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzZWNvbmQtZWxlbWVudCcpOworICAgIGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlw
ZU9mKGVsZW1lbnQxKSwgY29udGVudFdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUpOworICAg
IGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQyKSwgY29udGVudFdp
bmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUpOworCisgICAgbGV0IGxvZyA9IFtdOworICAgIGNs
YXNzIFRlc3RFbGVtZW50IGV4dGVuZHMgY29udGVudFdpbmRvdy5IVE1MRWxlbWVudCB7CisgICAg
ICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIGxv
Zy5wdXNoKGNyZWF0ZV9jb25zdHJ1Y3Rvcl9sb2codGhpcykpOworICAgICAgICAgICAgaWYgKHRo
aXMgPT0gZWxlbWVudDEpCisgICAgICAgICAgICAgICAgZWxlbWVudDIuc2V0QXR0cmlidXRlKCdj
bGFzcycsICdmb28nKTsKKyAgICAgICAgfQorICAgICAgICBjb25uZWN0ZWRDYWxsYmFjayguLi5h
cmdzKSB7CisgICAgICAgICAgICBsb2cucHVzaChjcmVhdGVfY29ubmVjdGVkX2NhbGxiYWNrX2xv
Zyh0aGlzLCAuLi5hcmdzKSk7CisgICAgICAgIH0KKyAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENh
bGxiYWNrKC4uLmFyZ3MpIHsKKyAgICAgICAgICAgIGxvZy5wdXNoKGNyZWF0ZV9hdHRyaWJ1dGVf
Y2hhbmdlZF9jYWxsYmFja19sb2codGhpcywgLi4uYXJncykpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydpZCcsICdjbGFzcydd
OyB9CisgICAgfQorICAgIGNvbnRlbnRXaW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0
LWVsZW1lbnQnLCBUZXN0RWxlbWVudCk7CisgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJv
dG90eXBlT2YoZWxlbWVudDEpLCBUZXN0RWxlbWVudC5wcm90b3R5cGUpOworICAgIGFzc2VydF9l
cXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQyKSwgVGVzdEVsZW1lbnQucHJvdG90
eXBlKTsKKworICAgIGFzc2VydF9lcXVhbHMobG9nLmxlbmd0aCwgNyk7CisgICAgYXNzZXJ0X2Nv
bnN0cnVjdG9yX2xvZ19lbnRyeShsb2dbMF0sIGVsZW1lbnQxKTsKKyAgICBhc3NlcnRfYXR0cmli
dXRlX2xvZ19lbnRyeShsb2dbMV0sIHtuYW1lOiAnaWQnLCBvbGRWYWx1ZTogbnVsbCwgbmV3VmFs
dWU6ICdmaXJzdC1lbGVtZW50JywgbmFtZXNwYWNlOiBudWxsfSk7CisgICAgYXNzZXJ0X2Nvbm5l
Y3RlZF9sb2dfZW50cnkobG9nWzJdLCBlbGVtZW50MSk7CisgICAgYXNzZXJ0X2NvbnN0cnVjdG9y
X2xvZ19lbnRyeShsb2dbM10sIGVsZW1lbnQyKTsKKyAgICBhc3NlcnRfYXR0cmlidXRlX2xvZ19l
bnRyeShsb2dbNF0sIHtuYW1lOiAnaWQnLCBvbGRWYWx1ZTogbnVsbCwgbmV3VmFsdWU6ICdzZWNv
bmQtZWxlbWVudCcsIG5hbWVzcGFjZTogbnVsbH0pOworICAgIGFzc2VydF9hdHRyaWJ1dGVfbG9n
X2VudHJ5KGxvZ1s1XSwge25hbWU6ICdjbGFzcycsIG9sZFZhbHVlOiBudWxsLCBuZXdWYWx1ZTog
J2ZvbycsIG5hbWVzcGFjZTogbnVsbH0pOworICAgIGFzc2VydF9jb25uZWN0ZWRfbG9nX2VudHJ5
KGxvZ1s2XSwgZWxlbWVudDIpOworfSwgJ011dGF0aW5nIGEgdW5kZWZpbmVkIGN1c3RvbSBlbGVt
ZW50IHdoaWxlIHVwZ3JhZGluZyBhIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGVucXVldWUgb3Ig
aW52b2tlIHJlYWN0aW9ucyBvbiB0aGUgbXV0YXRlZCBlbGVtZW50Jyk7CisKK3Rlc3Rfd2l0aF93
aW5kb3coZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3cpIHsKKyAgICBsZXQgbG9nID0gW107CisgICAg
bGV0IGVsZW1lbnQxOworICAgIGxldCBlbGVtZW50MjsKKyAgICBjbGFzcyBUZXN0RWxlbWVudCBl
eHRlbmRzIGNvbnRlbnRXaW5kb3cuSFRNTEVsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICBsb2cucHVzaChjcmVhdGVfY29u
c3RydWN0b3JfbG9nKHRoaXMpKTsKKyAgICAgICAgfQorICAgICAgICBhZG9wdGVkQ2FsbGJhY2so
Li4uYXJncykgeworICAgICAgICAgICAgbG9nLnB1c2goY3JlYXRlX2Fkb3B0ZWRfY2FsbGJhY2tf
bG9nKHRoaXMsIC4uLmFyZ3MpKTsKKyAgICAgICAgICAgIGlmICh0aGlzID09IGVsZW1lbnQxKQor
ICAgICAgICAgICAgICAgIGVsZW1lbnQzLnNldEF0dHJpYnV0ZSgnaWQnLCAnZm9vJyk7CisgICAg
ICAgIH0KKyAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soLi4uYXJncykgeworICAgICAgICAgICAg
bG9nLnB1c2goY3JlYXRlX2Nvbm5lY3RlZF9jYWxsYmFja19sb2codGhpcywgLi4uYXJncykpOwor
ICAgICAgICB9CisgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayguLi5hcmdzKSB7Cisg
ICAgICAgICAgICBsb2cucHVzaChjcmVhdGVfYXR0cmlidXRlX2NoYW5nZWRfY2FsbGJhY2tfbG9n
KHRoaXMsIC4uLmFyZ3MpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVk
QXR0cmlidXRlcygpIHsgcmV0dXJuIFsnaWQnLCAnY2xhc3MnXTsgfQorICAgIH0KKworICAgIGNv
bnRlbnRXaW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWVsZW1lbnQnLCBUZXN0RWxl
bWVudCk7CisKKyAgICBsZXQgY29udGVudERvY3VtZW50ID0gY29udGVudFdpbmRvdy5kb2N1bWVu
dDsKKyAgICBlbGVtZW50MSA9IGNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXN0LWVs
ZW1lbnQnKTsKKyAgICBlbGVtZW50MiA9IGNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0
ZXN0LWVsZW1lbnQnKTsKKyAgICBlbGVtZW50MyA9IGNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCd0ZXN0LWVsZW1lbnQnKTsKKyAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5
cGVPZihlbGVtZW50MSksIFRlc3RFbGVtZW50LnByb3RvdHlwZSk7CisgICAgYXNzZXJ0X2VxdWFs
cyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZWxlbWVudDIpLCBUZXN0RWxlbWVudC5wcm90b3R5cGUp
OworICAgIGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQzKSwgVGVz
dEVsZW1lbnQucHJvdG90eXBlKTsKKworICAgIGFzc2VydF9lcXVhbHMobG9nLmxlbmd0aCwgMyk7
CisgICAgYXNzZXJ0X2NvbnN0cnVjdG9yX2xvZ19lbnRyeShsb2dbMF0sIGVsZW1lbnQxKTsKKyAg
ICBhc3NlcnRfY29uc3RydWN0b3JfbG9nX2VudHJ5KGxvZ1sxXSwgZWxlbWVudDIpOworICAgIGFz
c2VydF9jb25zdHJ1Y3Rvcl9sb2dfZW50cnkobG9nWzJdLCBlbGVtZW50Myk7CisgICAgbG9nID0g
W107CisKKyAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQxKTsKKyAgICBjb250
YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDIpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChl
bGVtZW50Myk7CisKKyAgICBjb25zdCBhbm90aGVyRG9jdW1lbnQgPSBkb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTsKKyAgICBhbm90aGVyRG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisKKyAgICBhc3NlcnRfZXF1YWxzKGxv
Zy5sZW5ndGgsIDcpOworICAgIGFzc2VydF9hZG9wdGVkX2xvZ19lbnRyeShsb2dbMF0sIGVsZW1l
bnQxKTsKKyAgICBhc3NlcnRfYWRvcHRlZF9sb2dfZW50cnkobG9nWzFdLCBlbGVtZW50Myk7Cisg
ICAgYXNzZXJ0X2Nvbm5lY3RlZF9sb2dfZW50cnkobG9nWzJdLCBlbGVtZW50Myk7CisgICAgYXNz
ZXJ0X2F0dHJpYnV0ZV9sb2dfZW50cnkobG9nWzNdLCB7bmFtZTogJ2lkJywgb2xkVmFsdWU6IG51
bGwsIG5ld1ZhbHVlOiAnZm9vJywgbmFtZXNwYWNlOiBudWxsfSk7CisgICAgYXNzZXJ0X2Nvbm5l
Y3RlZF9sb2dfZW50cnkobG9nWzRdLCBlbGVtZW50MSk7CisgICAgYXNzZXJ0X2Fkb3B0ZWRfbG9n
X2VudHJ5KGxvZ1s1XSwgZWxlbWVudDIpOworICAgIGFzc2VydF9jb25uZWN0ZWRfbG9nX2VudHJ5
KGxvZ1s2XSwgZWxlbWVudDIpOworCit9LCAnTXV0YXRpbmcgYW5vdGhlciBjdXN0b20gZWxlbWVu
dCBpbnNpZGUgYWRvcHRlZCBjYWxsYmFjayBtdXN0IGludm9rZSBhbGwgcGVuZGluZyBjYWxsYmFj
a3Mgb24gdGhlIG11dGF0ZWQgZWxlbWVudCcpOworCisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>