<?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>104751</bug_id>
          
          <creation_ts>2012-12-11 17:43:09 -0800</creation_ts>
          <short_desc>webdatabase: Split the SQLStatement between its front-end and back-end.</short_desc>
          <delta_ts>2013-02-15 19:06:59 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>103668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>789051</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-12-11 17:43:09 -0800</bug_when>
    <thetext>Split the SQLStatement between its front-end and back-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834310</commentid>
    <comment_count>1</comment_count>
      <attachid>188629</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-15 13:10:50 -0800</bug_when>
    <thetext>Created attachment 188629
the proposed patch.

Let&apos;s give the ews bots a crack at it first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834354</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 13:48:16 -0800</bug_when>
    <thetext>Attachment 188629 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLStatement.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLStatement.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLStatementBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp:142:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 17 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>834378</commentid>
    <comment_count>3</comment_count>
      <attachid>188629</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-15 14:29:59 -0800</bug_when>
    <thetext>Comment on attachment 188629
the proposed patch.

Looks ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834400</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-15 14:56:22 -0800</bug_when>
    <thetext>At a glance (emphasis on glance), this lgtm (fwiw)

Although i don&apos;t understand why in the diff viewer SQLStatementBackend.cpp appears twice, once with a SQLStatement class impl and another with a SQLStatementBackend impl. Maybe that&apos;s just showing the raw copy and then again after the edits to the raw copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834403</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-15 14:58:37 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Although i don&apos;t understand why in the diff viewer SQLStatementBackend.cpp appears twice, once with a SQLStatement class impl and another with a SQLStatementBackend impl. Maybe that&apos;s just showing the raw copy and then again after the edits to the raw copy.

Yes, &quot;SQLStatementBackend.cpp appears twice&quot; because once for the svn copy from SVNStatement (so that we also inherit the change history from SQLStatement), and once for the changes on top of that copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834577</commentid>
    <comment_count>6</comment_count>
      <attachid>188629</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-15 18:16:47 -0800</bug_when>
    <thetext>Comment on attachment 188629
the proposed patch.

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

r=me

