<?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>154922</bug_id>
          
          <creation_ts>2016-03-02 10:54:49 -0800</creation_ts>
          <short_desc>Modern IDB: Close UniqueIDBDatabases once they become unused</short_desc>
          <delta_ts>2016-03-02 22:45:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169864</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 10:54:49 -0800</bug_when>
    <thetext>Modern IDB: Close UniqueIDBDatabases once they become unused

Besides just being a good idea, this was actually causing problems in testing on OS X as once a DatabaseProcess (or DumpRenderTree) accumulated ~256 open UniqueIDBDatabases it run up against the launchd enforced &quot;256 open file handles&quot; limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169893</commentid>
    <comment_count>1</comment_count>
      <attachid>272674</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 12:21:01 -0800</bug_when>
    <thetext>Created attachment 272674
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169894</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 12:22:55 -0800</bug_when>
    <thetext>Attachment 272674 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:601:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 16 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>1169897</commentid>
    <comment_count>3</comment_count>
      <attachid>272675</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 12:26:04 -0800</bug_when>
    <thetext>Created attachment 272675
Patch v1 with more style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169935</commentid>
    <comment_count>4</comment_count>
      <attachid>272675</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-02 14:14:53 -0800</bug_when>
    <thetext>Comment on attachment 272675
Patch v1 with more style

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

Please add a test that opens too many databases and hits the expected error.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1137
&gt; +    // Assuming it is not ephemeral, the server should now close it to free up resources.

Why do we only close non-ephemeral databases?  Shouldn&apos;t a memory backing store just not do anything when it closes?  I think this is unnecessary complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169942</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 14:24:09 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 272675 [details]
&gt; Patch v1 with more style
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272675&amp;action=review
&gt; 
&gt; Please add a test that opens too many databases and hits the expected error.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1137
&gt; &gt; +    // Assuming it is not ephemeral, the server should now close it to free up resources.
&gt; 
&gt; Why do we only close non-ephemeral databases?  Shouldn&apos;t a memory backing
&gt; store just not do anything when it closes?  I think this is unnecessary
&gt; complexity.

As discussed in person, opening, then closing, then reopening a database in private browsing needs to work - you need to get back to the same in-memory data.

The only reason we can close *persistent* databases is because we can get them back from disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169960</commentid>
    <comment_count>6</comment_count>
      <attachid>272689</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 14:53:21 -0800</bug_when>
    <thetext>Created attachment 272689
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169961</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 14:53:44 -0800</bug_when>
    <thetext>(Alex said r+ in person, didn&apos;t twiddle the review bit here in the bug)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169977</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-02 15:27:53 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=154706 was caused by this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170003</commentid>
    <comment_count>9</comment_count>
      <attachid>272689</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 16:23:40 -0800</bug_when>
    <thetext>Comment on attachment 272689
Patch for landing

Clearing flags on attachment: 272689

Committed r197474: &lt;http://trac.webkit.org/changeset/197474&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272674</attachid>
            <date>2016-03-02 12:21:01 -0800</date>
            <delta_ts>2016-03-02 12:26:04 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26024</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNTZjZTIwLi4yZmM1ZWM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDMt
MDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBvbmNlIHRoZXkgYmVjb21lIHVudXNlZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFzZXMuaHRt
bDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy8y
NTYtb3Blbi1kYXRhYmFzZXMuanM6IEFkZGVkLgorCiAyMDE2LTAzLTAxICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlYmFzZWxpbmUgaXNwbGF5bGlzdHMv
ZXh0ZW50LWluY2x1ZGVzIHRlc3RzIGZvciBtYWMtd2sxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2LW9wZW4tZGF0YWJhc2VzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFz
ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzODAz
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vMjU2LW9wZW4tZGF0YWJhc2VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlz
IHRlc3QgbWFrZXMgc3VyZSB0aGF0IGlmIHlvdSBvcGVuIDEyOCB1bmlxdWUgZGF0YWJhc2VzLCBj
bG9zZSB5b3VyIGNvbm5lY3Rpb25zIHRvIHRoZW0sIGFuZCB0aGVuIG9wZW4gMTI4IG90aGVyIHVu
aXF1ZSBkYXRhYmFzZXMsIHRoYXQgaXQgd29ya3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitPcGVuZWQgdGhlIGZpcnN0IDEyOCBkYXRhYmFzZXMuIE5vdyBjbG9zaW5nIHRoZW0u
Li4KK05vdyBvcGVuaW5nIHRoZSBzZWNvbmQgMTI4IGRhdGFiYXNlcworU3VjY2Vzc2Z1bGx5IG9w
ZW5lZCAyNTYgZGF0YWJhc2VzIChhZnRlciBjbG9zaW5nIHRoZSBmaXJzdCAxMjgpCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFi
YXNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDM2MWQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2
LW9wZW4tZGF0YWJhc2VzLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy8yNTYtb3Blbi1kYXRhYmFzZXMuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL3Jlc291cmNlcy8yNTYtb3Blbi1kYXRhYmFzZXMuanMgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzLzI1Ni1vcGVuLWRhdGFiYXNlcy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg1MWE3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy8y
NTYtb3Blbi1kYXRhYmFzZXMuanMKQEAgLTAsMCArMSwzOSBAQAorZGVzY3JpcHRpb24oIlRoaXMg
dGVzdCBtYWtlcyBzdXJlIHRoYXQgaWYgeW91IG9wZW4gMTI4IHVuaXF1ZSBkYXRhYmFzZXMsIGNs
b3NlIHlvdXIgY29ubmVjdGlvbnMgdG8gdGhlbSwgYW5kIHRoZW4gb3BlbiAxMjggb3RoZXIgdW5p
cXVlIGRhdGFiYXNlcywgdGhhdCBpdCB3b3Jrcy4iKTsKKwordmFyIGRhdGFiYXNlQ29ubmVjdGlv
bnMgPSBuZXcgQXJyYXk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyArK2kpIHsKKyAgICB2
YXIgcmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiZGF0YWJhc2UiICsgaSk7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCJVbmV4cGVjdGVk
IGVycm9yIG9wZW5pbmcgZGF0YWJhc2UgIiArIGkpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBkYXRhYmFzZUNvbm5lY3Rpb25zLnB1c2goZXZlbnQudGFyZ2V0LnJlc3VsdCk7CisgICAgICAg
IGlmIChkYXRhYmFzZUNvbm5lY3Rpb25zLmxlbmd0aCA9PSAxMjgpCisgICAgICAgICAgICBjb250
aW51ZVRlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCit7CisgICAg
ZGVidWcoIk9wZW5lZCB0aGUgZmlyc3QgMTI4IGRhdGFiYXNlcy4gTm93IGNsb3NpbmcgdGhlbS4u
LiIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgICAgIGRhdGFiYXNl
Q29ubmVjdGlvbnNbaV0uY2xvc2UoKTsKKworICAgIGRlYnVnKCJOb3cgb3BlbmluZyB0aGUgc2Vj
b25kIDEyOCBkYXRhYmFzZXMiKTsKKyAgICBmb3IgKHZhciBpID0gMTI4OyBpIDwgMjU2OyArK2kp
IHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4oImRhdGFiYXNl
IiArIGkpOworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCJVbmV4cGVjdGVkIGVycm9yIG9wZW5pbmcgZGF0YWJhc2UgIiArIGkpOworICAg
ICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9u
cy5wdXNoKGV2ZW50LnRhcmdldC5yZXN1bHQpOworICAgICAgICAgICAgaWYgKGRhdGFiYXNlQ29u
bmVjdGlvbnMubGVuZ3RoID09IDI1NikgeworICAgICAgICAgICAgICAgIGRlYnVnKCJTdWNjZXNz
ZnVsbHkgb3BlbmVkIDI1NiBkYXRhYmFzZXMgKGFmdGVyIGNsb3NpbmcgdGhlIGZpcnN0IDEyOCki
KTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYmQ2MjA2Li42NmFlYmJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTcgQEAKKzIwMTYtMDMtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgorCisgICAgICAgIE1vZGVybiBJREI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBv
bmNlIHRoZXkgYmVjb21lIHVudXNlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NDkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1k
YXRhYmFzZXMuaHRtbAorCisgICAgICAgIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIGF0dGVtcHRzIHRv
IG9wZW4gYSAyNTZ0aCBkYXRhYmFzZSBpbiB0aGUgRGF0YWJhc2VQcm9jZXNzIHdpbGwgZmFpbCBv
biBNYWMuCisgICAgICAgIAorICAgICAgICBEdWUgdG8gU1FMaXRlIGpvdXJuYWwgZmlsZXMsIHRo
aXMgbGltaXQgY291bGQgY29tZSB1cCBhcyBlYXJseSBhcyAxMjggZGF0YWJhc2VzIGlmIHRoZXkg
YXJlIGFsbAorICAgICAgICBpbiBhY3RpdmUgdXNlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBiZWNhdXNlIGxhdW5jaGQgLSBieSBkZWZhdWx0IC0gbGltaXRzIHhwYyBzZXJ2aWNlcyB0byBo
YXZpbmcgMjU2IG9wZW4gZmlsZSBoYW5kbGVzIGJ5IGRlZmF1bHQuCisgICAgICAgIAorICAgICAg
ICBXaGlsZSB3ZSBzaG91bGQgZXhwbG9yZSByYWlzaW5nIHRoZSBsaW1pdCwgd2Ugc2hvdWxkIGFs
c28gY2xvc2UgZGF0YWJhc2VzIHdlIG5vIGxvbmdlciBuZWVkLgorICAgICAgICAKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIAor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNsb3NlVW5pcXVlSURCRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRlbGV0ZVVuaXF1ZUlE
QkRhdGFiYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpNZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6On5V
bmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOiBIYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgb3BlbmluZworICAgICAgICAgIHRoZSBiYWNraW5nIHN0b3JlIGZhaWxlZCBieSBmaXJp
bmcgYW4gZXJyb3IgZXZlbnQgaW5zdGVhZCBvZiBwcmV0ZW5kaW5nIGV2ZXJ5dGhpbmcgaXMgb2th
eS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmlzQ3VycmVu
dGx5SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVkKTogSWYgdGhlIGRhdGFiYXNlIGlz
IG5vdAorICAgICAgICAgIGN1cnJlbnRseSBpbiB1c2UsIGNsb3NlIGl0LgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9u
Q29tcGxldGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZVBlbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5KTogQWN0dWFsbHkgZ2V0IHRoaXMg
cmlnaHQuCisKIDIwMTYtMDMtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIE1vZGVybiBJREI6IFBvc3NpYmxlIGNyYXNoIGRlYWxsb2NhdGluZyBJREJEYXRh
YmFzZUluZm8vSURCT2JqZWN0U3RvcmVJbmZvL0lEQkluZGV4SW5mby4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUu
aAppbmRleCBjMzMyNWFhLi41M2YxMTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIElEQkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURC
QmFja2luZ1N0b3JlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYg
Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBn
ZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mKSA9IDA7CiAKICAgICB2
aXJ0dWFsIElEQkVycm9yIGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZv
JikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgPSAwOwpAQCAtNzksNyAr
NzksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoKSA9IDA7CisKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGlzRXBoZW1lcmFsKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCmluZGV4IDY4YTczZTYuLmMzY2I0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0xNTcsOSArMTU3LDkg
QEAgdm9pZCBJREJTZXJ2ZXI6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSkKICAgICBkYXRhYmFzZS0+aGFuZGxlRGVsZXRlKCpjb25uZWN0aW9uLCByZXF1
ZXN0RGF0YSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpkZWxldGVVbmlxdWVJREJEYXRhYmFzZShV
bmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpCit2b2lkIElEQlNlcnZlcjo6Y2xvc2VVbmlxdWVJ
REJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpCiB7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQlNlcnZlcjo6ZGVsZXRlVW5pcXVlSURCRGF0YWJhc2UiKTsKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCU2VydmVyOjpjbG9zZVVuaXF1ZUlEQkRhdGFiYXNlIik7CiAKICAgICBhdXRv
IGRlbGV0ZWREYXRhYmFzZSA9IG1fdW5pcXVlSURCRGF0YWJhc2VNYXAudGFrZShkYXRhYmFzZS5p
ZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVF9VTlVTRUQoZGVsZXRlZERhdGFiYXNlLCBkZWxldGVk
RGF0YWJhc2UuZ2V0KCkgPT0gJmRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCA1ZDgxMjQxLi4xMTAxNDY1
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwogCi0gICAg
dm9pZCBkZWxldGVVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYpOworICAgIHZv
aWQgY2xvc2VVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLmNwcAppbmRleCA0MDYzN2FiLi4wMDhlNTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTQ3LDggKzQ3LDEyIEBAIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bihNZW1vcnlJREJCYWNraW5nU3RvCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CiAgICAgLCBtX2luZm8oaW5mbykKIHsKLSAgICBpZiAobV9pbmZvLm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkKLSAgICAgICAgbV9vcmlnaW5hbERh
dGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2JhY2tpbmdT
dG9yZS5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbygpKTsKKyAgICBpZiAobV9pbmZvLm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAg
ICBJREJEYXRhYmFzZUluZm8gaW5mbzsKKyAgICAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGluZm8pOworICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCisgICAgICAgICAgICBtX29yaWdpbmFsRGF0YWJhc2VJbmZvID0gc3RkOjptYWtl
X3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGluZm8pOworICAgIH0KIH0KIAogTWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb246On5NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDU0YzFmYTguLjZjMWZkODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01NSwxMiArNTUsMTMgQEAgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjp+TWVtb3J5SURCQmFja2luZ1N0b3JlKCkKIHsKIH0KIAotY29uc3Qg
SURCRGF0YWJhc2VJbmZvJiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0
YWJhc2VJbmZvKCkKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvKQogewogICAgIGlmICghbV9kYXRh
YmFzZUluZm8pCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJE
YXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCk7CiAKLSAgICByZXR1
cm4gKm1fZGF0YWJhc2VJbmZvOworICAgIGluZm8gPSAqbV9kYXRhYmFzZUluZm87CisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnNldERhdGFiYXNlSW5m
byhjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggNDkyMDJmNi4uMTU5MzE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUu
aApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+TWVtb3J5SURC
QmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUgZmluYWw7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKSBvdmVycmlkZSBmaW5hbDsK
KyAgICB2aXJ0dWFsIElEQkVycm9yIGdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFi
YXNlSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZvaWQgc2V0RGF0YWJhc2VJbmZvKGNvbnN0
IElEQkRhdGFiYXNlSW5mbyYpOwogCiAgICAgdmlydHVhbCBJREJFcnJvciBiZWdpblRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwpAQCAtNzEsNyAr
NzEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFs
OworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVt
ZXJhbCgpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVtb3Zl
T2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUmKTsKICAg
ICB2b2lkIHJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChSZWY8TWVtb3J5
T2JqZWN0U3RvcmU+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA4
N2NlNmM2Li5lYzc5MzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAt
NTU3LDE0ICs1NTcsMTQgQEAgU3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZnVsbERhdGFi
YXNlUGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmdWxs
RGF0YWJhc2VEaXJlY3RvcnkoKSwgIkluZGV4ZWREQi5zcWxpdGUzIik7CiB9CiAKLWNvbnN0IElE
QkRhdGFiYXNlSW5mbyYgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbygpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNo
RGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyAtIGRh
dGFiYXNlICVzIiwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgaWYgKG1fZGF0YWJhc2VJbmZvKQotICAgICAgICByZXR1cm4gKm1fZGF0YWJhc2VJbmZv
OwotCi0gICAgbV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlSW5m
bz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCAwKTsKKyAgICBpZiAobV9kYXRhYmFzZUlu
Zm8pIHsKKyAgICAgICAgaW5mbyA9ICptX2RhdGFiYXNlSW5mbzsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CiAKICAgICBtYWtlQWxsRGlyZWN0b3JpZXMoZnVsbERhdGFiYXNlRGlyZWN0b3J5
KCkpOwogICAgIFN0cmluZyBkYkZpbGVuYW1lID0gZnVsbERhdGFiYXNlUGF0aCgpOwpAQCAtNTc2
LDcgKzU3Niw3IEBAIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbygpCiAgICAgfQogCiAgICAgaWYgKCFtX3NxbGl0
ZURCKQotICAgICAgICByZXR1cm4gKm1fZGF0YWJhc2VJbmZvOworICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0
byBvcGVuIGRhdGFiYXNlIGZpbGUgb24gZGlzayIpIH07CiAKICAgICBtX3NxbGl0ZURCLT5zZXRD
b2xsYXRpb25GdW5jdGlvbigiSURCS0VZIiwgW3RoaXNdKGludCBhTGVuZ3RoLCBjb25zdCB2b2lk
KiBhLCBpbnQgYkxlbmd0aCwgY29uc3Qgdm9pZCogYikgewogICAgICAgICByZXR1cm4gaWRiS2V5
Q29sbGF0ZShhTGVuZ3RoLCBhLCBiTGVuZ3RoLCBiKTsKQEAgLTU4NSwyNSArNTg1LDI4IEBAIGNv
bnN0IElEQkRhdGFiYXNlSW5mbyYgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlz
aERhdGFiYXNlSW5mbygpCiAgICAgaWYgKCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFi
bGUgaW4gZGF0YWJhc2UiKTsKICAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiAqbV9kYXRhYmFzZUluZm87CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRpbmcgb3IgbWln
cmF0aW5nIFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UiKSB9OwogICAgIH0KIAogICAgIGlmICgh
ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpKSB7CiAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4IFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2Ui
KTsKICAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAqbV9kYXRh
YmFzZUluZm87CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4IFJl
Y29yZHMgdGFibGUgaW4gZGF0YWJhc2UiKSB9OwogICAgIH0KIAogICAgIGF1dG8gZGF0YWJhc2VJ
bmZvID0gZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAgICAgaWYgKCFkYXRhYmFzZUlu
Zm8pCiAgICAgICAgIGRhdGFiYXNlSW5mbyA9IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFi
YXNlSW5mbygpOwogCi0gICAgaWYgKCFkYXRhYmFzZUluZm8pCisgICAgaWYgKCFkYXRhYmFzZUlu
Zm8pIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIElEQiBkYXRhYmFz
ZSBhdCBwYXRoICclcyciLCBkYkZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKKyAg
ICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGVzdGFibGlz
aCBJREIgZGF0YWJhc2UgZmlsZSIpIH07CisgICAgfSBlbHNlIHsKICAgICAgICAgbV9kYXRhYmFz
ZUluZm8gPSBXVEZNb3ZlKGRhdGFiYXNlSW5mbyk7Ci0KLSAgICByZXR1cm4gKm1fZGF0YWJhc2VJ
bmZvOworICAgICAgICBpbmZvID0gKm1fZGF0YWJhc2VJbmZvOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5z
YWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaAppbmRleCAxMzFjMzllLi5kZTY2ODcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+
U1FMaXRlSURCQmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUgZmluYWw7CiAKLSAgICB2aXJ0dWFsIGNv
bnN0IElEQkRhdGFiYXNlSW5mbyYgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZv
KElEQkRhdGFiYXNlSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBJREJFcnJv
ciBiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpIG92ZXJyaWRlIGZp
bmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgb3ZlcnJpZGUgZmluYWw7CkBA
IC03NSw3ICs3NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSURCT2JqZWN0U3RvcmVJbmZv
KiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBvdmVy
cmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKCkgb3ZlcnJp
ZGUgZmluYWw7CisKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2Fj
dGlvbnMoKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0VwaGVtZXJhbCgpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2
b2lkIHVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29yJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuY3BwCmluZGV4IDA0YjkzOWYuLmE5YjIzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcApAQCAtNTAsMTEgKzUwLDEyIEBAIFVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRh
YmFzZShJREJTZXJ2ZXImIHNlcnZlciwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmCiAgICAgLCBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25U
aW1lcigqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVyYXRpb25BbmRUcmFuc2FjdGlvblRp
bWVyRmlyZWQpCiB7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlx
dWVJREJEYXRhYmFzZSgpICglcCkgJXMiLCB0aGlzLCBtX2lkZW50aWZpZXIuZGVidWdTdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIH0KIAogVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRh
YmFzZSgpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVl
SURCRGF0YWJhc2UoKSAoJXApIiwgdGhpcyk7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlE
QkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKSAoJXApICVzIiwgdGhpcywgbV9pZGVudGlm
aWVyLmRlYnVnU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgQVNTRVJUKCFoYXNBbnlQZW5k
aW5nQ2FsbGJhY2tzKCkpOwogICAgIEFTU0VSVChtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuaXNF
bXB0eSgpKTsKICAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CkBA
IC0xMzksNiArMTQwLDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50
T3Blbk9wZXJhdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlT3BlbkVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gSURC
UmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5y
ZXF1ZXN0SWRlbnRpZmllcigpLCBtX2JhY2tpbmdTdG9yZU9wZW5FcnJvcik7CisgICAgICAgIG1f
Y3VycmVudE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0
KTsKKyAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CisKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIFJlZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+IGNv
bm5lY3Rpb24gPSBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNyZWF0ZSgqdGhpcywgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbigpKTsKICAgICBVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24qIHJhd0Nvbm5lY3Rpb24gPSAmY29ubmVjdGlvbi5nZXQoKTsKIApAQCAtMjE0
LDkgKzIyMywxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogICAgICAgICBtX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0
aW9ucyA9IGZhbHNlOworICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci5jcmVh
dGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7Ci0gICAgICAgIGF1dG8gZGF0YWJhc2VJbmZvID0g
YmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbygpOworCisgICAgICAgIElE
QkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAgICAgIGF1dG8gZXJyb3IgPSBiYWNraW5n
U3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CisgICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldHRp
bmcgZGF0YWJhc2UgaW5mbyBmcm9tIGRhdGFiYXNlICVzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBk
ZWxldGUiLCBpZGVudGlmaWVyLmRlYnVnU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKICAgICAg
ICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNr
aW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIH0KQEAgLTI0OCwxMiArMjYzLDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRf
dCBkZWxldGVkVmVyc2lvbikKICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5ub3RpZnlEaWRE
ZWxldGVEYXRhYmFzZSgqbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbyk7CiAgICAgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAKLSAgICBtX2RlbGV0ZVBlbmRpbmcgPSBm
YWxzZTsKICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAogICAg
IGlmIChtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGlmIChtX3BlbmRpbmdPcGVuREJSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
X3NlcnZlci5kZWxldGVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAgICAgICBtX3Nl
cnZlci5jbG9zZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgaW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpOwogICAgIH0KQEAgLTQ2
NCwxNyArNDc4LDIxIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgQVNTRVJUKCFtX2Jh
Y2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci5jcmVhdGVCYWNraW5n
U3RvcmUoaWRlbnRpZmllcik7CiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91
c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucygpOwotICAgIGF1dG8gZGF0YWJhc2VJbmZvID0gbV9iYWNraW5nU3RvcmUtPmdldE9y
RXN0YWJsaXNoRGF0YWJhc2VJbmZvKCk7CisgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9
IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgbV9zZXJ2ZXIucG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8pKTsKKyAgICBJREJEYXRhYmFz
ZUluZm8gZGF0YWJhc2VJbmZvOworICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0
T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKworICAgIG1fc2VydmVyLnBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSW5mbyYgaW5mbykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJy
b3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CiAgICAgCiAg
ICAgbV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oaW5m
byk7CisgICAgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3IgPSBlcnJvcjsKIAogICAgIEFTU0VSVCht
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBm
YWxzZTsKQEAgLTEwOTcsNiArMTExNSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1
ZXVlVHJhbnNhY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+JiYgdAogICAg
IGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKIH0KIAorYm9vbCBVbmlxdWVJ
REJEYXRhYmFzZTo6aXNDdXJyZW50bHlJblVzZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX29w
ZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9jbG9zZVBlbmRpbmdEYXRhYmFz
ZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0
eSgpIHx8IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgfHwgbV92ZXJzaW9uQ2hhbmdlRGF0YWJhc2VD
b25uZWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1faXNPcGVuaW5nQmFj
a2luZ1N0b3JlIHx8IG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzczsKK30KKwogdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6aW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjppbnZva2VPcGVyYXRpb25B
bmRUcmFuc2FjdGlvblRpbWVyKCkiKTsKQEAgLTExMTAsNiArMTEzMywxNSBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpvcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyRmlyZWQoKQogCiAgICAg
UmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0b3IodGhpcyk7CiAKKyAgICAvLyBUaGlz
IFVuaXF1ZUlEQkRhdGFiYXNlIG1pZ2h0IGJlIG5vIGxvbmdlciBpbiB1c2UgYnkgYW55IHdlYiBw
YWdlLgorICAgIC8vIEFzc3VtaW5nIGl0IGlzIG5vdCBlcGhlbWVyYWwsIHRoZSBzZXJ2ZXIgc2hv
dWxkIG5vdyBjbG9zZSBpdCB0byBmcmVlIHVwIHJlc291cmNlcy4KKyAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlSXNFcGhlbWVyYWwgJiYgIWlzQ3VycmVudGx5SW5Vc2UoKSkgeworICAgICAgICBBU1NF
UlQobV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtX2lu
UHJvZ3Jlc3NUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9zZXJ2ZXIuY2xvc2VV
bmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAv
LyBUaGUgY3VycmVudCBvcGVyYXRpb24gbWlnaHQgcmVxdWlyZSBtdWx0aXBsZSBhdHRlbXB0cyB0
byBoYW5kbGUsIHNvIHRyeSB0bwogICAgIC8vIG1ha2UgZnVydGhlciBwcm9ncmVzcyBvbiBpdCBu
b3cuCiAgICAgaWYgKG1fY3VycmVudE9wZW5EQlJlcXVlc3QpCkBAIC0xMjU5LDcgKzEyOTEsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaQogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlz
IGRhdGFiYXNlIGhhZCBpdHMgYmFja2luZyBzdG9yZSBkZWxldGVkIGJ1dCB0aGVyZSB3ZXJlIGEg
ZmV3IG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLgogICAgIC8vIElmIHRoaXMg
dHJhbnNhY3Rpb24gY29tcGxldGluZyB3YXMgdGhlIGxhc3Qgb2YgdGhvc2Ugb3BlcmF0aW9ucywg
d2UgY2FuIGZpbmFsbHkgZGVsZXRlIHRoaXMgVW5pcXVlSURCRGF0YWJhc2UuCiAgICAgaWYgKG1f
Y2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nT3Bl
bkRCUmVxdWVzdHMuaXNFbXB0eSgpICYmICFtX2RhdGFiYXNlSW5mbykgewotICAgICAgICBtX3Nl
cnZlci5kZWxldGVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAgIG1fc2VydmVyLmNs
b3NlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGJkYmIzODQuLmExMDhmMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCkBAIC0xMDEsNyArMTAxLDYgQEAgcHVibGljOgogICAgIHZvaWQgZW5xdWV1ZVRy
YW5zYWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmKTsKIAogICAgIHZv
aWQgaGFuZGxlRGVsZXRlKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYsIGNvbnN0IElEQlJlcXVlc3RE
YXRhJik7Ci0gICAgYm9vbCBkZWxldGVQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVQ
ZW5kaW5nOyB9CiAKICAgICBzdGF0aWMgSlNDOjpWTSYgZGF0YWJhc2VUaHJlYWRWTSgpOwogICAg
IHN0YXRpYyBKU0M6OkV4ZWNTdGF0ZSYgZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKTsKQEAgLTE0
Niw3ICsxNDUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAg
ICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwot
ICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mKTsKKyAg
ICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3Qg
SURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CkBAIC0xNzMsNiArMTcyLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCk7CiAKICAgICBib29sIGhh
c0FueVBlbmRpbmdDYWxsYmFja3MoKSBjb25zdDsKKyAgICBib29sIGlzQ3VycmVudGx5SW5Vc2Uo
KSBjb25zdDsKIAogICAgIHZvaWQgaW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigp
OwogICAgIHZvaWQgb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVkKCk7CkBAIC0xOTEs
MTEgKzE5MSwxMyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKIAogICAgIGJvb2wgbV9pc09wZW5p
bmdCYWNraW5nU3RvcmUgeyBmYWxzZSB9OworICAgIElEQkVycm9yIG1fYmFja2luZ1N0b3JlT3Bl
bkVycm9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0
b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fZGF0YWJhc2VJbmZv
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fbW9zdFJlY2VudERlbGV0
ZWREYXRhYmFzZUluZm87CiAKICAgICBib29sIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRh
bmVvdXNUcmFuc2FjdGlvbnMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCB7IGZhbHNlIH07CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFcnJvckNhbGxiYWNr
PiBtX2Vycm9yQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIEtleURhdGFDYWxsYmFj
az4gbV9rZXlEYXRhQ2FsbGJhY2tzOwpAQCAtMjEyLDcgKzIxNCw2IEBAIHByaXZhdGU6CiAgICAg
SGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fb2JqZWN0U3RvcmVUcmFuc2FjdGlvbkNvdW50czsK
ICAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX29iamVjdFN0b3JlV3JpdGVUcmFuc2FjdGlvbnM7CiAK
LSAgICBib29sIG1fZGVsZXRlUGVuZGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2RlbGV0ZUJh
Y2tpbmdTdG9yZUluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJ
bmZvLmNwcAppbmRleCBhMDQxNTQ0Li41NDY0NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZv
LmNwcApAQCAtODgsOCArODgsMTMgQEAgSURCT2JqZWN0U3RvcmVJbmZvIElEQk9iamVjdFN0b3Jl
SW5mbzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICBJREJPYmplY3RTdG9yZUluZm8gcmVz
dWx0ID0geyBtX2lkZW50aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgbV9rZXlQYXRoLmlz
b2xhdGVkQ29weSgpLCBtX2F1dG9JbmNyZW1lbnQgfTsKIAotICAgIGZvciAoYXV0byYgaXRlcmF0
b3IgOiBtX2luZGV4TWFwKQorICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4TWFwKSB7
CiAgICAgICAgIHJlc3VsdC5tX2luZGV4TWFwLnNldChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZh
bHVlLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLmtleSA+IHJlc3VsdC5t
X21heEluZGV4SUQpCisgICAgICAgICAgICByZXN1bHQubV9tYXhJbmRleElEID0gaXRlcmF0b3Iu
a2V5OworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQubV9tYXhJbmRleElEID09IG1fbWF4SW5k
ZXhJRCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272675</attachid>
            <date>2016-03-02 12:26:04 -0800</date>
            <delta_ts>2016-03-02 22:45:45 -0800</delta_ts>
            <desc>Patch v1 with more style</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26048</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNTZjZTIwLi4yZmM1ZWM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDMt
MDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBvbmNlIHRoZXkgYmVjb21lIHVudXNlZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFzZXMuaHRt
bDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy8y
NTYtb3Blbi1kYXRhYmFzZXMuanM6IEFkZGVkLgorCiAyMDE2LTAzLTAxICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlYmFzZWxpbmUgaXNwbGF5bGlzdHMv
ZXh0ZW50LWluY2x1ZGVzIHRlc3RzIGZvciBtYWMtd2sxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2LW9wZW4tZGF0YWJhc2VzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFz
ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzODAz
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vMjU2LW9wZW4tZGF0YWJhc2VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlz
IHRlc3QgbWFrZXMgc3VyZSB0aGF0IGlmIHlvdSBvcGVuIDEyOCB1bmlxdWUgZGF0YWJhc2VzLCBj
bG9zZSB5b3VyIGNvbm5lY3Rpb25zIHRvIHRoZW0sIGFuZCB0aGVuIG9wZW4gMTI4IG90aGVyIHVu
aXF1ZSBkYXRhYmFzZXMsIHRoYXQgaXQgd29ya3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitPcGVuZWQgdGhlIGZpcnN0IDEyOCBkYXRhYmFzZXMuIE5vdyBjbG9zaW5nIHRoZW0u
Li4KK05vdyBvcGVuaW5nIHRoZSBzZWNvbmQgMTI4IGRhdGFiYXNlcworU3VjY2Vzc2Z1bGx5IG9w
ZW5lZCAyNTYgZGF0YWJhc2VzIChhZnRlciBjbG9zaW5nIHRoZSBmaXJzdCAxMjgpCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy5o
dG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFi
YXNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDM2MWQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2
LW9wZW4tZGF0YWJhc2VzLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy8yNTYtb3Blbi1kYXRhYmFzZXMuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL3Jlc291cmNlcy8yNTYtb3Blbi1kYXRhYmFzZXMuanMgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzLzI1Ni1vcGVuLWRhdGFiYXNlcy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg1MWE3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy8y
NTYtb3Blbi1kYXRhYmFzZXMuanMKQEAgLTAsMCArMSwzOSBAQAorZGVzY3JpcHRpb24oIlRoaXMg
dGVzdCBtYWtlcyBzdXJlIHRoYXQgaWYgeW91IG9wZW4gMTI4IHVuaXF1ZSBkYXRhYmFzZXMsIGNs
b3NlIHlvdXIgY29ubmVjdGlvbnMgdG8gdGhlbSwgYW5kIHRoZW4gb3BlbiAxMjggb3RoZXIgdW5p
cXVlIGRhdGFiYXNlcywgdGhhdCBpdCB3b3Jrcy4iKTsKKwordmFyIGRhdGFiYXNlQ29ubmVjdGlv
bnMgPSBuZXcgQXJyYXk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyArK2kpIHsKKyAgICB2
YXIgcmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiZGF0YWJhc2UiICsgaSk7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCJVbmV4cGVjdGVk
IGVycm9yIG9wZW5pbmcgZGF0YWJhc2UgIiArIGkpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBkYXRhYmFzZUNvbm5lY3Rpb25zLnB1c2goZXZlbnQudGFyZ2V0LnJlc3VsdCk7CisgICAgICAg
IGlmIChkYXRhYmFzZUNvbm5lY3Rpb25zLmxlbmd0aCA9PSAxMjgpCisgICAgICAgICAgICBjb250
aW51ZVRlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCit7CisgICAg
ZGVidWcoIk9wZW5lZCB0aGUgZmlyc3QgMTI4IGRhdGFiYXNlcy4gTm93IGNsb3NpbmcgdGhlbS4u
LiIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgICAgIGRhdGFiYXNl
Q29ubmVjdGlvbnNbaV0uY2xvc2UoKTsKKworICAgIGRlYnVnKCJOb3cgb3BlbmluZyB0aGUgc2Vj
b25kIDEyOCBkYXRhYmFzZXMiKTsKKyAgICBmb3IgKHZhciBpID0gMTI4OyBpIDwgMjU2OyArK2kp
IHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4oImRhdGFiYXNl
IiArIGkpOworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRlYnVnKCJVbmV4cGVjdGVkIGVycm9yIG9wZW5pbmcgZGF0YWJhc2UgIiArIGkpOworICAg
ICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9u
cy5wdXNoKGV2ZW50LnRhcmdldC5yZXN1bHQpOworICAgICAgICAgICAgaWYgKGRhdGFiYXNlQ29u
bmVjdGlvbnMubGVuZ3RoID09IDI1NikgeworICAgICAgICAgICAgICAgIGRlYnVnKCJTdWNjZXNz
ZnVsbHkgb3BlbmVkIDI1NiBkYXRhYmFzZXMgKGFmdGVyIGNsb3NpbmcgdGhlIGZpcnN0IDEyOCki
KTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYmQ2MjA2Li42NmFlYmJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTcgQEAKKzIwMTYtMDMtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgorCisgICAgICAgIE1vZGVybiBJREI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBv
bmNlIHRoZXkgYmVjb21lIHVudXNlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NDkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1k
YXRhYmFzZXMuaHRtbAorCisgICAgICAgIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIGF0dGVtcHRzIHRv
IG9wZW4gYSAyNTZ0aCBkYXRhYmFzZSBpbiB0aGUgRGF0YWJhc2VQcm9jZXNzIHdpbGwgZmFpbCBv
biBNYWMuCisgICAgICAgIAorICAgICAgICBEdWUgdG8gU1FMaXRlIGpvdXJuYWwgZmlsZXMsIHRo
aXMgbGltaXQgY291bGQgY29tZSB1cCBhcyBlYXJseSBhcyAxMjggZGF0YWJhc2VzIGlmIHRoZXkg
YXJlIGFsbAorICAgICAgICBpbiBhY3RpdmUgdXNlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBiZWNhdXNlIGxhdW5jaGQgLSBieSBkZWZhdWx0IC0gbGltaXRzIHhwYyBzZXJ2aWNlcyB0byBo
YXZpbmcgMjU2IG9wZW4gZmlsZSBoYW5kbGVzIGJ5IGRlZmF1bHQuCisgICAgICAgIAorICAgICAg
ICBXaGlsZSB3ZSBzaG91bGQgZXhwbG9yZSByYWlzaW5nIHRoZSBsaW1pdCwgd2Ugc2hvdWxkIGFs
c28gY2xvc2UgZGF0YWJhc2VzIHdlIG5vIGxvbmdlciBuZWVkLgorICAgICAgICAKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIAor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNsb3NlVW5pcXVlSURCRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRlbGV0ZVVuaXF1ZUlE
QkRhdGFiYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpNZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6On5V
bmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOiBIYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgb3BlbmluZworICAgICAgICAgIHRoZSBiYWNraW5nIHN0b3JlIGZhaWxlZCBieSBmaXJp
bmcgYW4gZXJyb3IgZXZlbnQgaW5zdGVhZCBvZiBwcmV0ZW5kaW5nIGV2ZXJ5dGhpbmcgaXMgb2th
eS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmlzQ3VycmVu
dGx5SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVkKTogSWYgdGhlIGRhdGFiYXNlIGlz
IG5vdAorICAgICAgICAgIGN1cnJlbnRseSBpbiB1c2UsIGNsb3NlIGl0LgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9u
Q29tcGxldGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZVBlbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5KTogQWN0dWFsbHkgZ2V0IHRoaXMg
cmlnaHQuCisKIDIwMTYtMDMtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIE1vZGVybiBJREI6IFBvc3NpYmxlIGNyYXNoIGRlYWxsb2NhdGluZyBJREJEYXRh
YmFzZUluZm8vSURCT2JqZWN0U3RvcmVJbmZvL0lEQkluZGV4SW5mby4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUu
aAppbmRleCBjMzMyNWFhLi41M2YxMTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIElEQkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURC
QmFja2luZ1N0b3JlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYg
Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBn
ZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mKSA9IDA7CiAKICAgICB2
aXJ0dWFsIElEQkVycm9yIGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZv
JikgPSAwOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgPSAwOwpAQCAtNzksNyAr
NzksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoKSA9IDA7CisKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGlzRXBoZW1lcmFsKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCmluZGV4IDY4YTczZTYuLmMzY2I0NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0xNTcsOSArMTU3LDkg
QEAgdm9pZCBJREJTZXJ2ZXI6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSkKICAgICBkYXRhYmFzZS0+aGFuZGxlRGVsZXRlKCpjb25uZWN0aW9uLCByZXF1
ZXN0RGF0YSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpkZWxldGVVbmlxdWVJREJEYXRhYmFzZShV
bmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpCit2b2lkIElEQlNlcnZlcjo6Y2xvc2VVbmlxdWVJ
REJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpCiB7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQlNlcnZlcjo6ZGVsZXRlVW5pcXVlSURCRGF0YWJhc2UiKTsKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCU2VydmVyOjpjbG9zZVVuaXF1ZUlEQkRhdGFiYXNlIik7CiAKICAgICBhdXRv
IGRlbGV0ZWREYXRhYmFzZSA9IG1fdW5pcXVlSURCRGF0YWJhc2VNYXAudGFrZShkYXRhYmFzZS5p
ZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVF9VTlVTRUQoZGVsZXRlZERhdGFiYXNlLCBkZWxldGVk
RGF0YWJhc2UuZ2V0KCkgPT0gJmRhdGFiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCA1ZDgxMjQxLi4xMTAxNDY1
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwogCi0gICAg
dm9pZCBkZWxldGVVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYpOworICAgIHZv
aWQgY2xvc2VVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLmNwcAppbmRleCA0MDYzN2FiLi4wMDhlNTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTQ3LDggKzQ3LDEyIEBAIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bihNZW1vcnlJREJCYWNraW5nU3RvCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CiAgICAgLCBtX2luZm8oaW5mbykKIHsKLSAgICBpZiAobV9pbmZvLm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkKLSAgICAgICAgbV9vcmlnaW5hbERh
dGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2JhY2tpbmdT
dG9yZS5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbygpKTsKKyAgICBpZiAobV9pbmZvLm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAg
ICBJREJEYXRhYmFzZUluZm8gaW5mbzsKKyAgICAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGluZm8pOworICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCisgICAgICAgICAgICBtX29yaWdpbmFsRGF0YWJhc2VJbmZvID0gc3RkOjptYWtl
X3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGluZm8pOworICAgIH0KIH0KIAogTWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb246On5NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDU0YzFmYTguLjZjMWZkODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01NSwxMiArNTUsMTMgQEAgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjp+TWVtb3J5SURCQmFja2luZ1N0b3JlKCkKIHsKIH0KIAotY29uc3Qg
SURCRGF0YWJhc2VJbmZvJiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0
YWJhc2VJbmZvKCkKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvKQogewogICAgIGlmICghbV9kYXRh
YmFzZUluZm8pCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJE
YXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCk7CiAKLSAgICByZXR1
cm4gKm1fZGF0YWJhc2VJbmZvOworICAgIGluZm8gPSAqbV9kYXRhYmFzZUluZm87CisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnNldERhdGFiYXNlSW5m
byhjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggNDkyMDJmNi4uMTU5MzE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUu
aApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+TWVtb3J5SURC
QmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUgZmluYWw7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKSBvdmVycmlkZSBmaW5hbDsK
KyAgICB2aXJ0dWFsIElEQkVycm9yIGdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFi
YXNlSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZvaWQgc2V0RGF0YWJhc2VJbmZvKGNvbnN0
IElEQkRhdGFiYXNlSW5mbyYpOwogCiAgICAgdmlydHVhbCBJREJFcnJvciBiZWdpblRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwpAQCAtNzEsNyAr
NzEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFs
OworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVt
ZXJhbCgpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVtb3Zl
T2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUmKTsKICAg
ICB2b2lkIHJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChSZWY8TWVtb3J5
T2JqZWN0U3RvcmU+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA4
N2NlNmM2Li4xNTUwZGY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAg
LTU1NywxNCArNTU3LDE0IEBAIFN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRh
YmFzZVBhdGgoKSBjb25zdAogICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZnVs
bERhdGFiYXNlRGlyZWN0b3J5KCksICJJbmRleGVkREIuc3FsaXRlMyIpOwogfQogCi1jb25zdCBJ
REJEYXRhYmFzZUluZm8mIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlz
aERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8gLSBk
YXRhYmFzZSAlcyIsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsK
IAotICAgIGlmIChtX2RhdGFiYXNlSW5mbykKLSAgICAgICAgcmV0dXJuICptX2RhdGFiYXNlSW5m
bzsKLQotICAgIG1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUlu
Zm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCk7CisgICAgaWYgKG1fZGF0YWJhc2VJ
bmZvKSB7CisgICAgICAgIGluZm8gPSAqbV9kYXRhYmFzZUluZm87CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQogCiAgICAgbWFrZUFsbERpcmVjdG9yaWVzKGZ1bGxEYXRhYmFzZURpcmVjdG9y
eSgpKTsKICAgICBTdHJpbmcgZGJGaWxlbmFtZSA9IGZ1bGxEYXRhYmFzZVBhdGgoKTsKQEAgLTU3
Niw3ICs1NzYsNyBAQCBjb25zdCBJREJEYXRhYmFzZUluZm8mIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKQogICAgIH0KIAogICAgIGlmICghbV9zcWxp
dGVEQikKLSAgICAgICAgcmV0dXJuICptX2RhdGFiYXNlSW5mbzsKKyAgICAgICAgcmV0dXJuIHsg
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUg
dG8gb3BlbiBkYXRhYmFzZSBmaWxlIG9uIGRpc2siKSB9OwogCiAgICAgbV9zcWxpdGVEQi0+c2V0
Q29sbGF0aW9uRnVuY3Rpb24oIklEQktFWSIsIFt0aGlzXShpbnQgYUxlbmd0aCwgY29uc3Qgdm9p
ZCogYSwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGIpIHsKICAgICAgICAgcmV0dXJuIGlkYktl
eUNvbGxhdGUoYUxlbmd0aCwgYSwgYkxlbmd0aCwgYik7CkBAIC01ODUsMjUgKzU4NSwyOCBAQCBj
b25zdCBJREJEYXRhYmFzZUluZm8mIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8oKQogICAgIGlmICghZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKSkgewog
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBSZWNvcmRzIHRh
YmxlIGluIGRhdGFiYXNlIik7CiAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwotICAgICAg
ICByZXR1cm4gKm1fZGF0YWJhc2VJbmZvOworICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5nIG9yIG1p
Z3JhdGluZyBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIikgfTsKICAgICB9CiAKICAgICBpZiAo
IWVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNl
Iik7CiAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gKm1fZGF0
YWJhc2VJbmZvOworICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBS
ZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIikgfTsKICAgICB9CiAKICAgICBhdXRvIGRhdGFiYXNl
SW5mbyA9IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwogICAgIGlmICghZGF0YWJhc2VJ
bmZvKQogICAgICAgICBkYXRhYmFzZUluZm8gPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRh
YmFzZUluZm8oKTsKIAotICAgIGlmICghZGF0YWJhc2VJbmZvKQorICAgIGlmICghZGF0YWJhc2VJ
bmZvKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBJREIgZGF0YWJh
c2UgYXQgcGF0aCAnJXMnIiwgZGJGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fZGF0YWJhc2VJbmZvID0gV1RGTW92ZShkYXRhYmFzZUluZm8pOworICAgICAgICBt
X3NxbGl0ZURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZXN0YWJsaXNoIElEQiBk
YXRhYmFzZSBmaWxlIikgfTsKKyAgICB9CiAKLSAgICByZXR1cm4gKm1fZGF0YWJhc2VJbmZvOwor
ICAgIG1fZGF0YWJhc2VJbmZvID0gV1RGTW92ZShkYXRhYmFzZUluZm8pOworICAgIGluZm8gPSAq
bV9kYXRhYmFzZUluZm87CisgICAgcmV0dXJuIHsgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYg
aW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCAxMzFjMzllLi5kZTY2ODcx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdmlydHVhbCB+U1FMaXRlSURCQmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUg
ZmluYWw7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgZ2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8oKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdl
dE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYpIG92ZXJyaWRlIGZpbmFs
OwogCiAgICAgdmlydHVhbCBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRU
cmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
Zmllcikgb3ZlcnJpZGUgZmluYWw7CkBAIC03NSw3ICs3NSw5IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlQmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUgZmluYWw7CisKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVtZXJhbCgpIG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIHVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vy
c29yJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDA0YjkzOWYuLmE5YjIzY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNTAsMTEgKzUwLDEyIEBAIFVuaXF1ZUlE
QkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZShJREJTZXJ2ZXImIHNlcnZlciwgY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1f
b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyRmlyZWQpCiB7CisgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZSgpICglcCkgJXMiLCB0aGlzLCBt
X2lkZW50aWZpZXIuZGVidWdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogVW5pcXVlSURC
RGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIlVu
aXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKSAoJXApIiwgdGhpcyk7CisgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKSAo
JXApICVzIiwgdGhpcywgbV9pZGVudGlmaWVyLmRlYnVnU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgQVNTRVJUKCFoYXNBbnlQZW5kaW5nQ2FsbGJhY2tzKCkpOwogICAgIEFTU0VSVChtX2lu
UHJvZ3Jlc3NUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQobV9wZW5kaW5nVHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSk7CkBAIC0xMzksNiArMTQwLDE0IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlT3BlbkVycm9yLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRC
UmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBtX2JhY2tpbmdTdG9y
ZU9wZW5FcnJvcik7CisgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24o
KS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKKyAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVz
dCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFJlZjxVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmNyZWF0ZSgqdGhpcywgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbigp
KTsKICAgICBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24qIHJhd0Nvbm5lY3Rpb24gPSAmY29u
bmVjdGlvbi5nZXQoKTsKIApAQCAtMjE0LDkgKzIyMywxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAgICAg
ICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBw
b3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOworICAgICAgICBtX2JhY2tpbmdT
dG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBiYWNr
aW5nU3RvcmUgPSBtX3NlcnZlci5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7Ci0gICAg
ICAgIGF1dG8gZGF0YWJhc2VJbmZvID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbygpOworCisgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAg
ICAgIGF1dG8gZXJyb3IgPSBiYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZv
KGRhdGFiYXNlSW5mbyk7CisgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIGdldHRpbmcgZGF0YWJhc2UgaW5mbyBmcm9tIGRhdGFiYXNlICVz
IHRoYXQgd2UgYXJlIHRyeWluZyB0byBkZWxldGUiLCBpZGVudGlmaWVyLmRlYnVnU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8u
dmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwog
ICAgIH0KQEAgLTI0OCwxMiArMjYzLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERl
bGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICBtX2N1cnJlbnRP
cGVuREJSZXF1ZXN0LT5ub3RpZnlEaWREZWxldGVEYXRhYmFzZSgqbV9tb3N0UmVjZW50RGVsZXRl
ZERhdGFiYXNlSW5mbyk7CiAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAK
LSAgICBtX2RlbGV0ZVBlbmRpbmcgPSBmYWxzZTsKICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUlu
UHJvZ3Jlc3MgPSBmYWxzZTsKIAogICAgIGlmIChtX2Nsb3NlUGVuZGluZ0RhdGFiYXNlQ29ubmVj
dGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3BlbmRpbmdPcGVuREJSZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBtX3NlcnZlci5kZWxldGVVbmlxdWVJREJEYXRhYmFzZSgq
dGhpcyk7CisgICAgICAgICAgICBtX3NlcnZlci5jbG9zZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlz
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW52b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rp
b25UaW1lcigpOwogICAgIH0KQEAgLTQ2NCwxNyArNDc4LDIxIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyCiAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUg
PSBtX3NlcnZlci5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7CiAgICAgbV9iYWNraW5n
U3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5z
dXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwotICAgIGF1dG8gZGF0YWJhc2VJbmZv
ID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCk7CisgICAgbV9i
YWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwog
Ci0gICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFz
ZUluZm8pKTsKKyAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOworICAgIGF1dG8gZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJ
bmZvKTsKKworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbykKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlIik7CiAgICAgCiAgICAgbV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5p
cXVlPElEQkRhdGFiYXNlSW5mbz4oaW5mbyk7CisgICAgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3Ig
PSBlcnJvcjsKIAogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9p
c09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKQEAgLTEwOTcsNiArMTExNSwxMSBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlVHJhbnNhY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24+JiYgdAogICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGlt
ZXIoKTsKIH0KIAorYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6aXNDdXJyZW50bHlJblVzZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8
fCAhbV9jbG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9wZW5k
aW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpIHx8IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgfHwg
bV92ZXJzaW9uQ2hhbmdlRGF0YWJhc2VDb25uZWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uIHx8IG1faXNPcGVuaW5nQmFja2luZ1N0b3JlIHx8IG1fZGVsZXRlQmFja2luZ1N0b3Jl
SW5Qcm9ncmVzczsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW52b2tlT3BlcmF0aW9u
QW5kVHJhbnNhY3Rpb25UaW1lcigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRh
dGFiYXNlOjppbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCkiKTsKQEAgLTExMTAs
NiArMTEzMywxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVyYXRpb25BbmRUcmFuc2Fj
dGlvblRpbWVyRmlyZWQoKQogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0
b3IodGhpcyk7CiAKKyAgICAvLyBUaGlzIFVuaXF1ZUlEQkRhdGFiYXNlIG1pZ2h0IGJlIG5vIGxv
bmdlciBpbiB1c2UgYnkgYW55IHdlYiBwYWdlLgorICAgIC8vIEFzc3VtaW5nIGl0IGlzIG5vdCBl
cGhlbWVyYWwsIHRoZSBzZXJ2ZXIgc2hvdWxkIG5vdyBjbG9zZSBpdCB0byBmcmVlIHVwIHJlc291
cmNlcy4KKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgJiYgIWlzQ3VycmVudGx5
SW5Vc2UoKSkgeworICAgICAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHko
KSk7CisgICAgICAgIEFTU0VSVChtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9zZXJ2ZXIuY2xvc2VVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICAvLyBUaGUgY3VycmVudCBvcGVyYXRpb24gbWlnaHQgcmVx
dWlyZSBtdWx0aXBsZSBhdHRlbXB0cyB0byBoYW5kbGUsIHNvIHRyeSB0bwogICAgIC8vIG1ha2Ug
ZnVydGhlciBwcm9ncmVzcyBvbiBpdCBub3cuCiAgICAgaWYgKG1fY3VycmVudE9wZW5EQlJlcXVl
c3QpCkBAIC0xMjU5LDcgKzEyOTEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppblByb2dy
ZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaQogICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGRhdGFiYXNlIGhhZCBpdHMgYmFja2luZyBzdG9yZSBk
ZWxldGVkIGJ1dCB0aGVyZSB3ZXJlIGEgZmV3IG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBvcGVy
YXRpb25zLgogICAgIC8vIElmIHRoaXMgdHJhbnNhY3Rpb24gY29tcGxldGluZyB3YXMgdGhlIGxh
c3Qgb2YgdGhvc2Ugb3BlcmF0aW9ucywgd2UgY2FuIGZpbmFsbHkgZGVsZXRlIHRoaXMgVW5pcXVl
SURCRGF0YWJhc2UuCiAgICAgaWYgKG1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0aW9ucy5p
c0VtcHR5KCkgJiYgbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpICYmICFtX2RhdGFi
YXNlSW5mbykgewotICAgICAgICBtX3NlcnZlci5kZWxldGVVbmlxdWVJREJEYXRhYmFzZSgqdGhp
cyk7CisgICAgICAgIG1fc2VydmVyLmNsb3NlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGJkYmIzODQu
LmExMDhmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMDEsNyArMTAxLDYgQEAgcHVi
bGljOgogICAgIHZvaWQgZW5xdWV1ZVRyYW5zYWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiYmKTsKIAogICAgIHZvaWQgaGFuZGxlRGVsZXRlKElEQkNvbm5lY3Rpb25Ub0Ns
aWVudCYsIGNvbnN0IElEQlJlcXVlc3REYXRhJik7Ci0gICAgYm9vbCBkZWxldGVQZW5kaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWxldGVQZW5kaW5nOyB9CiAKICAgICBzdGF0aWMgSlNDOjpWTSYg
ZGF0YWJhc2VUaHJlYWRWTSgpOwogICAgIHN0YXRpYyBKU0M6OkV4ZWNTdGF0ZSYgZGF0YWJhc2VU
aHJlYWRFeGVjU3RhdGUoKTsKQEAgLTE0Niw3ICsxNDUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWlu
dDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVy
cm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3Jt
Q2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVy
cm9yJik7CkBAIC0xNzMsNiArMTcyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1Db3Vu
dENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1
aW50NjRfdCk7CiAKICAgICBib29sIGhhc0FueVBlbmRpbmdDYWxsYmFja3MoKSBjb25zdDsKKyAg
ICBib29sIGlzQ3VycmVudGx5SW5Vc2UoKSBjb25zdDsKIAogICAgIHZvaWQgaW52b2tlT3BlcmF0
aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpOwogICAgIHZvaWQgb3BlcmF0aW9uQW5kVHJhbnNhY3Rp
b25UaW1lckZpcmVkKCk7CkBAIC0xOTEsMTEgKzE5MSwxMyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bjsKIAogICAgIGJvb2wgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgeyBmYWxzZSB9OworICAgIElE
QkVycm9yIG1fYmFja2luZ1N0b3JlT3BlbkVycm9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRh
YmFzZUluZm8+IG1fZGF0YWJhc2VJbmZvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm87CiAKICAgICBib29sIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCB7IGZhbHNlIH07CiAKICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBFcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8
dWludDY0X3QsIEtleURhdGFDYWxsYmFjaz4gbV9rZXlEYXRhQ2FsbGJhY2tzOwpAQCAtMjEyLDcg
KzIxNCw2IEBAIHByaXZhdGU6CiAgICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fb2JqZWN0
U3RvcmVUcmFuc2FjdGlvbkNvdW50czsKICAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX29iamVjdFN0
b3JlV3JpdGVUcmFuc2FjdGlvbnM7CiAKLSAgICBib29sIG1fZGVsZXRlUGVuZGluZyB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgeyBmYWxzZSB9Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQk9iamVjdFN0b3JlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAppbmRleCBhMDQxNTQ0Li41NDY0NWE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcApAQCAtODgsOCArODgsMTMgQEAgSURCT2JqZWN0
U3RvcmVJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAg
ICBJREJPYmplY3RTdG9yZUluZm8gcmVzdWx0ID0geyBtX2lkZW50aWZpZXIsIG1fbmFtZS5pc29s
YXRlZENvcHkoKSwgbV9rZXlQYXRoLmlzb2xhdGVkQ29weSgpLCBtX2F1dG9JbmNyZW1lbnQgfTsK
IAotICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4TWFwKQorICAgIGZvciAoYXV0byYg
aXRlcmF0b3IgOiBtX2luZGV4TWFwKSB7CiAgICAgICAgIHJlc3VsdC5tX2luZGV4TWFwLnNldChp
dGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgaWYg
KGl0ZXJhdG9yLmtleSA+IHJlc3VsdC5tX21heEluZGV4SUQpCisgICAgICAgICAgICByZXN1bHQu
bV9tYXhJbmRleElEID0gaXRlcmF0b3Iua2V5OworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHQu
bV9tYXhJbmRleElEID09IG1fbWF4SW5kZXhJRCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272689</attachid>
            <date>2016-03-02 14:53:21 -0800</date>
            <delta_ts>2016-03-02 16:23:40 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29265</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNTZjZTIwLi4wNGY4MGVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDMt
MDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBvbmNlIHRoZXkgYmVjb21lIHVudXNlZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFzZXMuaHRtbDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2V4Y2VlZC1vcGVuLWZpbGUtbGlt
aXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vZXhjZWVkLW9wZW4tZmlsZS1saW1pdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzLzI1Ni1vcGVuLWRhdGFiYXNlcy5qczogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy9leGNlZWQtb3Bl
bi1maWxlLWxpbWl0LmpzOiBBZGRlZC4KKwogMjAxNi0wMy0wMSAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWJhc2VsaW5lIGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcyB0ZXN0cyBmb3IgbWFjLXdrMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGRkZGZiZmUuLmY2Njk3MjMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE0Niw2ICsxNDYs
MTAgQEAgd2Via2l0Lm9yZy9iLzE1MDM2NyBbIE1hdmVyaWNrcyBdIGZhc3QvY2FudmFzL3dlYmds
L29lcy10ZXh0dXJlLWhhbGYtZmxvYXQuaHRtbAogIyBUaGlzIHRlc3QgZ2l2ZXMgYSBkaWZmZXJl
bnQgb3V0cHV0IG9uIEVsQ2FwaXRhbi13azEgb25seS4KIHdlYmtpdC5vcmcvYi8xNTIxNzggWyBZ
b3NlbWl0ZSsgXSBmYXN0L3JlcGxhY2VkL3JlcGxhY2VkLWJyZWFraW5nLmh0bWwgWyBGYWlsdXJl
IF0KIAorIyBEUlQgY2FuIG9wZW4gd2F5IG1vcmUgZmlsZXMgdGhhbiB0aGUgRGF0YWJhc2VQcm9j
ZXNzIHdpdGggV2ViS2l0VGVzdFJ1bm5lciwgYW5kIHRoZSBudW1iZXIgaXMgcmVhc29uYWJsZS4K
KyMgU28gd2Ugc2hvdWxkbid0IGJvdGhlciB3aXRoIHRoaXMgdGVzdCBpbiBXZWJLaXQxLgorc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2V4Y2VlZC1vcGVuLWZpbGUtbGltaXQuaHRtbAorCiAjIyMg
RU5EIE9GICgyKSBGYWlsdXJlcyB3aXRob3V0IGJ1ZyByZXBvcnRzCiAjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFzZXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuLzI1Ni1vcGVuLWRhdGFiYXNlcy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4MDM4NAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYt
b3Blbi1kYXRhYmFzZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdCBt
YWtlcyBzdXJlIHRoYXQgaWYgeW91IG9wZW4gMTI4IHVuaXF1ZSBkYXRhYmFzZXMsIGNsb3NlIHlv
dXIgY29ubmVjdGlvbnMgdG8gdGhlbSwgYW5kIHRoZW4gb3BlbiAxMjggb3RoZXIgdW5pcXVlIGRh
dGFiYXNlcywgdGhhdCBpdCB3b3Jrcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K09wZW5lZCB0aGUgZmlyc3QgMTI4IGRhdGFiYXNlcy4gTm93IGNsb3NpbmcgdGhlbS4uLgorTm93
IG9wZW5pbmcgdGhlIHNlY29uZCAxMjggZGF0YWJhc2VzCitTdWNjZXNzZnVsbHkgb3BlbmVkIDI1
NiBkYXRhYmFzZXMgKGFmdGVyIGNsb3NpbmcgdGhlIGZpcnN0IDEyOCkKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2LW9wZW4tZGF0YWJhc2VzLmh0bWwgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vMjU2LW9wZW4tZGF0YWJhc2VzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0MzYxZAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1k
YXRhYmFzZXMuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzLzI1Ni1vcGVuLWRhdGFiYXNlcy5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vZXhjZWVkLW9wZW4tZmlsZS1saW1pdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZXhjZWVkLW9wZW4tZmlsZS1saW1pdC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4MDA4YQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9leGNlZWQtb3Bl
bi1maWxlLWxpbWl0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3QgbWFr
ZXMgc3VyZSB0aGF0IHNjcmlwdCBnZXRzIGFuIGVycm9yIGlmIHRvbyBtYW55IGRhdGFiYXNlcyBh
cmUgb3BlbmVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRXJyb3Igb3Blbmlu
ZyBkYXRhYmFzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9l
eGNlZWQtb3Blbi1maWxlLWxpbWl0Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZXhjZWVkLW9wZW4tZmlsZS1saW1pdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3MjkyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZXhjZWVkLW9wZW4tZmlsZS1saW1pdC5odG1sCkBAIC0w
LDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3NoYXJl
ZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
ZXhjZWVkLW9wZW4tZmlsZS1saW1pdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2Vz
LzI1Ni1vcGVuLWRhdGFiYXNlcy5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9yZXNvdXJjZXMvMjU2LW9wZW4tZGF0YWJhc2VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ1ODUxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzLzI1Ni1vcGVuLWRhdGFiYXNlcy5qcwpA
QCAtMCwwICsxLDM5IEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBp
ZiB5b3Ugb3BlbiAxMjggdW5pcXVlIGRhdGFiYXNlcywgY2xvc2UgeW91ciBjb25uZWN0aW9ucyB0
byB0aGVtLCBhbmQgdGhlbiBvcGVuIDEyOCBvdGhlciB1bmlxdWUgZGF0YWJhc2VzLCB0aGF0IGl0
IHdvcmtzLiIpOworCit2YXIgZGF0YWJhc2VDb25uZWN0aW9ucyA9IG5ldyBBcnJheTsKKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMjg7ICsraSkgeworICAgIHZhciByZXF1ZXN0ID0gd2luZG93Lmlu
ZGV4ZWREQi5vcGVuKCJkYXRhYmFzZSIgKyBpKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgZGVidWcoIlVuZXhwZWN0ZWQgZXJyb3Igb3BlbmluZyBkYXRhYmFz
ZSAiICsgaSk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRhdGFiYXNlQ29ubmVjdGlvbnMu
cHVzaChldmVudC50YXJnZXQucmVzdWx0KTsKKyAgICAgICAgaWYgKGRhdGFiYXNlQ29ubmVjdGlv
bnMubGVuZ3RoID09IDEyOCkKKyAgICAgICAgICAgIGNvbnRpbnVlVGVzdCgpOworICAgIH0KK30K
KworZnVuY3Rpb24gY29udGludWVUZXN0KCkKK3sKKyAgICBkZWJ1ZygiT3BlbmVkIHRoZSBmaXJz
dCAxMjggZGF0YWJhc2VzLiBOb3cgY2xvc2luZyB0aGVtLi4uIik7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMjg7ICsraSkKKyAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uc1tpXS5jbG9zZSgp
OworCisgICAgZGVidWcoIk5vdyBvcGVuaW5nIHRoZSBzZWNvbmQgMTI4IGRhdGFiYXNlcyIpOwor
ICAgIGZvciAodmFyIGkgPSAxMjg7IGkgPCAyNTY7ICsraSkgeworICAgICAgICB2YXIgcmVxdWVz
dCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiZGF0YWJhc2UiICsgaSk7CisgICAgICAgIHJlcXVl
c3Qub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVidWcoIlVuZXhwZWN0ZWQg
ZXJyb3Igb3BlbmluZyBkYXRhYmFzZSAiICsgaSk7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICAgICAgfQorICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb25zLnB1c2goZXZlbnQudGFyZ2V0LnJl
c3VsdCk7CisgICAgICAgICAgICBpZiAoZGF0YWJhc2VDb25uZWN0aW9ucy5sZW5ndGggPT0gMjU2
KSB7CisgICAgICAgICAgICAgICAgZGVidWcoIlN1Y2Nlc3NmdWxseSBvcGVuZWQgMjU2IGRhdGFi
YXNlcyAoYWZ0ZXIgY2xvc2luZyB0aGUgZmlyc3QgMTI4KSIpOworICAgICAgICAgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy9leGNl
ZWQtb3Blbi1maWxlLWxpbWl0LmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL3Jlc291cmNlcy9leGNlZWQtb3Blbi1maWxlLWxpbWl0LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNlMzQ3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzL2V4Y2VlZC1vcGVuLWZpbGUtbGlt
aXQuanMKQEAgLTAsMCArMSwyMyBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBtYWtlcyBzdXJl
IHRoYXQgc2NyaXB0IGdldHMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgZGF0YWJhc2VzIGFyZSBvcGVu
ZWQuIik7CisKK3ZhciBkYXRhYmFzZUNvbm5lY3Rpb25zID0gbmV3IEFycmF5OwordmFyIGluZGV4
ID0gMDsKKworZnVuY3Rpb24gb3BlbkRhdGFiYXNlKGluZGV4KQoreworICAgIHZhciByZXF1ZXN0
ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJkYXRhYmFzZSIgKyBpbmRleCk7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCJFcnJvciBvcGVuaW5nIGRh
dGFiYXNlIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGRhdGFiYXNlQ29ubmVjdGlvbnMu
cHVzaChldmVudC50YXJnZXQucmVzdWx0KTsKKyAgICAgICAgaWYgKGRhdGFiYXNlQ29ubmVjdGlv
bnMubGVuZ3RoID09IDEwMDAwMCkgeworICAgICAgICAgICAgZGVidWcoIlN1Y2Nlc3NmdWxseSBv
cGVuZWQgMTAwMDAwIGRhdGFiYXNlcyAtIFRoYXQgc2hvdWxkICpub3QqIGhhdmUgaGFwcGVuZWQu
Iik7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBvcGVuRGF0YWJhc2UoKytpbmRleCk7CisgICAgfSAKK30KKworb3BlbkRhdGFiYXNlKGlu
ZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkYmQ2MjA2Li44MmQ2ZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTkgQEAKKzIwMTYtMDMtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CisgICAgICAgIE1vZGVybiBJREI6IENsb3NlIFVuaXF1ZUlEQkRhdGFiYXNlcyBvbmNlIHRoZXkg
YmVjb21lIHVudXNlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NDkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi8yNTYtb3Blbi1kYXRhYmFz
ZXMuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2V4Y2VlZC1v
cGVuLWZpbGUtbGltaXQuaHRtbAorCisgICAgICAgIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIGF0dGVt
cHRzIHRvIG9wZW4gYSAyNTZ0aCBkYXRhYmFzZSBpbiB0aGUgRGF0YWJhc2VQcm9jZXNzIHdpbGwg
ZmFpbCBvbiBNYWMuCisgICAgICAgIAorICAgICAgICBEdWUgdG8gU1FMaXRlIGpvdXJuYWwgZmls
ZXMsIHRoaXMgbGltaXQgY291bGQgY29tZSB1cCBhcyBlYXJseSBhcyAxMjggZGF0YWJhc2VzIGlm
IHRoZXkgYXJlIGFsbAorICAgICAgICBpbiBhY3RpdmUgdXNlLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBpcyBiZWNhdXNlIGxhdW5jaGQgLSBieSBkZWZhdWx0IC0gbGltaXRzIHhwYyBzZXJ2aWNl
cyB0byBoYXZpbmcgMjU2IG9wZW4gZmlsZSBoYW5kbGVzIGJ5IGRlZmF1bHQuCisgICAgICAgIAor
ICAgICAgICBXaGlsZSB3ZSBzaG91bGQgZXhwbG9yZSByYWlzaW5nIHRoZSBsaW1pdCwgd2Ugc2hv
dWxkIGFsc28gY2xvc2UgZGF0YWJhc2VzIHdlIG5vIGxvbmdlciBuZWVkLgorICAgICAgICAKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjbG9zZVVuaXF1ZUlEQkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWxldGVVbmlxdWVJREJE
YXRhYmFzZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Ok1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmg6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVu
dE9wZW5PcGVyYXRpb24pOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb3BlbmluZworICAgICAgICAg
IHRoZSBiYWNraW5nIHN0b3JlIGZhaWxlZCBieSBmaXJpbmcgYW4gZXJyb3IgZXZlbnQgaW5zdGVh
ZCBvZiBwcmV0ZW5kaW5nIGV2ZXJ5dGhpbmcgaXMgb2theS4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmlzQ3VycmVudGx5SW5Vc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rp
b25UaW1lckZpcmVkKTogSWYgdGhlIGRhdGFiYXNlIGlzIG5vdAorICAgICAgICAgIGN1cnJlbnRs
eSBpbiB1c2UsIGNsb3NlIGl0LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVBlbmRpbmcpOiBEZWxl
dGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3Jl
SW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVk
Q29weSk6IEFjdHVhbGx5IGdldCB0aGlzIHJpZ2h0LgorCiAyMDE2LTAzLTAxICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm4gSURCOiBQb3NzaWJsZSBj
cmFzaCBkZWFsbG9jYXRpbmcgSURCRGF0YWJhc2VJbmZvL0lEQk9iamVjdFN0b3JlSW5mby9JREJJ
bmRleEluZm8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggYzMzMjVhYS4uNTNmMTE3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJC
YWNraW5nU3RvcmUuaApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBJREJCYWNraW5nU3RvcmUgewog
cHVibGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHsgfQogCi0gICAgdmlydHVh
bCBjb25zdCBJREJEYXRhYmFzZUluZm8mIGdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCkgPSAw
OworICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0
YWJhc2VJbmZvJikgPSAwOwogCiAgICAgdmlydHVhbCBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9u
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGFi
b3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpID0gMDsKQEAgLTc5LDcgKzc5LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJ
REJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKCkg
PSAwOworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25z
KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVtZXJhbCgpID0gMDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA2OGE3M2U2Li5jM2NiNDczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcApAQCAtMTU3LDkgKzE1Nyw5IEBAIHZvaWQgSURCU2VydmVyOjpkZWxldGVEYXRhYmFz
ZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCiAgICAgZGF0YWJhc2UtPmhhbmRs
ZURlbGV0ZSgqY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOwogfQogCi12b2lkIElEQlNlcnZlcjo6
ZGVsZXRlVW5pcXVlSURCRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKQordm9p
ZCBJREJTZXJ2ZXI6OmNsb3NlVW5pcXVlSURCRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UmIGRh
dGFiYXNlKQogewotICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OmRlbGV0ZVVuaXF1ZUlE
QkRhdGFiYXNlIik7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6Y2xvc2VVbmlxdWVJ
REJEYXRhYmFzZSIpOwogCiAgICAgYXV0byBkZWxldGVkRGF0YWJhc2UgPSBtX3VuaXF1ZUlEQkRh
dGFiYXNlTWFwLnRha2UoZGF0YWJhc2UuaWRlbnRpZmllcigpKTsKICAgICBBU1NFUlRfVU5VU0VE
KGRlbGV0ZWREYXRhYmFzZSwgZGVsZXRlZERhdGFiYXNlLmdldCgpID09ICZkYXRhYmFzZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmgKaW5kZXggNWQ4MTI0MS4uMTEwMTQ2NTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC04Nyw3ICs4Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYpOwogICAgIHZvaWQgdW5yZWdpc3RlclRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mKTsKIAotICAgIHZvaWQgZGVsZXRlVW5pcXVlSURCRGF0YWJhc2UoVW5p
cXVlSURCRGF0YWJhc2UmKTsKKyAgICB2b2lkIGNsb3NlVW5pcXVlSURCRGF0YWJhc2UoVW5pcXVl
SURCRGF0YWJhc2UmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IGNy
ZWF0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKaW5kZXggNDA2MzdhYi4u
MDA4ZTU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24u
Y3BwCkBAIC00Nyw4ICs0NywxMiBAQCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6TWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oTWVtb3J5SURCQmFja2luZ1N0bwogICAgIDogbV9i
YWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICwgbV9pbmZvKGluZm8pCiB7Ci0gICAgaWYg
KG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFu
Z2UpCi0gICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9iYWNraW5nU3RvcmUuZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8o
KSk7CisgICAgaWYgKG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6
OlZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgSURCRGF0YWJhc2VJbmZvIGluZm87CisgICAgICAg
IGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhp
bmZvKTsKKyAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9vcmlnaW5h
bERhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihpbmZvKTsK
KyAgICB9CiB9CiAKIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjp+TWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAppbmRl
eCA1NGMxZmE4Li42YzFmZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcApA
QCAtNTUsMTIgKzU1LDEzIEBAIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6fk1lbW9yeUlEQkJhY2tp
bmdTdG9yZSgpCiB7CiB9CiAKLWNvbnN0IElEQkRhdGFiYXNlSW5mbyYgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbygpCitJREJFcnJvciBNZW1vcnlJREJC
YWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYg
aW5mbykKIHsKICAgICBpZiAoIW1fZGF0YWJhc2VJbmZvKQogICAgICAgICBtX2RhdGFiYXNlSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2lkZW50aWZpZXIuZGF0YWJh
c2VOYW1lKCksIDApOwogCi0gICAgcmV0dXJuICptX2RhdGFiYXNlSW5mbzsKKyAgICBpbmZvID0g
Km1fZGF0YWJhc2VJbmZvOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpzZXREYXRhYmFzZUluZm8oY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDQ5MjAyZjYuLjE1OTMxNzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgfk1lbW9yeUlEQkJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFsOwog
Ci0gICAgdmlydHVhbCBjb25zdCBJREJEYXRhYmFzZUluZm8mIGdldE9yRXN0YWJsaXNoRGF0YWJh
c2VJbmZvKCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJFcnJvciBnZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
b2lkIHNldERhdGFiYXNlSW5mbyhjb25zdCBJREJEYXRhYmFzZUluZm8mKTsKIAogICAgIHZpcnR1
YWwgSURCRXJyb3IgYmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBv
dmVycmlkZSBmaW5hbDsKQEAgLTcxLDcgKzcxLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJ
REJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVCYWNr
aW5nU3RvcmUoKSBvdmVycmlkZSBmaW5hbDsKKwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Np
bXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNFcGhlbWVyYWwoKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0
KE1lbW9yeU9iamVjdFN0b3JlJik7CiAgICAgdm9pZCByZXN0b3JlT2JqZWN0U3RvcmVGb3JWZXJz
aW9uQ2hhbmdlQWJvcnQoUmVmPE1lbW9yeU9iamVjdFN0b3JlPiYmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODdjZTZjNi4uMTU1MGRmNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01NTcsMTQgKzU1NywxNCBAQCBTdHJpbmcgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3QKICAgICByZXR1cm4gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpLCAiSW5kZXhlZERC
LnNxbGl0ZTMiKTsKIH0KIAotY29uc3QgSURCRGF0YWJhc2VJbmZvJiBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBp
bmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9y
RXN0YWJsaXNoRGF0YWJhc2VJbmZvIC0gZGF0YWJhc2UgJXMiLCBtX2lkZW50aWZpZXIuZGF0YWJh
c2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBpZiAobV9kYXRhYmFzZUluZm8pCi0gICAg
ICAgIHJldHVybiAqbV9kYXRhYmFzZUluZm87Ci0KLSAgICBtX2RhdGFiYXNlSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCks
IDApOworICAgIGlmIChtX2RhdGFiYXNlSW5mbykgeworICAgICAgICBpbmZvID0gKm1fZGF0YWJh
c2VJbmZvOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KIAogICAgIG1ha2VBbGxEaXJlY3Rv
cmllcyhmdWxsRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAgICAgU3RyaW5nIGRiRmlsZW5hbWUgPSBm
dWxsRGF0YWJhc2VQYXRoKCk7CkBAIC01NzYsNyArNTc2LDcgQEAgY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCkK
ICAgICB9CiAKICAgICBpZiAoIW1fc3FsaXRlREIpCi0gICAgICAgIHJldHVybiAqbV9kYXRhYmFz
ZUluZm87CisgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSBvbiBkaXNrIikg
fTsKIAogICAgIG1fc3FsaXRlREItPnNldENvbGxhdGlvbkZ1bmN0aW9uKCJJREJLRVkiLCBbdGhp
c10oaW50IGFMZW5ndGgsIGNvbnN0IHZvaWQqIGEsIGludCBiTGVuZ3RoLCBjb25zdCB2b2lkKiBi
KSB7CiAgICAgICAgIHJldHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIp
OwpAQCAtNTg1LDI1ICs1ODUsMjggQEAgY29uc3QgSURCRGF0YWJhc2VJbmZvJiBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCkKICAgICBpZiAoIWVuc3Vy
ZVZhbGlkUmVjb3Jkc1RhYmxlKCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGlu
ZyBvciBtaWdyYXRpbmcgUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpOwogICAgICAgICBtX3Nx
bGl0ZURCID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICptX2RhdGFiYXNlSW5mbzsKKyAgICAg
ICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRl
cmFsKCJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFz
ZSIpIH07CiAgICAgfQogCiAgICAgaWYgKCFlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCkp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXgg
UmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpOwogICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuICptX2RhdGFiYXNlSW5mbzsKKyAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBjcmVh
dGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpIH07CiAg
ICAgfQogCiAgICAgYXV0byBkYXRhYmFzZUluZm8gPSBleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUlu
Zm8oKTsKICAgICBpZiAoIWRhdGFiYXNlSW5mbykKICAgICAgICAgZGF0YWJhc2VJbmZvID0gY3Jl
YXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CiAKLSAgICBpZiAoIWRhdGFiYXNl
SW5mbykKKyAgICBpZiAoIWRhdGFiYXNlSW5mbykgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBlc3RhYmxpc2ggSURCIGRhdGFiYXNlIGF0IHBhdGggJyVzJyIsIGRiRmlsZW5hbWUudXRm
OCgpLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2RhdGFiYXNlSW5mbyA9IFdURk1vdmUo
ZGF0YWJhc2VJbmZvKTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIGVzdGFibGlzaCBJREIgZGF0YWJhc2UgZmlsZSIpIH07CisgICAgfQogCi0gICAg
cmV0dXJuICptX2RhdGFiYXNlSW5mbzsKKyAgICBtX2RhdGFiYXNlSW5mbyA9IFdURk1vdmUoZGF0
YWJhc2VJbmZvKTsKKyAgICBpbmZvID0gKm1fZGF0YWJhc2VJbmZvOworICAgIHJldHVybiB7IH07
CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggMTMxYzM5ZS4uZGU2Njg3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgflNRTGl0ZUlE
QkJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFsOwogCi0gICAgdmlydHVhbCBjb25zdCBJREJE
YXRhYmFzZUluZm8mIGdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKCkgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCBJREJFcnJvciBnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRh
YmFzZUluZm8mKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZpcnR1YWwgSURCRXJyb3IgYmVnaW5U
cmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIElEQkVycm9yIGFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwpAQCAtNzUsNyAr
NzUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFs
OworCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFcGhl
bWVyYWwoKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCB1bnJl
Z2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cAppbmRleCAwNGI5MzlmLi5hOWIyM2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAg
LTUwLDExICs1MCwxMiBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UoSURC
U2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZgogICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVk
KQogeworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0
YWJhc2UoKSAoJXApICVzIiwgdGhpcywgbV9pZGVudGlmaWVyLmRlYnVnU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiB9CiAKIFVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKQog
ewotICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFi
YXNlKCkgKCVwKSIsIHRoaXMpOworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFz
ZTo6flVuaXF1ZUlEQkRhdGFiYXNlKCkgKCVwKSAlcyIsIHRoaXMsIG1faWRlbnRpZmllci5kZWJ1
Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEFTU0VSVCghaGFzQW55UGVuZGluZ0NhbGxi
YWNrcygpKTsKICAgICBBU1NFUlQobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7
CiAgICAgQVNTRVJUKG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwpAQCAtMTM5LDYg
KzE0MCwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZU9wZW5FcnJvci5pc051bGwoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERh
dGE6OmVycm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElk
ZW50aWZpZXIoKSwgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3IpOworICAgICAgICBtX2N1cnJlbnRP
cGVuREJSZXF1ZXN0LT5jb25uZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7CisgICAg
ICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPiBjb25uZWN0aW9u
ID0gVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGUoKnRoaXMsIG1fY3VycmVudE9w
ZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKSk7CiAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uKiByYXdDb25uZWN0aW9uID0gJmNvbm5lY3Rpb24uZ2V0KCk7CiAKQEAgLTIxNCw5ICsyMjMs
MTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRl
bGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAg
ICAgICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBm
YWxzZTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXIuY3JlYXRlQmFja2lu
Z1N0b3JlKGlkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IGJhY2tpbmdT
dG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oKTsKKworICAgICAgICBJREJEYXRhYmFz
ZUluZm8gZGF0YWJhc2VJbmZvOworICAgICAgICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5n
ZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOworICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBnZXR0aW5nIGRhdGFi
YXNlIGluZm8gZnJvbSBkYXRhYmFzZSAlcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZGVsZXRlIiwg
aWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgICAgIGRlbGV0
ZWRWZXJzaW9uID0gZGF0YWJhc2VJbmZvLnZlcnNpb24oKTsKICAgICAgICAgYmFja2luZ1N0b3Jl
LT5kZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB9CkBAIC0yNDgsMTIgKzI2MywxMSBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRl
ZFZlcnNpb24pCiAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+bm90aWZ5RGlkRGVsZXRlRGF0
YWJhc2UoKm1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8pOwogICAgIG1fY3VycmVudE9w
ZW5EQlJlcXVlc3QgPSBudWxscHRyOwogCi0gICAgbV9kZWxldGVQZW5kaW5nID0gZmFsc2U7CiAg
ICAgbV9kZWxldGVCYWNraW5nU3RvcmVJblByb2dyZXNzID0gZmFsc2U7CiAKICAgICBpZiAobV9j
bG9zZVBlbmRpbmdEYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAo
bV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9zZXJ2ZXIu
ZGVsZXRlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICAgICAgbV9zZXJ2ZXIuY2xv
c2VVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlu
dm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKICAgICB9CkBAIC00NjQsMTcgKzQ3
OCwyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcgogICAgIEFTU0VSVCghbV9iYWNraW5nU3Rv
cmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXIuY3JlYXRlQmFja2luZ1N0b3JlKGlk
ZW50aWZpZXIpOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2Fj
dGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMo
KTsKLSAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlz
aERhdGFiYXNlSW5mbygpOworICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tp
bmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAotICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
T3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvKSk7CisgICAgSURCRGF0YWJhc2VJbmZvIGRh
dGFiYXNlSW5mbzsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJs
aXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IpKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUluZm8mIGluZm8pCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwogICAgIAogICAgIG1fZGF0
YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGluZm8pOworICAg
IG1fYmFja2luZ1N0b3JlT3BlbkVycm9yID0gZXJyb3I7CiAKICAgICBBU1NFUlQobV9pc09wZW5p
bmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CkBA
IC0xMDk3LDYgKzExMTUsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZVRyYW5z
YWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmIHQKICAgICBpbnZva2VP
cGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCk7CiB9CiAKK2Jvb2wgVW5pcXVlSURCRGF0YWJh
c2U6OmlzQ3VycmVudGx5SW5Vc2UoKSBjb25zdAoreworICAgIHJldHVybiAhbV9vcGVuRGF0YWJh
c2VDb25uZWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fY2xvc2VQZW5kaW5nRGF0YWJhc2VDb25uZWN0
aW9ucy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ09wZW5EQlJlcXVlc3RzLmlzRW1wdHkoKSB8fCBt
X2N1cnJlbnRPcGVuREJSZXF1ZXN0IHx8IG1fdmVyc2lvbkNoYW5nZURhdGFiYXNlQ29ubmVjdGlv
biB8fCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBtX2lzT3BlbmluZ0JhY2tpbmdTdG9y
ZSB8fCBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3M7Cit9CisKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6Omludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKQogewogICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6aW52b2tlT3BlcmF0aW9uQW5kVHJhbnNh
Y3Rpb25UaW1lcigpIik7CkBAIC0xMTEwLDYgKzExMzMsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVkKCkKIAogICAgIFJlZlB0cjxV
bmlxdWVJREJEYXRhYmFzZT4gcHJvdGVjdG9yKHRoaXMpOwogCisgICAgLy8gVGhpcyBVbmlxdWVJ
REJEYXRhYmFzZSBtaWdodCBiZSBubyBsb25nZXIgaW4gdXNlIGJ5IGFueSB3ZWIgcGFnZS4KKyAg
ICAvLyBBc3N1bWluZyBpdCBpcyBub3QgZXBoZW1lcmFsLCB0aGUgc2VydmVyIHNob3VsZCBub3cg
Y2xvc2UgaXQgdG8gZnJlZSB1cCByZXNvdXJjZXMuCisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZUlz
RXBoZW1lcmFsICYmICFpc0N1cnJlbnRseUluVXNlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcGVu
ZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQobV9pblByb2dyZXNz
VHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisgICAgICAgIG1fc2VydmVyLmNsb3NlVW5pcXVlSURC
RGF0YWJhc2UoKnRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gVGhlIGN1
cnJlbnQgb3BlcmF0aW9uIG1pZ2h0IHJlcXVpcmUgbXVsdGlwbGUgYXR0ZW1wdHMgdG8gaGFuZGxl
LCBzbyB0cnkgdG8KICAgICAvLyBtYWtlIGZ1cnRoZXIgcHJvZ3Jlc3Mgb24gaXQgbm93LgogICAg
IGlmIChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0KQpAQCAtMTI1OSw3ICsxMjkxLDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmkKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBkYXRhYmFz
ZSBoYWQgaXRzIGJhY2tpbmcgc3RvcmUgZGVsZXRlZCBidXQgdGhlcmUgd2VyZSBhIGZldyBvdXRz
dGFuZGluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KICAgICAvLyBJZiB0aGlzIHRyYW5zYWN0
aW9uIGNvbXBsZXRpbmcgd2FzIHRoZSBsYXN0IG9mIHRob3NlIG9wZXJhdGlvbnMsIHdlIGNhbiBm
aW5hbGx5IGRlbGV0ZSB0aGlzIFVuaXF1ZUlEQkRhdGFiYXNlLgogICAgIGlmIChtX2Nsb3NlUGVu
ZGluZ0RhdGFiYXNlQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ09wZW5EQlJlcXVl
c3RzLmlzRW1wdHkoKSAmJiAhbV9kYXRhYmFzZUluZm8pIHsKLSAgICAgICAgbV9zZXJ2ZXIuZGVs
ZXRlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICBtX3NlcnZlci5jbG9zZVVuaXF1
ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuaAppbmRleCBiZGJiMzg0Li5hMTA4ZjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aApAQCAtMTAxLDcgKzEwMSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVucXVldWVUcmFuc2FjdGlv
bihSZWY8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4mJik7CiAKICAgICB2b2lkIGhhbmRs
ZURlbGV0ZShJREJDb25uZWN0aW9uVG9DbGllbnQmLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYpOwot
ICAgIGJvb2wgZGVsZXRlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlUGVuZGluZzsg
fQogCiAgICAgc3RhdGljIEpTQzo6Vk0mIGRhdGFiYXNlVGhyZWFkVk0oKTsKICAgICBzdGF0aWMg
SlNDOjpFeGVjU3RhdGUmIGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCk7CkBAIC0xNDYsNyArMTQ1
LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQg
ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lk
IGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJik7CisgICAgdm9pZCBk
aWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9y
Jik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYp
OwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwpAQCAtMTczLDYgKzE3Miw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwZXJmb3JtQ291bnRDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QpOwogCiAgICAgYm9vbCBoYXNBbnlQZW5k
aW5nQ2FsbGJhY2tzKCkgY29uc3Q7CisgICAgYm9vbCBpc0N1cnJlbnRseUluVXNlKCkgY29uc3Q7
CiAKICAgICB2b2lkIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKICAgICB2
b2lkIG9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXJGaXJlZCgpOwpAQCAtMTkxLDExICsxOTEs
MTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4g
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CiAKICAgICBib29sIG1faXNPcGVuaW5nQmFja2lu
Z1N0b3JlIHsgZmFsc2UgfTsKKyAgICBJREJFcnJvciBtX2JhY2tpbmdTdG9yZU9wZW5FcnJvcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX2RhdGFiYXNlSW5mbzsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX21vc3RSZWNlbnREZWxldGVkRGF0YWJh
c2VJbmZvOwogCiAgICAgYm9vbCBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwg
eyBmYWxzZSB9OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXJyb3JDYWxsYmFjaz4gbV9lcnJv
ckNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBLZXlEYXRhQ2FsbGJhY2s+IG1fa2V5
RGF0YUNhbGxiYWNrczsKQEAgLTIxMiw3ICsyMTQsNiBAQCBwcml2YXRlOgogICAgIEhhc2hDb3Vu
dGVkU2V0PHVpbnQ2NF90PiBtX29iamVjdFN0b3JlVHJhbnNhY3Rpb25Db3VudHM7CiAgICAgSGFz
aFNldDx1aW50NjRfdD4gbV9vYmplY3RTdG9yZVdyaXRlVHJhbnNhY3Rpb25zOwogCi0gICAgYm9v
bCBtX2RlbGV0ZVBlbmRpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9kZWxldGVCYWNraW5nU3Rv
cmVJblByb2dyZXNzIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAK
aW5kZXggYTA0MTU0NC4uNTQ2NDVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKQEAg
LTg4LDggKzg4LDEzIEBAIElEQk9iamVjdFN0b3JlSW5mbyBJREJPYmplY3RTdG9yZUluZm86Omlz
b2xhdGVkQ29weSgpIGNvbnN0CiB7CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsg
bV9pZGVudGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIG1fa2V5UGF0aC5pc29sYXRlZENv
cHkoKSwgbV9hdXRvSW5jcmVtZW50IH07CiAKLSAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV9p
bmRleE1hcCkKKyAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV9pbmRleE1hcCkgewogICAgICAg
ICByZXN1bHQubV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRvci52YWx1ZS5pc29s
YXRlZENvcHkoKSk7CisgICAgICAgIGlmIChpdGVyYXRvci5rZXkgPiByZXN1bHQubV9tYXhJbmRl
eElEKQorICAgICAgICAgICAgcmVzdWx0Lm1fbWF4SW5kZXhJRCA9IGl0ZXJhdG9yLmtleTsKKyAg
ICB9CisKKyAgICBBU1NFUlQocmVzdWx0Lm1fbWF4SW5kZXhJRCA9PSBtX21heEluZGV4SUQpOwog
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>