&gt; Source/WebCore/Modules/webdatabase/SQLStatement.h:49
&gt;  class SQLStatement : public ThreadSafeRefCounted&lt;SQLStatement&gt; {

Since the SQLStatementBackend is the sole owner of this object, let&apos;s not use thread safe refcounting; instead, let&apos;s use OwnPtr inside SQLStatementBackend.

&gt; Source/WebCore/Modules/webdatabase/SQLStatement.h:64
&gt; +    SQLStatementBackend* m_backend;

This is a good place to comment that m_backend owns us, to explain why a raw pointer is OK here.

&gt; Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp:67
&gt; +//     - During this time, SQLTransaction operates on a raw SQLStatement* and not a RefPtr.
&gt; +//       It is understood that the SQLTransactionBackend will be keeping the SQLStatement
&gt; +//       alive via its SQLStatementBackend via SQLTransactionBackend::m_currentStatement
&gt; +//       for this entire period.

How about clarifying something like:

Inside SQLTransaction::deliverStatementCallback(), we operate on a raw SQLStatement*. This pointer is valid because it is owned by SQLTransactionBackend&apos;s SQLTransactionBackend::m_currentStatementBackend.

&gt; Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:383
&gt; +SQLStatement* SQLTransactionBackend::currentStatement()
&gt; +{
&gt; +    return m_currentStatement-&gt;frontend();
&gt; +}

Idiomatically, m_currentStatement implies an SQLStatement, not an SQLStatementBackend. Let&apos;s call it m_currentStatementBackend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834599</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-15 19:06:59 -0800</bug_when>
    <thetext>Thanks for the review.  The code has been updated to address Geoff&apos;s comments.

Landed in r143090: &lt;http://trac.webkit.org/changeset/143090&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188629</attachid>
            <date>2013-02-15 13:10:50 -0800</date>
            <delta_ts>2013-02-15 18:16:47 -0800</delta_ts>
            <desc>the proposed patch.</desc>
            <filename>bug-104751.patch</filename>
            <type>text/plain</type>
            <size>65269</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzAzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDEzLTAyLTE1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTUUxTdGF0ZW1lbnQgd29y
ayBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgYmFja2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDc1MS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIHdlYmRhdGFi
YXNlIHJlZmFjdG9yaW5nIGZvciB3ZWJraXQyLgorCisgICAgICAgIDEuIENvcGllZCBTUUxUcmFu
c2FjdGlvbiB0byBTUUxUcmFuc2FjdGlvbkJhY2tlbmQsIGFuZCB0aGVuIHJlZHVjZSB0aGUKKyAg
ICAgICAgICAgMiB0byBvbmx5IGhhbmRsZSBmcm9udGVuZCBhbmQgYmFja2VuZCB3b3JrIHJlc3Bl
Y3RpdmVseS4KKworICAgICAgICAyLiBDaGFuZ2VkIGhvdyBzdGF0ZW1lbnRzIGFyZSBjcmVhdGVk
LgorCisgICAgICAgICAgIC0gU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoKSBmaXJzdCBjcmVh
dGVzIGEgU1FMU3RhdGVtZW50IGZyb250ZW5kCisgICAgICAgICAgICAgd2hpY2ggZW5jYXBzdWxh
dGVzIHRoZSAyIHNjcmlwdCBjYWxsYmFja3MuIEl0IHRoZW4gcGFzc2VzIHRoZQorICAgICAgICAg
ICAgIFNRTFN0YXRlbWVudCB0byB0aGUgYmFja2VuZCBkYXRhYmFzZSB0byBjcmVhdGUgdGhlCisg
ICAgICAgICAgICAgU1FMU3RhdGVtZW50QmFja2VuZC4KKyAgICAgICAgICAgLSBUaGUgU1FMU3Rh
dGVtZW50QmFja2VuZCBtYW5hZ2VzIGFsbCBzcWxpdGUgd29yay4KKworICAgICAgICAzLiBSZW1v
dmUgdGhlIERhdGFiYXNlOjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KCkgd3JhcHBlciBi
ZWNhdXNlCisgICAgICAgICAgIGl0IGlzIG9ubHkgbmVlZGVkIGluIHRoZSBiYWNrZW5kIG5vdy4K
KworICAgICAgICA0LiBBZGRlZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkIC8gcHJvamVjdCBmaWxl
cy4KKworICAgICAgICA1LiBVcGRhdGVkIC8gYWRkZWQgY29tbWVudHMgYWJvdXQgaG93IHRoZSBT
UUxTdGF0ZW1lbnQgbGlmZS1jeWNsZSB3b3Jrcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKERhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaDoKKyAgICAg
ICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxT
dGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMU3RhdGVtZW50OjpzZXRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFN0YXRlbWVudDo6aGFzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50
OjpoYXNFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6cGVy
Zm9ybUNhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVu
dC5oOgorICAgICAgICAoU1FMU3RhdGVtZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudEJhY2tlbmQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
UUxTdGF0ZW1lbnRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50QmFja2VuZDo6U1FMU3RhdGVtZW50QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxT
dGF0ZW1lbnRCYWNrZW5kOjpmcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1l
bnRCYWNrZW5kOjpzcWxFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRCYWNr
ZW5kOjpzcWxSZXN1bHRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50QmFja2Vu
ZDo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRCYWNrZW5kOjpzZXRE
YXRhYmFzZURlbGV0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRCYWNr
ZW5kOjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0
YXRlbWVudEJhY2tlbmQ6OnNldEZhaWx1cmVEdWVUb1F1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFN0YXRlbWVudEJhY2tlbmQ6OmNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMU3RhdGVtZW50QmFja2VuZDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVv
dGEpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50QmFja2VuZC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRl
bWVudC5oLgorICAgICAgICAoU1FMU3RhdGVtZW50QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxTdGF0ZW1lbnRCYWNrZW5kOjpoYXNTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxTdGF0ZW1lbnRCYWNrZW5kOjpoYXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y3VycmVudFN0YXRlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVldWVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpleGVjdXRl
U1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuQ3VycmVu
dFN0YXRlbWVudEFuZEdldE5leHRTdGF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaDoKKyAgICAgICAgKFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZCk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDEzLTAyLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGNvbnN0IGZyb20gYSBidW5jaCBvZiBTdG9yYWdlQXJlYSBt
ZW1iZXIgZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQzMDMx
KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk1
Nyw2ICs5NTcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxSZXN1bHRTZXQuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXRS
b3dMaXN0LmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAorICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50QmFja2VuZC5jcHAKICAgICBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudFN5bmMuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbi5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uQmFja2VuZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTQzMDMxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjE1Miw4ICsyMTUyLDEwIEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xp
c3QuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRD
YWxsYmFjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRl
bWVudC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFN0YXRlbWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFN0YXRlbWVudEJhY2tlbmQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudEJhY2tlbmQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTE0ODEsNiArMTQ4MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVu
dC5oIFwKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEJhY2tlbmQuaCBcCiAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkJhY2tlbmQuaCBcCkBAIC0zMDcyLDYgKzMwNzMsNyBAQCBlbmFibGU/KFNR
TF9EQVRBQkFTRSkgewogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5j
cHAgXAogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3Bw
IFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKyAgICAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcCBcCiAgICAgICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50U3luYy5jcHAgXAogICAgICAgICBNb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsNiArMTAyOCw5IEBACiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFN0YXRlbWVudC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50QmFja2VuZC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMU3RhdGVtZW50QmFja2VuZC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFN0YXRlbWVudFN5bmMuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFN0YXRlbWVudFN5bmMuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsMTAgKzMxNSw2IEBAIHZvaWQgRGF0YWJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmUK
ICAgICBiYWNrZW5kKCktPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGVycm9yU2l0ZSwg
d2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIERhdGFiYXNlOjpy
ZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJv
ckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgYmFja2VuZCgpLT5yZXBvcnRFeGVj
dXRlU3RhdGVtZW50UmVzdWx0KGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJv
ckNvZGUpOwotfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDE0
MzAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMsMTEgKzkzLDkgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShD
SFJPTUlVTSkKICAgICB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9y
U2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CiAgICAgdm9p
ZCByZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3Fs
RXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydEV4ZWN1dGVT
dGF0ZW1lbnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSk7CiAjZWxzZQogICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJl
c3VsdChpbnQsIGludCwgaW50KSB7IH0KICAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQotICAgIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVu
dFJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KICNlbmRpZgogCiAgICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHJl
dmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyOwotICAg
IGZyaWVuZCBjbGFzcyBTUUxTdGF0ZW1lbnQ7CisgICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVu
dEJhY2tlbmQ7CiAgICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudFN5bmM7CiAgICAgZnJpZW5k
IGNsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKICAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kU3luYzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTg5ICszMCw3NCBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJTUUxFcnJvci5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50QmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU1FM
VmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUo
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9y
PFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBj
YWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLCBpbnQgcGVybWlzc2lvbnMpCitQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVt
ZW50OjpjcmVhdGUoRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1l
bnQoZGF0YWJhc2UsIHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFj
aywgcGVybWlzc2lvbnMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0YXRlbWVudChk
YXRhYmFzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKIH0KIAotU1FMU3RhdGVtZW50OjpT
UUxTdGF0ZW1lbnQoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwg
Y29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMpCi0gICAgOiBtX3N0YXRlbWVudChzdGF0
ZW1lbnQuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAg
LCBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGF0YWJhc2UtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KERhdGFiYXNlKiBk
YXRhYmFzZSwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssCisgICAg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAg
IDogbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVy
KGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAg
LCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQogewogfQogCi1ib29sIFNRTFN0YXRlbWVudDo6
ZXhlY3V0ZShEYXRhYmFzZSogZGIpCit2b2lkIFNRTFN0YXRlbWVudDo6c2V0QmFja2VuZChTUUxT
dGF0ZW1lbnRCYWNrZW5kKiBiYWNrZW5kKQogewotICAgIEFTU0VSVCghbV9yZXN1bHRTZXQpOwot
Ci0gICAgLy8gSWYgd2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1b3Rh
IHZpb2xhdGlvbiwgd2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdwotICAgIGNsZWFyRmFp
bHVyZUR1ZVRvUXVvdGEoKTsKLQotICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBi
ZWVuIG1hcmtlZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0aHJl
YWQsCi0gICAgLy8gc28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4K
LSAgICBpZiAobV9lcnJvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGItPnNldEF1
dGhvcml6ZXJQZXJtaXNzaW9ucyhtX3Blcm1pc3Npb25zKTsKLQotICAgIFNRTGl0ZURhdGFiYXNl
KiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0g
ICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBz
dGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCks
IHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRJbnRlcnJ1cHQpCi0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNy
ZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50
IiwgcmVzdWx0LCAiaW50ZXJydXB0ZWQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9l
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJjb3VsZCBub3Qg
cHJlcGFyZSBzdGF0ZW1lbnQiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDEsIG1fZXJyb3ItPmNvZGUo
KSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMjIHN5bnRheCBzdXBwb3J0ZWQgYnkgc3Fs
aXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMgdmVyeSBsaWtlbHkgb2ZmIGZyb20gdGhl
IG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0
aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhpbmcgZmlzaHkgb3IgbWFsaWNpb3VzCi0g
ICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBtX2FyZ3VtZW50cy5zaXpl
KCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJCaW5kIHBhcmFtZXRlciBjb3VudCBkb2Vz
bid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcyIpOwotICAgICAgICBtX2Vycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShkYi0+aXNJbnRlcnJ1cHRlZCgpID8gU1FMRXJyb3I6OkRBVEFCQVNF
X0VSUiA6IFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50
IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwotICAgICAgICBkYi0+cmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCgyLCBtX2Vycm9yLT5jb2RlKCksIDApOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5k
VmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxS
ZXN1bHRGdWxsKSB7Ci0gICAgICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YShkYik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBi
aW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVudCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBt
X3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkYi0+cmVwb3J0RXhlY3V0
ZVN0YXRlbWVudFJlc3VsdCgzLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCByZXN1bHQpOwotICAg
ICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VS
UiwgImNvdWxkIG5vdCBiaW5kIHZhbHVlIiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
UmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVzdWx0U2V0OjpjcmVhdGUoKTsK
LQotICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1bW4gbmFtZXMuCi0gICAgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykg
ewotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKLSAg
ICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3VsdFNldC0+cm93cygpOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKLSAgICAgICAgICAg
IHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7Ci0KLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQot
ICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUo
aSkpOwotCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgICAgICB9
IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgICAgIGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50
UmVzdWx0KDQsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBt
X2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiY291bGQg
bm90IGl0ZXJhdGUgcmVzdWx0cyIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcs
IG9yIHdhcyBhbiBpbnNlcnQKLSAgICAgICAgaWYgKGRiLT5sYXN0QWN0aW9uV2FzSW5zZXJ0KCkp
Ci0gICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFiYXNlLT5sYXN0SW5zZXJ0
Um93SUQoKSk7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgewotICAg
ICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0gdGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNr
ZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bgotICAg
ICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YShkYik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRDb25zdHJhaW50KSB7Ci0gICAgICAgIGRi
LT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDYsIFNRTEVycm9yOjpDT05TVFJBSU5UX0VS
UiwgcmVzdWx0KTsKLSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OkNPTlNUUkFJTlRfRVJSLCAiY291bGQgbm90IGV4ZWN1dGUgc3RhdGVtZW50IGR1ZSB0byBhIGNv
bnN0YWludCBmYWlsdXJlIiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGItPnJlcG9ydEV4ZWN1
dGVTdGF0ZW1lbnRSZXN1bHQoNSwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgcmVzdWx0KTsKLSAg
ICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwg
ImNvdWxkIG5vdCBleGVjdXRlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgc3BlYyBhbGxvd3MgdHJpZ2dlcnMsIGFuZCB3ZSB3YW50IHRvIGJlICJhY2N1cmF0ZSIg
aW4gYSBkaWZmZXJlbnQgd2F5LCB3ZSdkIHVzZQotICAgIC8vIHNxbGl0ZTNfdG90YWxfY2hhbmdl
cygpIGhlcmUgaW5zdGVhZCBvZiBzcWxpdGUzX2NoYW5nZWQsIGJlY2F1c2UgdGhhdCBpbmNsdWRl
cyByb3dzIG1vZGlmaWVkIGZyb20gd2l0aGluIGEgdHJpZ2dlcgotICAgIC8vIEZvciBub3csIHRo
aXMgc2VlbXMgc3VmZmljaWVudAotICAgIHJlc3VsdFNldC0+c2V0Um93c0FmZmVjdGVkKGRhdGFi
YXNlLT5sYXN0Q2hhbmdlcygpKTsKLQotICAgIG1fcmVzdWx0U2V0ID0gcmVzdWx0U2V0OwotICAg
IGRiLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDAsIC0xLCAwKTsgLy8gT0sKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBtX2JhY2tlbmQgPSBiYWNrZW5kOwogfQogCi12b2lkIFNRTFN0YXRl
bWVudDo6c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2UqIGRhdGFiYXNlKQorYm9vbCBT
UUxTdGF0ZW1lbnQ6Omhhc0NhbGxiYWNrKCkKIHsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1f
cmVzdWx0U2V0KTsKLSAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg2
LCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3Jl
YXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBleGVjdXRlIHN0YXRlbWVudCwg
YmVjYXVzZSB0aGUgdXNlciBkZWxldGVkIHRoZSBkYXRhYmFzZSIpOworICAgIHJldHVybiBtX3N0
YXRlbWVudENhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOwogfQogCi12b2lkIFNRTFN0YXRl
bWVudDo6c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZSogZGF0YWJhc2UpCitib29s
IFNRTFN0YXRlbWVudDo6aGFzRXJyb3JDYWxsYmFjaygpCiB7Ci0gICAgQVNTRVJUKCFtX2Vycm9y
ICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgZGF0YWJhc2UtPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRS
ZXN1bHQoNywgU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAwKTsKLSAgICBtX2Vycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhl
IGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7CisgICAg
cmV0dXJuIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsKIH0K
IAogYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQobV9iYWNr
ZW5kKTsKIAogICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOwogCiAgICAgUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVy
LnVud3JhcCgpOwogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBS
ZWZQdHI8U1FMRXJyb3I+IGVycm9yID0gbV9iYWNrZW5kLT5zcWxFcnJvcigpOwogCiAgICAgLy8g
Q2FsbCB0aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCBy
ZXN1bHRlZCBpbiBhbiBlcnJvciwKICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1w
IHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KLSAgICBpZiAobV9lcnJvcikgewor
ICAgIGlmIChlcnJvcikgewogICAgICAgICBBU1NFUlQoZXJyb3JDYWxsYmFjayk7Ci0gICAgICAg
IGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
bV9lcnJvci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChjYWxsYmFjaykKLSAgICAgICAgY2FsbGJh
Y2tFcnJvciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0
LmdldCgpKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9IGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KHRyYW5zYWN0aW9uLCBlcnJvci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChjYWxsYmFjaykg
eworICAgICAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQgPSBtX2JhY2tlbmQtPnNx
bFJlc3VsdFNldCgpOworICAgICAgICBjYWxsYmFja0Vycm9yID0gIWNhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbiwgcmVzdWx0U2V0LmdldCgpKTsKKyAgICB9CiAKICAgICByZXR1cm4g
Y2FsbGJhY2tFcnJvcjsKIH0KIAotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZhaWx1cmVEdWVUb1F1
b3RhKERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVz
dWx0U2V0KTsKLSAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg4LCBT
UUxFcnJvcjo6UVVPVEFfRVJSLCAwKTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShT
UUxFcnJvcjo6UVVPVEFfRVJSLCAidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3Jh
Z2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBk
ZWNsaW5lZCB0byBhbGxvdyBtb3JlIHNwYWNlIik7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50Ojpj
bGVhckZhaWx1cmVEdWVUb1F1b3RhKCkKLXsKLSAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxlZER1
ZVRvUXVvdGEoKSkKLSAgICAgICAgbV9lcnJvciA9IDA7Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50
OjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgpID09IFNRTEVycm9yOjpRVU9UQV9FUlI7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50LmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDQxICs0MSwyOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgU1FMRXJyb3I7CitjbGFz
cyBTUUxTdGF0ZW1lbnRCYWNrZW5kOwogY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7CiBjbGFz
cyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiAKIGNs
YXNzIFNRTFN0YXRlbWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxTdGF0ZW1l
bnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNyZWF0
ZShEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnQ+IGNyZWF0ZShEYXRhYmFzZSosCisgICAgICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+KTsKIAot
ICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOwotICAgIGJvb2wgbGFzdEV4ZWN1dGlvbkZhaWxl
ZER1ZVRvUXVvdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaGFzU3RhdGVtZW50Q2FsbGJhY2soKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOyB9
Ci0gICAgYm9vbCBoYXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOyB9CisgICAgYm9vbCBw
ZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKIAotICAgIHZvaWQgc2V0RGF0YWJhc2VE
ZWxldGVkRXJyb3IoRGF0YWJhc2UqKTsKLSAgICB2b2lkIHNldFZlcnNpb25NaXNtYXRjaGVkRXJy
b3IoRGF0YWJhc2UqKTsKKyAgICB2b2lkIHNldEJhY2tlbmQoU1FMU3RhdGVtZW50QmFja2VuZCop
OwogCi0gICAgYm9vbCBwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICBib29s
IGhhc0NhbGxiYWNrKCk7CisgICAgYm9vbCBoYXNFcnJvckNhbGxiYWNrKCk7CiAKLSAgICBTUUxF
cnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVy
bWlzc2lvbnMpOworICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+KTsK
IAotICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoRGF0YWJhc2UqKTsKLSAgICB2b2lkIGNs
ZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKLQotICAgIFN0cmluZyBtX3N0YXRlbWVudDsKLSAgICBW
ZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOworICAgIFNRTFN0YXRlbWVudEJhY2tlbmQqIG1f
YmFja2VuZDsKICAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IG1f
c3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyOwogICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrPiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyOwotCi0g
ICAgUmVmUHRyPFNRTEVycm9yPiBtX2Vycm9yOwotICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IG1f
cmVzdWx0U2V0OwotCi0gICAgaW50IG1fcGVybWlzc2lvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0
YXRlbWVudEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50QmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MjkyMikJKGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwOjE0
MjkyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCisj
aW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+
IFNRTFN0YXRlbWVudDo6Y3JlYXRlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1lbnQsIGFyZ3VtZW50
cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7Cit9CisKK1NRTFN0YXRl
bWVudDo6U1FMU3RhdGVtZW50KERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0
ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQorICAgIDogbV9zdGF0ZW1l
bnQoc3RhdGVtZW50Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRz
KQorICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tX
cmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
CisgICAgLCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQoreworfQorCitib29sIFNRTFN0YXRl
bWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCit7CisgICAgQVNTRVJUKCFtX3Jlc3VsdFNldCk7
CisKKyAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFmdGVyIGEgcXVv
dGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93CisgICAgY2xlYXJG
YWlsdXJlRHVlVG9RdW90YSgpOworCisgICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBtaWdodCBoYXZl
IGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRoZSBtYWluIHRo
cmVhZCwKKyAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0dXJuIGZhbHNl
LgorICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYi0+c2V0
QXV0aG9yaXplclBlcm1pc3Npb25zKG1fcGVybWlzc2lvbnMpOworCisgICAgU1FMaXRlRGF0YWJh
c2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOworCisgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsK
KyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9m
IHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEo
KSwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdEludGVycnVwdCkKKyAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6
Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1l
bnQiLCByZXN1bHQsICJpbnRlcnJ1cHRlZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgImNvdWxkIG5v
dCBwcmVwYXJlIHN0YXRlbWVudCIsIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoMSwgbV9lcnJvci0+Y29k
ZSgpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklY
TUU6ICBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBz
cWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0
aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgorICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2Us
IHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMK
KyAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNp
emUoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50IGRv
ZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CisgICAgICAgIG1fZXJyb3Ig
PSBTUUxFcnJvcjo6Y3JlYXRlKGRiLT5pc0ludGVycnVwdGVkKCkgPyBTUUxFcnJvcjo6REFUQUJB
U0VfRVJSIDogU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBzdGF0ZW1l
bnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CisgICAgICAgIGRiLT5y
ZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDIsIG1fZXJyb3ItPmNvZGUoKSwgMCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJp
bmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKGRiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFpbGVkIHRv
IGJpbmQgdmFsdWUgaW5kZXggJWkgdG8gc3RhdGVtZW50IGZvciBxdWVyeSAnJXMnIiwgaSArIDEs
IG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRiLT5yZXBvcnRFeGVj
dXRlU3RhdGVtZW50UmVzdWx0KDMsIFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0Vf
RVJSLCAiY291bGQgbm90IGJpbmQgdmFsdWUiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNyZWF0ZSgp
OworCisgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4KKyAgICBy
ZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93
KSB7CisgICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1bW5Db3VudCgpOwor
ICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzID0gcmVzdWx0U2V0LT5yb3dzKCk7CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQorICAgICAgICAg
ICAgcm93cy0+YWRkQ29sdW1uKHN0YXRlbWVudC5nZXRDb2x1bW5OYW1lKGkpKTsKKworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKysp
CisgICAgICAgICAgICAgICAgcm93cy0+YWRkUmVzdWx0KHN0YXRlbWVudC5nZXRDb2x1bW5WYWx1
ZShpKSk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAg
IH0gd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOworCisgICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQoNCwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsICJjb3Vs
ZCBub3QgaXRlcmF0ZSByZXN1bHRzIiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAvLyBEaWRuJ3QgZmluZCBhbnl0aGlu
Zywgb3Igd2FzIGFuIGluc2VydAorICAgICAgICBpZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQo
KSkKKyAgICAgICAgICAgIHJlc3VsdFNldC0+c2V0SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNl
cnRSb3dJRCgpKTsKKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7Cisg
ICAgICAgIC8vIFJldHVybiB0aGUgUXVvdGEgZXJyb3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBh
c2tlZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCisg
ICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKGRiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdENvbnN0cmFpbnQpIHsKKyAgICAgICAg
ZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoNiwgU1FMRXJyb3I6OkNPTlNUUkFJTlRf
RVJSLCByZXN1bHQpOworICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJv
cjo6Q09OU1RSQUlOVF9FUlIsICJjb3VsZCBub3QgZXhlY3V0ZSBzdGF0ZW1lbnQgZHVlIHRvIGEg
Y29uc3RhaW50IGZhaWx1cmUiLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYi0+cmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdCg1LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCByZXN1bHQpOwor
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCAiY291bGQgbm90IGV4ZWN1dGUgc3RhdGVtZW50IiwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRl
IiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFu
Z2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1
ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywg
dGhpcyBzZWVtcyBzdWZmaWNpZW50CisgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0
YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworCisgICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7Cisg
ICAgZGItPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTFN0YXRlbWVudDo6c2V0RGF0YWJhc2VEZWxldGVk
RXJyb3IoRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9y
ZXN1bHRTZXQpOworICAgIGRhdGFiYXNlLT5yZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KDYs
IFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBi
ZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFiYXNlIik7Cit9CisKK3ZvaWQgU1FMU3Rh
dGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sK
KyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKKyAgICBkYXRhYmFzZS0+cmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg3LCBTUUxFcnJvcjo6VkVSU0lPTl9FUlIsIDApOwor
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VSUiwgImN1
cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVudCBk
byBub3QgbWF0Y2giKTsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsK
KworICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOworCisgICAgUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiBjYWxsYmFjayA9IG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLnVud3Jh
cCgpOworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
ID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKworICAgIC8vIENh
bGwgdGhlIGFwcHJvcHJpYXRlIHN0YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVz
dWx0ZWQgaW4gYW4gZXJyb3IsCisgICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0
byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3IpIHsKKyAg
ICAgICAgQVNTRVJUKGVycm9yQ2FsbGJhY2spOworICAgICAgICBjYWxsYmFja0Vycm9yID0gZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAg
IH0gZWxzZSBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhY2FsbGJhY2st
PmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisKKyAgICByZXR1
cm4gY2FsbGJhY2tFcnJvcjsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZhaWx1cmVEdWVU
b1F1b3RhKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1f
cmVzdWx0U2V0KTsKKyAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCg4
LCBTUUxFcnJvcjo6UVVPVEFfRVJSLCAwKTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZShTUUxFcnJvcjo6UVVPVEFfRVJSLCAidGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0
b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNl
ciBkZWNsaW5lZCB0byBhbGxvdyBtb3JlIHNwYWNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50
OjpjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCkKK3sKKyAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxl
ZER1ZVRvUXVvdGEoKSkKKyAgICAgICAgbV9lcnJvciA9IDA7Cit9CisKK2Jvb2wgU1FMU3RhdGVt
ZW50OjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgpID09IFNRTEVycm9yOjpRVU9UQV9FUlI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEJh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50QmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MjkyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50QmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDM4ICsyNiw5MSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVu
dEJhY2tlbmQuaCIKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIlNRTEVycm9yLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnQu
aCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1
ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJT
UUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKworLy8g
VGhlIExpZmUtQ3ljbGUgb2YgYSBTUUxTdGF0ZW1lbnQgaS5lLiBXaG8ncyBrZWVwaW5nIHRoZSBT
UUxTdGF0ZW1lbnQgYWxpdmU/IAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRoZSBSZWZQdHIg
Y2hhaW4gZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorLy8KKy8vICAgICBBdCBiaXJ0aCAoaW4g
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpleGVjdXRlU1FMKCkpOgorLy8gICAgID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQgICAgICAgICAgIC8vIERlcXVlPFJlZlB0cjxTUUxTdGF0ZW1lbnRCYWNrZW5k
PiA+IG1fc3RhdGVtZW50UXVldWUgcG9pbnRzIHRvIC4uLgorLy8gICAgIC0tPiBTUUxTdGF0ZW1l
bnRCYWNrZW5kICAgICAgICAgLy8gUmVmUHRyPFNRTFN0YXRlbWVudD4gbV9mcm9udGVuZCBwb2lu
dHMgdG8gLi4uCisvLyAgICAgICAgIC0tPiBTUUxTdGF0ZW1lbnQKKy8vCisvLyAgICAgQWZ0ZXIg
Z3JhYmJpbmcgdGhlIHN0YXRlbWVudCBmb3IgZXhlY3V0aW9uIChpbiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmdldE5leHRTdGF0ZW1lbnQoKSk6CisvLyAgICAgPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKy8vICAgICBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgICAgICAgICAgIC8vIFJl
ZlB0cjxTUUxTdGF0ZW1lbnRCYWNrZW5kPiBtX2N1cnJlbnRTdGF0ZW1lbnQgcG9pbnRzIHRvIC4u
LgorLy8gICAgIC0tPiBTUUxTdGF0ZW1lbnRCYWNrZW5kICAgICAgICAgLy8gUmVmUHRyPFNRTFN0
YXRlbWVudD4gbV9mcm9udGVuZCBwb2ludHMgdG8gLi4uCisvLyAgICAgICAgIC0tPiBTUUxTdGF0
ZW1lbnQKKy8vCisvLyAgICAgVGhlbiB3ZSBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgaW4gU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50QW5kR2V0TmV4dFN0YXRlKCkuCisv
LyAgICAgQW5kIHdlIGNhbGxiYWNrIHRvIHRoZSBzY3JpcHQgaW4gU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpIGlmCisvLyAgICAgbmVjZXNzYXJ5LgorLy8gICAgIC0g
RHVyaW5nIHRoaXMgdGltZSwgU1FMVHJhbnNhY3Rpb24gb3BlcmF0ZXMgb24gYSByYXcgU1FMU3Rh
dGVtZW50KiBhbmQgbm90IGEgUmVmUHRyLgorLy8gICAgICAgSXQgaXMgdW5kZXJzdG9vZCB0aGF0
IHRoZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgd2lsbCBiZSBrZWVwaW5nIHRoZSBTUUxTdGF0ZW1l
bnQKKy8vICAgICAgIGFsaXZlIHZpYSBpdHMgU1FMU3RhdGVtZW50QmFja2VuZCB2aWEgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjptX2N1cnJlbnRTdGF0ZW1lbnQKKy8vICAgICAgIGZvciB0aGlzIGVu
dGlyZSBwZXJpb2QuCisvLworLy8gICAgIEFmdGVyIHdlJ3JlIGRvbmUgZXhlY3V0aW5nIHRoZSBz
dGF0ZW1lbnQgKGluIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Z2V0TmV4dFN0YXRlbWVudCgpKToK
Ky8vICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICBXaGVuIHdlJ3Jl
IGRvbmUgZXhlY3V0aW5nLCB3ZSdsbCBncmFiIHRoZSBuZXh0IHN0YXRlbWVudC4gQnV0IGJlZm9y
ZSB3ZQorLy8gICAgIGRvIHRoYXQsIGdldE5leHRTdGF0ZW1lbnQoKSBudWxsaWZ5IFNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6bV9jdXJyZW50U3RhdGVtZW50LgorLy8gICAgIFRoaXMgd2lsbCB0cmln
Z2VyIHRoZSBkZWxldGlvbiBvZiB0aGUgU1FMU3RhdGVtZW50QmFja2VuZCBhbmQgU1FMU3RhdGVt
ZW50LgorLy8KKy8vICAgICBOb3RlOiB1bmxpa2Ugd2l0aCBTUUxUcmFuc2FjdGlvbiwgdGhlcmUg
aXMgbm8gSlMgcmVwcmVzZW50YXRpb24gb2YgU1FMU3RhdGVtZW50LgorLy8gICAgIEhlbmNlLCB0
aGVyZSBpcyBubyBHQyBkZXBlbmRlbmN5IGF0IHBsYXkgaGVyZS4KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoRGF0
YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxs
YmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
LCBpbnQgcGVybWlzc2lvbnMpCitQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEJhY2tlbmQ+IFNRTFN0
YXRlbWVudEJhY2tlbmQ6OmNyZWF0ZShQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gZnJvbnRlbmQs
CisgICAgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFy
Z3VtZW50cywgaW50IHBlcm1pc3Npb25zKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FM
U3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0
ZW1lbnRCYWNrZW5kKGZyb250ZW5kLCBzdGF0ZW1lbnQsIGFyZ3VtZW50cywgcGVybWlzc2lvbnMp
KTsKIH0KIAotU1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQoRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRz
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMp
Ci0gICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQuaXNvbGF0ZWRDb3B5KCkpCitTUUxTdGF0ZW1l
bnRCYWNrZW5kOjpTUUxTdGF0ZW1lbnRCYWNrZW5kKFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBm
cm9udGVuZCwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsCisgICAgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpCisgICAgOiBtX2Zyb250ZW5kKGZyb250
ZW5kKQorICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50Lmlzb2xhdGVkQ29weSgpKQogICAgICwg
bV9hcmd1bWVudHMoYXJndW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIo
Y2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX3N0
YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2hhc0NhbGxiYWNrKG1fZnJvbnRlbmQtPmhh
c0NhbGxiYWNrKCkpCisgICAgLCBtX2hhc0Vycm9yQ2FsbGJhY2sobV9mcm9udGVuZC0+aGFzRXJy
b3JDYWxsYmFjaygpKQogICAgICwgbV9wZXJtaXNzaW9ucyhwZXJtaXNzaW9ucykKIHsKKyAgICBt
X2Zyb250ZW5kLT5zZXRCYWNrZW5kKHRoaXMpOworfQorCitTUUxTdGF0ZW1lbnQqIFNRTFN0YXRl
bWVudEJhY2tlbmQ6OmZyb250ZW5kKCkKK3sKKyAgICByZXR1cm4gbV9mcm9udGVuZC5nZXQoKTsK
K30KKworUGFzc1JlZlB0cjxTUUxFcnJvcj4gU1FMU3RhdGVtZW50QmFja2VuZDo6c3FsRXJyb3Io
KSBjb25zdAoreworICAgIHJldHVybiBtX2Vycm9yOworfQorCitQYXNzUmVmUHRyPFNRTFJlc3Vs
dFNldD4gU1FMU3RhdGVtZW50QmFja2VuZDo6c3FsUmVzdWx0U2V0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZXN1bHRTZXQ7CiB9CiAKLWJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFi
YXNlKiBkYikKK2Jvb2wgU1FMU3RhdGVtZW50QmFja2VuZDo6ZXhlY3V0ZShEYXRhYmFzZUJhY2tl
bmRBc3luYyogZGIpCiB7CiAgICAgQVNTRVJUKCFtX3Jlc3VsdFNldCk7CiAKQEAgLTE2MSw1NCAr
MjE0LDM0IEBAIGJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldERhdGFiYXNlRGVsZXRlZEVy
cm9yKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgU1FMU3RhdGVtZW50QmFja2VuZDo6c2V0RGF0
YWJhc2VEZWxldGVkRXJyb3IoRGF0YWJhc2VCYWNrZW5kQXN5bmMqIGRhdGFiYXNlKQogewogICAg
IEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOwogICAgIGRhdGFiYXNlLT5yZXBvcnRF
eGVjdXRlU3RhdGVtZW50UmVzdWx0KDYsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CiAgICAg
bV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxl
IHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFi
YXNlIik7CiB9CiAKLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9y
KERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgU1FMU3RhdGVtZW50QmFja2VuZDo6c2V0VmVyc2lv
bk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZUJhY2tlbmRBc3luYyogZGF0YWJhc2UpCiB7CiAgICAg
QVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CiAgICAgZGF0YWJhc2UtPnJlcG9ydEV4
ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoNywgU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAwKTsKICAgICBt
X2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50
IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90
IG1hdGNoIik7CiB9CiAKLWJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7Ci0KLSAg
ICBib29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRD
YWxsYmFjaz4gY2FsbGJhY2sgPSBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlci51bndyYXAoKTsK
LSAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IG1f
c3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Ci0KLSAgICAvLyBDYWxsIHRo
ZSBhcHByb3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sgYW5kIHRyYWNrIGlmIGl0IHJlc3VsdGVk
IGluIGFuIGVycm9yLAotICAgIC8vIGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhl
IHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgotICAgIGlmIChtX2Vycm9yKSB7Ci0gICAgICAg
IEFTU0VSVChlcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IGVycm9yQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKLSAgICB9IGVs
c2UgaWYgKGNhbGxiYWNrKQotICAgICAgICBjYWxsYmFja0Vycm9yID0gIWNhbGxiYWNrLT5oYW5k
bGVFdmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNh
bGxiYWNrRXJyb3I7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90
YShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIFNRTFN0YXRlbWVudEJhY2tlbmQ6OnNldEZhaWx1
cmVEdWVUb1F1b3RhKERhdGFiYXNlQmFja2VuZEFzeW5jKiBkYXRhYmFzZSkKIHsKICAgICBBU1NF
UlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKICAgICBkYXRhYmFzZS0+cmVwb3J0RXhlY3V0
ZVN0YXRlbWVudFJlc3VsdCg4LCBTUUxFcnJvcjo6UVVPVEFfRVJSLCAwKTsKICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6UVVPVEFfRVJSLCAidGhlcmUgd2FzIG5vdCBl
bm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdlIHF1b3RhIHdhcyBy
ZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5lZCB0byBhbGxvdyBtb3JlIHNwYWNlIik7CiB9CiAK
LXZvaWQgU1FMU3RhdGVtZW50OjpjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCkKK3ZvaWQgU1FMU3Rh
dGVtZW50QmFja2VuZDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCiB7CiAgICAgaWYgKGxhc3RF
eGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCiAgICAgICAgIG1fZXJyb3IgPSAwOwogfQogCi1i
b29sIFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAor
Ym9vbCBTUUxTdGF0ZW1lbnRCYWNrZW5kOjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgpID09IFNRTEVy
cm9yOjpRVU9UQV9FUlI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFN0YXRlbWVudEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEJhY2tlbmQuaAkocmV2aXNpb24gMTQyOTIy
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5o
OjE0MjkyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVt
ZW50QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNRTFN0
YXRlbWVudF9oCisjZGVmaW5lIFNRTFN0YXRlbWVudF9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiU1FMQ2FsbGJhY2tXcmFwcGVyLmgiCisjaW5jbHVkZSAiU1FMUmVz
dWx0U2V0LmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIFNRTEVy
cm9yOworY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7CitjbGFzcyBTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb247CisKK2NsYXNzIFNRTFN0YXRlbWVudCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxTdGF0ZW1lbnQ+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNyZWF0ZShEYXRhYmFzZSosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBl
cm1pc3Npb25zKTsKKworICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOworICAgIGJvb2wgbGFz
dEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdDsKKworICAgIGJvb2wgaGFzU3RhdGVt
ZW50Q2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlci5o
YXNDYWxsYmFjaygpOyB9CisgICAgYm9vbCBoYXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygp
OyB9CisKKyAgICB2b2lkIHNldERhdGFiYXNlRGVsZXRlZEVycm9yKERhdGFiYXNlKik7CisgICAg
dm9pZCBzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKERhdGFiYXNlKik7CisKKyAgICBib29sIHBl
cmZvcm1DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOworCisgICAgU1FMRXJyb3IqIHNxbEVycm9y
KCkgY29uc3QgeyByZXR1cm4gbV9lcnJvci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBTUUxTdGF0
ZW1lbnQoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKKwor
ICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoRGF0YWJhc2UqKTsKKyAgICB2b2lkIGNsZWFy
RmFpbHVyZUR1ZVRvUXVvdGEoKTsKKworICAgIFN0cmluZyBtX3N0YXRlbWVudDsKKyAgICBWZWN0
b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxTdGF0
ZW1lbnRDYWxsYmFjaz4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJh
Y2tXcmFwcGVyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVtZW50RXJyb3JDYWxs
YmFja1dyYXBwZXI7CisKKyAgICBSZWZQdHI8U1FMRXJyb3I+IG1fZXJyb3I7CisgICAgUmVmUHRy
PFNRTFJlc3VsdFNldD4gbV9yZXN1bHRTZXQ7CisKKyAgICBpbnQgbV9wZXJtaXNzaW9uczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRCYWNrZW5kLmgJKHJl
dmlzaW9uIDE0MjkyMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxMiArMjUsMTEgQEAKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwotI2lmbmRlZiBTUUxTdGF0ZW1lbnRfaAot
I2RlZmluZSBTUUxTdGF0ZW1lbnRfaAorI2lmbmRlZiBTUUxTdGF0ZW1lbnRCYWNrZW5kX2gKKyNk
ZWZpbmUgU1FMU3RhdGVtZW50QmFja2VuZF9oCiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiU1FMQ2FsbGJhY2tXcmFwcGVyLmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0
LmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAt
MzksMzggKzM4LDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2U7
CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRBc3luYzsKIGNsYXNzIFNRTEVycm9yOwotY2xhc3MgU1FM
U3RhdGVtZW50Q2FsbGJhY2s7Ci1jbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOwotY2xh
c3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBTUUxTdGF0ZW1lbnQ7CitjbGFzcyBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ7CiAKLWNsYXNzIFNRTFN0YXRlbWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxTUUxTdGF0ZW1lbnQ+IHsKK2NsYXNzIFNRTFN0YXRlbWVudEJhY2tlbmQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMU3RhdGVtZW50QmFja2VuZD4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQg
cGVybWlzc2lvbnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEJhY2tlbmQ+
IGNyZWF0ZShQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4sCisgICAgICAgIGNvbnN0IFN0cmluZyYg
c3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIGludCBwZXJt
aXNzaW9ucyk7CiAKLSAgICBib29sIGV4ZWN1dGUoRGF0YWJhc2UqKTsKKyAgICBib29sIGV4ZWN1
dGUoRGF0YWJhc2VCYWNrZW5kQXN5bmMqKTsKICAgICBib29sIGxhc3RFeGVjdXRpb25GYWlsZWRE
dWVUb1F1b3RhKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc1N0YXRlbWVudENhbGxiYWNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQot
ICAgIGJvb2wgaGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQorICAgIGJvb2wgaGFz
U3RhdGVtZW50Q2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2hhc0NhbGxiYWNrOyB9CisgICAg
Ym9vbCBoYXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9oYXNFcnJv
ckNhbGxiYWNrOyB9CiAKLSAgICB2b2lkIHNldERhdGFiYXNlRGVsZXRlZEVycm9yKERhdGFiYXNl
Kik7Ci0gICAgdm9pZCBzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKERhdGFiYXNlKik7CisgICAg
dm9pZCBzZXREYXRhYmFzZURlbGV0ZWRFcnJvcihEYXRhYmFzZUJhY2tlbmRBc3luYyopOworICAg
IHZvaWQgc2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZUJhY2tlbmRBc3luYyopOwog
Ci0gICAgYm9vbCBwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICBTUUxTdGF0
ZW1lbnQqIGZyb250ZW5kKCk7CisgICAgUGFzc1JlZlB0cjxTUUxFcnJvcj4gc3FsRXJyb3IoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gc3FsUmVzdWx0U2V0KCkgY29uc3Q7
CiAKLSAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgp
OyB9CiBwcml2YXRlOgotICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s+LCBpbnQgcGVybWlzc2lvbnMpOworICAgIFNRTFN0YXRlbWVudEJhY2tlbmQoUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnQ+LCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMpOwogCi0gICAgdm9p
ZCBzZXRGYWlsdXJlRHVlVG9RdW90YShEYXRhYmFzZSopOworICAgIHZvaWQgc2V0RmFpbHVyZUR1
ZVRvUXVvdGEoRGF0YWJhc2VCYWNrZW5kQXN5bmMqKTsKICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1
ZVRvUXVvdGEoKTsKIAorICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IG1fZnJvbnRlbmQ7CiAgICAg
U3RyaW5nIG1fc3RhdGVtZW50OwogICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7Ci0g
ICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENh
bGxiYWNrV3JhcHBlcjsKLSAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcjsKKyAgICBib29sIG1faGFz
Q2FsbGJhY2s7CisgICAgYm9vbCBtX2hhc0Vycm9yQ2FsbGJhY2s7CiAKICAgICBSZWZQdHI8U1FM
RXJyb3I+IG1fZXJyb3I7CiAgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gbV9yZXN1bHRTZXQ7CkBA
IC04Miw0ICs4NCw0IEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogCi0jZW5kaWYgLy8gU1FMU3RhdGVtZW50X2gKKyNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRCYWNr
ZW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDEyICsxNzAsMTUgQEAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbjo6
ZGVsaQogCiBTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVt
ZW50Q2FsbGJhY2soKQogewotICAgIEFTU0VSVChtX2JhY2tlbmQtPm1fY3VycmVudFN0YXRlbWVu
dCk7Ci0KICAgICAvLyBTcGVjIDQuMy4yLjYuNiBhbmQgNC4zLjIuNi4zOiBJZiB0aGUgc3RhdGVt
ZW50IGNhbGxiYWNrIHdlbnQgd3JvbmcsIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNh
bGxiYWNrCiAgICAgLy8gT3RoZXJ3aXNlLCBjb250aW51ZSB0byBsb29wIHRocm91Z2ggdGhlIHN0
YXRlbWVudCBxdWV1ZQogICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwotICAgIGJvb2wg
cmVzdWx0ID0gbV9iYWNrZW5kLT5tX2N1cnJlbnRTdGF0ZW1lbnQtPnBlcmZvcm1DYWxsYmFjayh0
aGlzKTsKKworICAgIFNRTFN0YXRlbWVudCogY3VycmVudFN0YXRlbWVudCA9IG1fYmFja2VuZC0+
Y3VycmVudFN0YXRlbWVudCgpOworICAgIEFTU0VSVChjdXJyZW50U3RhdGVtZW50KTsKKworICAg
IGJvb2wgcmVzdWx0ID0gY3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKHRoaXMpOwor
CiAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdCkgewpA
QCAtMTg4LDcgKzE5MSw3IEBAIFNRTFRyYW5zYWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb246OmRl
bGkKIAogU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5j
cmVhc2VDYWxsYmFjaygpCiB7Ci0gICAgQVNTRVJUKG1fYmFja2VuZC0+bV9jdXJyZW50U3RhdGVt
ZW50KTsKKyAgICBBU1NFUlQobV9iYWNrZW5kLT5jdXJyZW50U3RhdGVtZW50KCkpOwogCiAgICAg
Ym9vbCBzaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKTsKICAgICBtX2JhY2tlbmQtPnNl
dFNob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChzaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQp
OwpAQCAtMjU1LDEyICsyNTgsOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNv
bnN0IFN0CiAgICAgZWxzZSBpZiAobV9yZWFkT25seSkKICAgICAgICAgcGVybWlzc2lvbnMgfD0g
RGF0YWJhc2VBdXRob3JpemVyOjpSZWFkT25seU1hc2s7CiAKLSAgICBSZWZQdHI8U1FMU3RhdGVt
ZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBz
cWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBlcm1pc3Np
b25zKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCi0gICAgICAgIHN0YXRlbWVu
dC0+c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7Ci0KLSAgICBtX2Jh
Y2tlbmQtPmVucXVldWVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBSZWZQdHI8U1FMU3RhdGVt
ZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBj
YWxsYmFjaywgY2FsbGJhY2tFcnJvcik7CisgICAgbV9iYWNrZW5kLT5leGVjdXRlU1FMKHN0YXRl
bWVudC5yZWxlYXNlKCksIHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBwZXJtaXNzaW9ucyk7CiB9
CiAKIGJvb2wgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRl
ZERhdGFiYXNlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MzAz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25C
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBACiAKICNpbmNsdWRl
ICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1ZGUg
IkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4
dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxFcnJvci5oIgogI2luY2x1
ZGUgIlNRTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudEJhY2tlbmQuaCIKICNp
bmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIiAvLyBGSVhNRTogcmVtb3ZlIHdoZW4gU1FM
U3RhdGVtZW50IGhhcyBiZWVuIHJlZmFjdG9yZWQuCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIiAvLyBGSVhNRTogcmVtb3ZlIHdoZW4gU1FMU3RhdGVtZW50IGhhcyBiZWVu
IHJlZmFjdG9yZWQuCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKQEAgLTIzMCwxNSArMjMy
LDE1IEBACiAvLyB0byB3YWl0IGZvciBmdXJ0aGVyIGFjdGlvbi4KIAogCi0vLyBUaGUgTGlmZS1D
eWNsZSBvZiBhIFNRTFRyYW5zYWN0aW9uIGkuZS4gV2hvJ3Mga2VlcGluZyB0aGUgU1FMVHJhbnNh
Y3Rpb25BbGl2ZT8gCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIExpZmUtQ3ljbGUg
b2YgYSBTUUxUcmFuc2FjdGlvbiBpLmUuIFdobydzIGtlZXBpbmcgdGhlIFNRTFRyYW5zYWN0aW9u
IGFsaXZlPyAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gVGhlIFJlZlB0ciBjaGFpbiBn
b2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6CiAvLwogLy8gICAgIEF0IGJpcnRoIChpbiBEYXRhYmFz
ZUJhY2tlbmRBc3luYzo6cnVuVHJhbnNhY3Rpb24oKSk6CiAvLyAgICAgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gICAgIERhdGFiYXNlQmFj
a2VuZEFzeW5jICAgICAgICAgICAgICAgLy8gaW4gRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
QmFja2VuZD4gPiBtX3RyYW5zYWN0aW9uUXVldWUgcG9pbnRzIHRvIC4uLgotLy8gICAgIC0tPiBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQgICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiBtX2Zyb250ZW5kIHBvaW50cyB0byAuLi4KLS8vICAgICAgICAgLS0+IFNRTFRyYW5zYWN0aW9u
ICAgICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fYmFja2Vu
ZCBwb2ludHMgdG8gLi4uCisvLyAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMgICAgICAgICAgICAg
ICAvLyBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiA+IG1fdHJhbnNhY3Rpb25R
dWV1ZSBwb2ludHMgdG8gLi4uCisvLyAgICAgLS0+IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAgICAg
ICAgICAvLyBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fZnJvbnRlbmQgcG9pbnRzIHRvIC4uLgor
Ly8gICAgICAgICAtLT4gU1FMVHJhbnNhY3Rpb24gICAgICAgICAgICAgLy8gUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQmFja2VuZD4gbV9iYWNrZW5kIHBvaW50cyB0byAuLi4KIC8vICAgICAgICAgICAg
IC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgIC8vIHdoaWNoIGlzIGEgY2lyY3VsYXIgcmVmZXJl
bmNlLgogLy8KIC8vICAgICBOb3RlOiB0aGVyZSdzIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGJldHdl
ZW4gdGhlIFNRTFRyYW5zYWN0aW9uIGZyb250LWVuZCBhbmQKQEAgLTI0OSwxOCArMjUxLDE4IEBA
CiAvLwogLy8gICAgIEFmdGVyIHNjaGVkdWxpbmcgdGhlIHRyYW5zYWN0aW9uIHdpdGggdGhlIERh
dGFiYXNlVGhyZWFkIChEYXRhYmFzZUJhY2tlbmRBc3luYzo6c2NoZWR1bGVUcmFuc2FjdGlvbigp
KToKIC8vICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS8vICAgICBEYXRhYmFzZVRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBNZXNz
YWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlIHBvaW50cyB0byAuLi4KLS8vICAgICAtLT4g
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgICAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uIHBvaW50cyB0byAuLi4KLS8vICAgICAgICAgLS0+
IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rp
b24+IG1fZnJvbnRlbmQgcG9pbnRzIHRvIC4uLgotLy8gICAgICAgICAgICAgLS0+IFNRTFRyYW5z
YWN0aW9uICAgICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IG1f
YmFja2VuZCBwb2ludHMgdG8gLi4uCisvLyAgICAgRGF0YWJhc2VUaHJlYWQgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZSBwb2ludHMg
dG8gLi4uCisvLyAgICAgLS0+IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICAgICAgICAgICAgLy8g
UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbiBwb2ludHMgdG8gLi4u
CisvLyAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgICAgICAgICAgLy8gUmVmUHRy
PFNRTFRyYW5zYWN0aW9uPiBtX2Zyb250ZW5kIHBvaW50cyB0byAuLi4KKy8vICAgICAgICAgICAg
IC0tPiBTUUxUcmFuc2FjdGlvbiAgICAgICAgICAgICAvLyBSZWZQdHI8U1FMVHJhbnNhY3Rpb25C
YWNrZW5kPiBtX2JhY2tlbmQgcG9pbnRzIHRvIC4uLgogLy8gICAgICAgICAgICAgICAgIC0tPiBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQgIC8vIHdoaWNoIGlzIGEgY2lyY3VsYXIgcmVmZXJlbmNlLgog
Ly8KIC8vICAgICBXaGVuIGV4ZWN1dGluZyB0aGUgdHJhbnNhY3Rpb24gKGluIERhdGFiYXNlVGhy
ZWFkOjpkYXRhYmFzZVRocmVhZCgpKToKIC8vICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gICAgIE93blB0
cjxEYXRhYmFzZVRhc2s+IHRhc2s7ICAgICAgICAgICAgIC8vIHBvaW50cyB0byAuLi4KLS8vICAg
ICAtLT4gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgICAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uIHBvaW50cyB0byAuLi4KLS8vICAgICAg
ICAgLS0+IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAgICAgICAgICAvLyBpbjogUmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiBtX2Zyb250ZW5kOwotLy8gICAgICAgICAgICAgLS0+IFNRTFRyYW5zYWN0aW9u
ICAgICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fYmFja2Vu
ZCBwb2ludHMgdG8gLi4uCisvLyAgICAgLS0+IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICAgICAg
ICAgICAgLy8gUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbiBwb2lu
dHMgdG8gLi4uCisvLyAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgICAgICAgICAg
Ly8gUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBtX2Zyb250ZW5kOworLy8gICAgICAgICAgICAgLS0+
IFNRTFRyYW5zYWN0aW9uICAgICAgICAgICAgIC8vIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ+IG1fYmFja2VuZCBwb2ludHMgdG8gLi4uCiAvLyAgICAgICAgICAgICAgICAgLS0+IFNRTFRy
YW5zYWN0aW9uQmFja2VuZCAgLy8gd2hpY2ggaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuCiAvLwog
Ly8gICAgIEF0IHRoZSBlbmQgb2YgY2xlYW51cEFuZFRlcm1pbmF0ZSgpOgpAQCAtMzc1LDYgKzM3
NywxMSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbnVwKCkKICAgICBtX3Ry
YW5zYWN0aW9uRXJyb3IgPSAwOwogfQogCitTUUxTdGF0ZW1lbnQqIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6Y3VycmVudFN0YXRlbWVudCgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlbWVu
dC0+ZnJvbnRlbmQoKTsKK30KKwogUGFzc1JlZlB0cjxTUUxFcnJvcj4gU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjp0cmFuc2FjdGlvbkVycm9yKCkKIHsKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbkVy
cm9yOwpAQCAtNDEwLDcgKzQxNyw3IEBAIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6U3RhdGVGdW5j
dGlvbiBTUUwKICAgICByZXR1cm4gc3RhdGVGdW5jdGlvbnNbc3RhdGljX2Nhc3Q8aW50PihzdGF0
ZSldOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZW5xdWV1ZVN0YXRlbWVudChQ
YXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50KQordm9pZCBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmVucXVldWVTdGF0ZW1lbnQoUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRCYWNrZW5kPiBz
dGF0ZW1lbnQpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOwog
ICAgIG1fc3RhdGVtZW50UXVldWUuYXBwZW5kKHN0YXRlbWVudCk7CkBAIC00NTYsNiArNDYzLDE4
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtTmV4dFMKICAgICBydW5TdGF0
ZU1hY2hpbmUoKTsKIH0KIAordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmV4ZWN1dGVTUUwo
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudEZyb250ZW5kLAorICAgIGNvbnN0IFN0
cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIGlu
dCBwZXJtaXNzaW9ucykKK3sKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50QmFja2VuZD4gc3RhdGVt
ZW50OworICAgIHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudEJhY2tlbmQ6OmNyZWF0ZShzdGF0ZW1l
bnRGcm9udGVuZCwgc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHBlcm1pc3Npb25zKTsKKworICAg
IGlmIChEYXRhYmFzZTo6ZnJvbShtX2RhdGFiYXNlLmdldCgpKS0+ZGVsZXRlZCgpKQorICAgICAg
ICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRlZEVycm9yKG1fZGF0YWJhc2UuZ2V0KCkpOwor
CisgICAgZW5xdWV1ZVN0YXRlbWVudChzdGF0ZW1lbnQpOworfQorCiB2b2lkIFNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpCiB7CiAgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CkBAIC02MTEsNyArNjMwLDcgQEAgU1FM
VHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbkJhY2tlbgogICAgIGlmIChtX2hhc1ZlcnNp
b25NaXNtYXRjaCkKICAgICAgICAgbV9jdXJyZW50U3RhdGVtZW50LT5zZXRWZXJzaW9uTWlzbWF0
Y2hlZEVycm9yKERhdGFiYXNlOjpmcm9tKG1fZGF0YWJhc2UuZ2V0KCkpKTsKIAotICAgIGlmICht
X2N1cnJlbnRTdGF0ZW1lbnQtPmV4ZWN1dGUoRGF0YWJhc2U6OmZyb20obV9kYXRhYmFzZS5nZXQo
KSkpKSB7CisgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+ZXhlY3V0ZShtX2RhdGFiYXNlLmdl
dCgpKSkgewogICAgICAgICBpZiAobV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFz
ZSgpKSB7CiAgICAgICAgICAgICAvLyBGbGFnIHRoaXMgdHJhbnNhY3Rpb24gYXMgaGF2aW5nIGNo
YW5nZWQgdGhlIGRhdGFiYXNlIGZvciBsYXRlciBkZWxlZ2F0ZSBub3RpZmljYXRpb24KICAgICAg
ICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5k
LmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwx
OCBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhc2lj
VHlwZXMuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvblN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM7CiBjbGFzcyBTUUxFcnJv
cjsKIGNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOworY2xhc3MgU1FMU3RhdGVtZW50OworY2xhc3Mg
U1FMU3RhdGVtZW50QmFja2VuZDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOwogY2xhc3MgU1FMVmFsdWU7CkBAIC02OCwxNiArNzAsMjEgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KICAgICB2
b2lkIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKIAorICAgIC8vIEFQSXMg
Zm9yIHRoZSBmcm9udGVuZDoKKyAgICBTUUxTdGF0ZW1lbnQqIGN1cnJlbnRTdGF0ZW1lbnQoKTsK
ICAgICBQYXNzUmVmUHRyPFNRTEVycm9yPiB0cmFuc2FjdGlvbkVycm9yKCk7CiAgICAgdm9pZCBz
ZXRTaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoYm9vbCk7CiAKKyAgICB2b2lkIGV4ZWN1dGVT
UUwoUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+LCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwKKyAg
ICAgICAgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBpbnQgcGVybWlzc2lvbnMp
OworCiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uQmFja2VuZChEYXRhYmFzZUJhY2tlbmRB
c3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+LAogICAgICAgICBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkpOwogCiAgICAgdm9pZCBkb0NsZWFu
dXAoKTsKIAotICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEJh
Y2tlbmQ+KTsKIAogICAgIHZvaWQgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVwdGVkRGF0
YWJhc2UoKTsKIApAQCAtMTAzLDcgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXROZXh0
U3RhdGVtZW50KCk7CiAKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fZnJvbnRlbmQ7Ci0g
ICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gbV9jdXJyZW50U3RhdGVtZW50OworICAgIFJlZlB0cjxT
UUxTdGF0ZW1lbnRCYWNrZW5kPiBtX2N1cnJlbnRTdGF0ZW1lbnQ7CiAKICAgICBSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQXN5bmM+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
V3JhcHBlcj4gbV93cmFwcGVyOwpAQCAtMTE5LDcgKzEyNiw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2hhc1ZlcnNpb25NaXNtYXRjaDsKIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7Ci0g
ICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOworICAgIERl
cXVlPFJlZlB0cjxTUUxTdGF0ZW1lbnRCYWNrZW5kPiA+IG1fc3RhdGVtZW50UXVldWU7CiAKICAg
ICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biAxNDMwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjU1NzgsNiArMjU1NzgsMTQgQEAKIAkJCQkJPgogCQkJCTwv
RmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJh
c2VcU1FMU3RhdGVtZW50QmFja2VuZC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVu
dEJhY2tlbmQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg3NCw2
ICsxODc0LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJh
c2VcU1FMUmVzdWx0U2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudC5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVu
dEJhY2tlbmQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJk
YXRhYmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tl
bmQuY3BwIiAvPgpAQCAtNjQ0NSw2ICs2NDQ2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMUmVzdWx0U2V0LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFJlc3VsdFNldFJvd0xpc3QuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3Rh
dGVtZW50LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFN0YXRlbWVudEJhY2tlbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAx
NDMwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE4OTMsNiArMTg5Myw5IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudC5jcHAiPgog
ICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0
YXRlbWVudEJhY2tlbmQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwv
RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9k
dWxlc1x3ZWJkYXRhYmFzZVxTUUxTdGF0ZW1lbnRTeW5jLmNwcCI+CiAgICAgICA8RmlsdGVyPk1v
ZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTg1NjUsNiAr
ODU2OCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XFNRTFN0YXRlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxTUUxTdGF0ZW1lbnRCYWNrZW5kLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1
bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFN0YXRlbWVudENhbGxiYWNrLmgi
PgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3NDIsNiArMzc0
Miw4IEBACiAJCTk3QkM2QTQ1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEw
MzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oICovOyB9OwogCQk5N0JD
NkE0NzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTA1MTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxTdGF0ZW1lbnQuY3BwICovOyB9OwogCQk5N0JDNkE0ODE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0JDNkEwNjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50LmggKi87IH07CisJ
CUZFOEE2NzQ3MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOEE2NzQ1MTZDREQx
OUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcCAqLzsgfTsKKwkJRkU4QTY3NDgx
NkNERDE5RTAwOTMwQkY4IC8qIFNRTFN0YXRlbWVudEJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOEE2NzQ2MTZDREQxOUUwMDkzMEJGOCAv
KiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmggKi87IH07CiAJCTk3QkM2QTQ5MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMDcxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVu
dENhbGxiYWNrLmggKi87IH07CiAJCTk3QkM2QTRCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5N0JDNkEwOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oICovOyB9OwogCQk5N0JDNkE0RDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVt
ZW50U3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0JDNkEwQjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi87IH07
CkBAIC0xMTIxMCw2ICsxMTIxMiw4IEBACiAJCTk3QkM2QTA0MTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxSZXN1bHRTZXRSb3dMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxSZXN1bHRT
ZXRSb3dMaXN0LmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93
TGlzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTA1MTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU1FMU3RhdGVtZW50LmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
U3RhdGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMDYxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBTUUxTdGF0ZW1lbnQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3Rh
dGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFOEE2NzQ1MTZDREQxOUUw
MDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNRTFN0YXRlbWVudEJhY2tlbmQuY3BwOyBwYXRoID0gTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkU4QTY3NDYxNkNERDE5RTAwOTMwQkY4IC8qIFNRTFN0YXRlbWVudEJhY2tlbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMU3RhdGVtZW50QmFja2VuZC5o
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnRCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTA3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxT
dGF0ZW1lbnRDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxT
dGF0ZW1lbnRDYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1l
bnRDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkEwODE1MDVG
MDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IFNRTFN0YXRlbWVudENhbGxiYWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5N0JDNkEwOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Njk1LDYgKzE4Njk5LDggQEAK
IAkJCQk5N0JDNkEwNDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwg
Ki8sCiAJCQkJOTdCQzZBMDUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5jcHAgKi8s
CiAJCQkJOTdCQzZBMDYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oICovLAorCQkJ
CUZFOEE2NzQ1MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNwcCAqLywK
KwkJCQlGRThBNjc0NjE2Q0REMTlFMDA5MzBCRjggLyogU1FMU3RhdGVtZW50QmFja2VuZC5oICov
LAogCQkJCTk3QkM2QTA3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5o
ICovLAogCQkJCTk3QkM2QTA4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFj
ay5pZGwgKi8sCiAJCQkJOTdCQzZBMDkxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaCAqLywKQEAgLTI1OTQ1LDYgKzI1OTUxLDcgQEAKIAkJCQk5N0JDNkE0MjE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
NkE0NTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzZBNDgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkU4QTY3NDgxNkNERDE5RTAwOTMwQkY4IC8qIFNRTFN0YXRlbWVudEJh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTQ5MTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNEIxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QkM2QTRFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI5MjUwLDYgKzI5MjU3LDcgQEAKIAkJCQk5N0JDNkE0MTE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTQ0MTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3QkM2QTQ3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkU4QTY3NDcxNkNERDE5RTAwOTMwQkY4IC8qIFNRTFN0YXRlbWVudEJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNEYxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRTE4MTEz
MTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCg==
</data>
<flag name="review"
          id="208820"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>