<?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>26732</bug_id>
          
          <creation_ts>2009-06-25 14:32:25 -0700</creation_ts>
          <short_desc>Combine LocalStorage and SessionStorage into StorageNamespace</short_desc>
          <delta_ts>2009-06-30 09:35:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25376</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>playmobil</cc>
    
    <cc>sam</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>128275</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-25 14:32:25 -0700</bug_when>
    <thetext>For the final step of https://bugs.webkit.org/show_bug.cgi?id=25376, combine LocalStorage and SessionStorage into StorageNamespace.  The synching code (for LocalStorage) has already been removed, so these classes are now very similar.  All they do is essentially contain a logical grouping of origins that are attached to specific contexts (be it PageGroups for LocalStorage and Page for SessionStorage).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128323</commentid>
    <comment_count>1</comment_count>
      <attachid>31891</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-25 16:57:15 -0700</bug_when>
    <thetext>Created attachment 31891
patch v1

For the final step of https://bugs.webkit.org/show_bug.cgi?id=25376, combine LocalStorage and SessionStorage into StorageNamespace. The synching code (for LocalStorage) has already been removed, so these classes are now very similar.  All they do is essentially contain a logical grouping of origins that are attached to specific contexts (be it PageGroups for LocalStorage and Page for SessionStorage).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128546</commentid>
    <comment_count>2</comment_count>
      <attachid>31946</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-26 13:15:33 -0700</bug_when>
    <thetext>Created attachment 31946
rebaselined version

No changes, just WebKitTools/Scripts/update-webkit&apos;ed and re-created the patch.  Recompiled and did ad-hoc testing to double check we&apos;re still good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128584</commentid>
    <comment_count>3</comment_count>
      <attachid>31956</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-26 15:32:05 -0700</bug_when>
    <thetext>Created attachment 31956
resynced + added #include &quot;DOMWindow.cpp&quot; to storageArea.cpp

resynced + added #include &quot;DOMWindow.cpp&quot; to storageArea.cpp.  Recompiled/tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128592</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-26 16:14:16 -0700</bug_when>
    <thetext>landed by Dimitri in 45290</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129015</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 03:13:02 -0700</bug_when>
    <thetext>Should this still be marked for review?  The bug is closed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31891</attachid>
            <date>2009-06-25 16:57:15 -0700</date>
            <delta_ts>2009-06-26 13:15:33 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>5.20090625.patch</filename>
            <type>text/plain</type>
            <size>62455</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDYtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzMyCisKKyAgICAgICAg
Rm9yIHRoZSBmaW5hbCBzdGVwIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTM3NiwKKyAgICAgICAgY29tYmluZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9y
YWdlIGludG8gU3RvcmFnZU5hbWVzcGFjZS4gVGhlCisgICAgICAgIHN5bmNoaW5nIGNvZGUgKGZv
ciBMb2NhbFN0b3JhZ2UpIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgc28gdGhlc2UKKyAgICAg
ICAgY2xhc3NlcyBhcmUgbm93IHZlcnkgc2ltaWxhci4gIEFsbCB0aGV5IGRvIGlzIGVzc2VudGlh
bGx5IGNvbnRhaW4gYQorICAgICAgICBsb2dpY2FsIGdyb3VwaW5nIG9mIG9yaWdpbnMgdGhhdCBh
cmUgYXR0YWNoZWQgdG8gc3BlY2lmaWMgY29udGV4dHMKKyAgICAgICAgKGJlIGl0IFBhZ2VHcm91
cHMgZm9yIExvY2FsU3RvcmFnZSBhbmQgUGFnZSBmb3IgU2Vzc2lvblN0b3JhZ2UpLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNldFNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmxvY2FsU3RvcmFnZSk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBz
dG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAg
KiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1Nlc3Npb25TdG9yYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWE6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6
aW1wb3J0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2Uu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmNvcHkpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisK
IDIwMDktMDYtMjUgIE1hdHQgUGVycnkgIDxtcGNvbXBsZXRlQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1MTky
KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSwyNCAr
MjA4NSwyMiBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAogd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAgXAotCVdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2UuY3BwIFwKLQlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgg
XAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcCBcCiAJV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZVRhc2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRo
cmVhZC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBcCi0JV2Vi
Q29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcCBcCi0JV2ViQ29yZS9zdG9yYWdlL1Nlc3Np
b25TdG9yYWdlLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBcCiAJV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2UuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcCBcCiAJ
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogCVdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUV2ZW50LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBcCiAJV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaCBcCi0JV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCisJV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAjIEVORCBFTkFCTEVfRE9N
X1NUT1JBR0UKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUv
V2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDcgKzEwMTAsNiBAQCBU
aGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2Uv
RGF0YWJhc2VUYXNrLmNwcAogICAgICAgICBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAogICAg
ICAgICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKLSAgICAgICAgc3RvcmFnZS9Mb2NhbFN0
b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKICAgICAgICAg
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvT3JpZ2luUXVv
dGFNYW5hZ2VyLmNwcApAQCAtMTAyMSwxMCArMTAyMCwxMCBAQCBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
CiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZS5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJl
YS5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZUV2ZW50LmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3Bw
CiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKLSAgICAgICAgc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAogICAgIDwvc2V0PgogCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ1MTkyKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk5ODcs
MTQgKzI5OTg3LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2UuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxl
Pg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2Uu
aCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcTG9jYWxTdG9yYWdlVGFzay5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAt
MzAwMjcsMTQgKzMwMDE5LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTZXNzaW9uU3RvcmFnZS5jcHAiDQotCQkJCT4NCi0J
CQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNlc3Np
b25TdG9yYWdlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpA
QCAtMzAxMDcsNiArMzAwOTEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxT
dG9yYWdlQXJlYVN5bmMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50LmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCkBAIC0zMDEyMywxMSArMzAxMTUsMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3Bw
Ig0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5jcHAiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXFN0b3JhZ2VBcmVhU3luYy5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3Rv
cmFnZU5hbWVzcGFjZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ1MTky
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTgzNCw4ICs4MzQsNiBAQAogCQk1MUIyNDE3QjBEOTMxRjNGMDBFODNGNUMgLyog
TGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZl
TWFjLm1tICovOyB9OwogCQk1MUJFMzdERjBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM3
REQwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTFCRTM3RTAw
REFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFn
ZUFyZWEuaCAqLzsgfTsKLQkJNTFCRTM4MjgwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJF
MzgyNjBEQUVGN0RBMDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCAqLzsgfTsKLQkJNTFCRTM4
MjkwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM4MjcwREFFRjdEQTAwMTA4NUZDIC8qIExv
Y2FsU3RvcmFnZS5oICovOyB9OwogCQk1MUMwQUEzOTBGMkFBMTBBMDAxNjQ4QzIgLyogQ2FjaGVk
RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QzBBQTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQzBBQTQxMEYyQUExNUUwMDE2NDhD
MiAvKiBDYWNoZWRGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICov
OyB9OwogCQk1MUM4MUI4OTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzgxQjg3
MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuY3BwICovOyB9OwpAQCAtODQ5
LDggKzg0Nyw2IEBACiAJCTUxRTBCQUJDMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMEJB
QkEwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAgKi87IH07CiAJCTUxRTBCQUVB
MERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUwQkFFODBEQTU1RDRBMDBBOUU0MTcgLyog
SlNTdG9yYWdlRXZlbnQuY3BwICovOyB9OwogCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyog
SlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRTBCQUU5MERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5oICovOyB9
OwotCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjIxMERBNTcyQTYw
MEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovOyB9OwotCQk1MUUwQkIyNDBEQTU3MkE2MDBB
OUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9y
YWdlLmNwcCAqLzsgfTsKIAkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM2
MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi87IH07CiAJCTUxRTBCQjM5MERBNUFD
QjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFw
LmNwcCAqLzsgfTsKIAkJNTFFMUVDQUYwQzkxQzU0NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9v
bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTFF
Q0FEMEM5MUM1NDYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wubW0gKi87IH07CkBAIC00Mjk2
LDYgKzQyOTIsOCBAQAogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMw
REZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlD
MTA1REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNB
QTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEw
NURBNjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAx
REQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUwRDBFODIwRkY0Mjcy
OTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwICovOyB9OworCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3Rv
cmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsg
fTsKIAkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJEOTIwRkQ5
QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OwogCQlDNTEwMkQ5NTBG
RDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAv
KiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZG
MDQgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5j
LmggKi87IH07CkBAIC01Nzk2LDggKzU3OTQsNiBAQAogCQk1MUIyNDE3QTBEOTMxRjNGMDBFODNG
NUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxQkUzN0REMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9y
YWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUJFMzgyNjBEQUVGN0RBMDAxMDg1RkMg
LyogTG9jYWxTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExvY2FsU3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQkUzODI3
MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQzBBQTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkRnJhbWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGly
ZWN0b3J5UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
VFBEaXJlY3RvcnlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTgx
Miw4ICs1ODA4LDYgQEAKIAkJNTFFMEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3RvcmFnZUV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTgwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFn
ZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RvcmFn
ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTkwREE1NUQ0
QTAwQTlFNDE3IC8qIEpTU3RvcmFnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU3RvcmFnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
RTBCQjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcg
LyogU3RvcmFnZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTBCQjM3MERBNUFDQjYwMEE5
RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0b3JhZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUxRUNB
RDBDOTFDNTQ2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0b2RyYWluZWRQb29sLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTEzMCw2ICs5MTI0LDggQEAKIAkJQzBERkM4NkYwREI2ODQxQTAw
M0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NvbnNvbGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0
ZWN0b3JJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTA1REE2MzBGM0FB
NkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUx
MDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdl
U3luY01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRDBG
RDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTY3Miw4ICs5NjY4LDYgQEAKIAkJCQkxQUQ1MUExMzBDQjU5Q0QzMDA5NTNEMTEgLyog
RGF0YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQkxQUQ1MUExMjBDQjU5Q0QzMDA5NTNEMTEgLyog
RGF0YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERh
dGFiYXNlVHJhY2tlckNsaWVudC5oICovLAotCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAv
KiBMb2NhbFN0b3JhZ2UuY3BwICovLAotCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBM
b2NhbFN0b3JhZ2UuaCAqLywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxT
dG9yYWdlVGFzay5jcHAgKi8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2Fs
U3RvcmFnZVRhc2suaCAqLywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxT
dG9yYWdlVGhyZWFkLmNwcCAqLywKQEAgLTk2OTksOCArOTY5Myw2IEBACiAJCQkJMUE3Q0NCMjMw
Q0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLywKIAkJCQkxQTdDQ0IxNzBD
RDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovLAogCQkJCTFBN0ND
QjE4MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywK
LQkJCQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICovLAot
CQkJCTUxRTBCQjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovLAogCQkJ
CTUxRTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlD
NDBEQTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEw
MDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKQEAgLTk3MTMsNiArOTcwNSw4IEBACiAJCQkJNTFF
MEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJC
MzcwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERB
NUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUwRDBFODAwRkY0MjcyOTAw
QUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCUM1MEQwRTgxMEZGNDI3Mjkw
MEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAw
RkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQw
MEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKQEAgLTE2MTcxLDcg
KzE2MTY1LDYgQEAKIAkJCQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VS
TEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8q
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFCRTM4
MjkwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTExRjIzMTgwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJlYWQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTIwN0JFMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6
ZWRTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NjEwLDcgKzE2NjAzLDYgQEAKIAkJCQkw
ODRBRUJFNTBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyog
U2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
MTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzVFQjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNjkxMyw2ICsxNjkwNSw3IEBACiAJCQkJQkM3N0QxNkMwRkYxOUY1NjAwNzA4ODdCIC8qIEpT
RGF0YUdyaWRDb2x1bW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JDQUUzNzBGRjE5Mzg1
MDAwNzYyQUUgLyogRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JD
QUUzRDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTE4MjU0LDcgKzE4MjQ3LDYgQEAKIAkJCQlBN0FEMkY4NzBFQzg5
RDA3MDA4QUIwMDIgLyogTGlua0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3MzMw
QURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBMb2Nh
bFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTcwREMxNjBEQTAwNEYwMDMy
IC8qIExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTkwREMx
NjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5nc01hYy5tbSBpbiBT
b3VyY2VzICovLApAQCAtMTg2NTQsNyArMTg2NDYsNiBAQAogCQkJCTkzMzA5RTBEMDk5RTY0OTIw
MDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRB
OEM5NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFFMEJCMjQwREE1NzJBNjAwQTlFNDE3IC8qIFNl
c3Npb25TdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM1RUI4QzMwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xODkyNyw2ICsxODkxOCw3IEBACiAJCQkJQkNCQ0FFNTQwRkYxQTI5RTAwMDc2MkFF
IC8qIEpTSFRNTERhdGFHcmlkRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzc3RDFGRDBGRjI4RDlCMDA3MDg4N0IgLyogRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNzdEMjM5MEZGMjk4MDgwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFn
ZU5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA0NTE5
MikKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQotI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFj
ZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0Nyw4ICsxNDcsOCBAQCBQ
YWdlKiBDaHJvbWU6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsCiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAgICAgaWYgKG5ld1BhZ2UpIHsKLSAgICAgICAgaWYgKFNlc3Npb25TdG9yYWdl
KiBvbGRTZXNzaW9uU3RvcmFnZSA9IG1fcGFnZS0+c2Vzc2lvblN0b3JhZ2UoZmFsc2UpKQotICAg
ICAgICAgICAgbmV3UGFnZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNv
cHkobmV3UGFnZSkpOworICAgICAgICBpZiAoU3RvcmFnZU5hbWVzcGFjZSogb2xkU2Vzc2lvblN0
b3JhZ2UgPSBtX3BhZ2UtPnNlc3Npb25TdG9yYWdlKGZhbHNlKSkKKyAgICAgICAgICAgIG5ld1Bh
Z2UtPnNldFNlc3Npb25TdG9yYWdlKG9sZFNlc3Npb25TdG9yYWdlLT5jb3B5KCkpOwogICAgIH0K
ICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDkgQEAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5o
IgotI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtNTc4LDcgKzU3
Nyw3IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICBpZiAo
IXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlID0gcGFnZS0+Z3JvdXAo
KS5sb2NhbFN0b3JhZ2UoKTsKKyAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UgPSBw
YWdlLT5ncm91cCgpLmxvY2FsU3RvcmFnZSgpOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBsb2NhbFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpKSA6IDA7IAogICAgIGlmIChzdG9yYWdlQXJlYSkgewogICAg
ICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFn
ZUFyZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gNDUx
OTIpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdlYktpdFBvaW50OwogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlOwogICAgIGNs
YXNzIFN0b3JhZ2U7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDggQEAKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0jaW5j
bHVkZSAiTG9jYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2UuaCIKICNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC01NTAsMTcgKzU0OSwxNiBA
QCB2b2lkIFBhZ2U6OnNldERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlCiB9CiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCi1TZXNzaW9uU3RvcmFnZSogUGFnZTo6c2Vzc2lvblN0b3JhZ2UoYm9v
bCBvcHRpb25hbENyZWF0ZSkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2U6OnNlc3Npb25TdG9yYWdl
KGJvb2wgb3B0aW9uYWxDcmVhdGUpCiB7CiAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlICYmIG9w
dGlvbmFsQ3JlYXRlKQotICAgICAgICBtX3Nlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U6
OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3Bh
Y2U6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAKICAgICByZXR1cm4gbV9zZXNzaW9uU3Rv
cmFnZS5nZXQoKTsKIH0KIAotdm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRy
PFNlc3Npb25TdG9yYWdlPiBuZXdTdG9yYWdlKQordm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFn
ZShQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG5ld1N0b3JhZ2UpCiB7Ci0gICAgQVNTRVJU
KG5ld1N0b3JhZ2UtPnBhZ2UoKSA9PSB0aGlzKTsKICAgICBtX3Nlc3Npb25TdG9yYWdlID0gbmV3
U3RvcmFnZTsKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvcGFn
ZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2MywxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgUmVuZGVyVGhlbWU7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKICAgICBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOworICAgIGNsYXNzIFNldHRpbmdzOwog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsKKyAgICBj
bGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogI2VuZGlmCi0gICAgY2xhc3MgU2V0dGluZ3M7CiAjaWYg
RU5BQkxFKFdNTCkKICAgICBjbGFzcyBXTUxQYWdlU3RhdGU7CiAjZW5kaWYKQEAgLTE3OSw4ICsx
NzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0ZWRT
dGF0ZUNoYW5nZWQoUGFnZUdyb3VwKiwgTGlua0hhc2ggdmlzaXRlZEhhc2gpOwogCiAjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQotICAgICAgICBTZXNzaW9uU3RvcmFnZSogc2Vzc2lvblN0b3JhZ2Uo
Ym9vbCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOwotICAgICAgICB2b2lkIHNldFNlc3Npb25TdG9y
YWdlKFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+KTsKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFj
ZSogc2Vzc2lvblN0b3JhZ2UoYm9vbCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOworICAgICAgICB2
b2lkIHNldFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4pOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoV01MKQpAQCAtMjUzLDcgKzI1Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgaW50IG1fY3VzdG9tSFRNTFRva2VuaXplckNodW5rU2l6ZTsKIAogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBtX3Nl
c3Npb25TdG9yYWdlOworICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9zZXNzaW9u
U3RvcmFnZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oV1gpICYm
IGRlZmluZWQoX19XWE1TV19fKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFfV1NfV0lO
KSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw3IEBACiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRlICJMb2NhbFN0
b3JhZ2UuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1l
c3BhY2UuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCkBAIC0xODEsMTMgKzE4
MCwxMyBAQCB2b2lkIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGluCiB9CiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi1Mb2NhbFN0b3JhZ2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9y
YWdlKCkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWdlKCkKIHsKICAg
ICBpZiAoIW1fbG9jYWxTdG9yYWdlKSB7CiAgICAgICAgIC8vIE5lZWQgYSBwYWdlIGluIHRoaXMg
cGFnZSBncm91cCB0byBxdWVyeSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBsb2NhbCBzdG9yYWdlIGRh
dGFiYXNlIHBhdGguCiAgICAgICAgIFBhZ2UqIHBhZ2UgPSAqbV9wYWdlcy5iZWdpbigpOwogICAg
ICAgICBBU1NFUlQocGFnZSk7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlID0gTG9jYWxTdG9yYWdl
Ojpsb2NhbFN0b3JhZ2UocGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRo
KCkpOworICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShwYWdlLT5zZXR0aW5ncygpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgo
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwpJbmRleDogV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuaAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEtVUkw7Ci0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIFBhZ2U7CisgICAg
Y2xhc3MgU3RvcmFnZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5vbmNvcHlh
YmxlIHsKICAgICBwdWJsaWM6CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQog
CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgICAgICBMb2NhbFN0b3JhZ2UqIGxvY2FsU3Rv
cmFnZSgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UoKTsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1fbG9jYWxTdG9yYWdlOworICAgICAgICBS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2U7CiAjZW5kaWYKICAgICB9Owog
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdl
ci5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VN
YXA7Ci0KLXN0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCi17Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkp
OwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0KLVBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0g
ICAgY29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6
IHBhdGg7Ci0gICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1h
cCgpLmZpbmQobG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVu
ZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0
UmVmKG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VN
YXAoKS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
IGxvY2FsU3RvcmFnZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpdC0+c2Vj
b25kOwotfQotCi1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgp
Ci0gICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCi17Ci0gICAgaWYgKCFtX3BhdGguaXNFbXB0eSgp
KQotICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9w
YXRoKTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKLXsKLSAgICBBU1NFUlQo
bG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0gICAgbG9jYWxTdG9yYWdl
TWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2Fs
U3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmln
aW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwK
LSAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBp
cyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCi0gICAgLy8gdGhpcyBt
ZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQg
ZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCi0gICAgLy8gVG8ga25v
dyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8g
d2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVk
IGl0J3MgQXJlYUltcG9ydCB0YXNrLgotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFy
ZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQg
dG8gCi0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEg
YW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3Jh
Z2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdp
bikpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0KLSAgICBzdG9yYWdl
QXJlYSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5h
Z2VyKTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKLSAg
ICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6
Y2xvc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NhbFN0b3Jh
Z2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZv
ciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5h
bFN5bmMoKTsKLSAgICAKLSAgICBtX3N5bmNNYW5hZ2VyID0gMDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZS5oCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTG9jYWxTdG9yYWdlX2gK
LSNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAg
ICBjbGFzcyBTdG9yYWdlQXJlYTsKLSAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7Ci0KLSAg
ICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKLQotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgp
OwotCi0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5
T3JpZ2luKik7Ci0KLSAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3Vy
aXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKLSAgICAgICAgTG9jYWxTdG9yYWdl
QXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwotCi0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAg
ICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0gICAgfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQot
Ci0jZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
VGFzay5jcHAJKHJldmlzaW9uIDQ1MTkyKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJMb2Nh
bFN0b3JhZ2VUaHJlYWQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIApJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ1MTkyKQorKysg
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZS5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYVN5bmMuaCIKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCShy
ZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlc3Np
b25TdG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBTZXNzaW9uU3RvcmFnZTo6Y3JlYXRl
KFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3RvcmFnZShw
YWdlKSk7Ci19Ci0KLVNlc3Npb25TdG9yYWdlOjpTZXNzaW9uU3RvcmFnZShQYWdlKiBwYWdlKQot
ICAgIDogbV9wYWdlKHBhZ2UpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2Vzc2lvblN0b3JhZ2U+IFNlc3Npb25TdG9yYWdlOjpjb3B5KFBhZ2UqIG5ld1BhZ2UpCi17
Ci0gICAgQVNTRVJUKG5ld1BhZ2UpOwotICAgIFJlZlB0cjxTZXNzaW9uU3RvcmFnZT4gbmV3U2Vz
c2lvbiA9IFNlc3Npb25TdG9yYWdlOjpjcmVhdGUobmV3UGFnZSk7Ci0gICAgCi0gICAgU2Vzc2lv
blN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwot
ICAgIGZvciAoU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJl
YU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJl
YT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCksIG5ld1BhZ2UpOwot
ICAgICAgICBuZXdTZXNzaW9uLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgYXJlYUNv
cHkucmVsZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ld1Nlc3Npb24ucmVsZWFz
ZSgpOwotfQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFn
ZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IHN0b3JhZ2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0
KG9yaWdpbikpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0gICAgICAg
IAotICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9y
aWdpbiwgbV9wYWdlKTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VB
cmVhKTsKLSAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5o
CShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZXNzaW9uU3RvcmFnZV9oCi0jZGVmaW5lIFNl
c3Npb25TdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0KLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFn
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlc3Npb25TdG9yYWdlPiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY3JlYXRlKFBhZ2UqKTsKLSAg
ICAgICAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY29weShQYWdlKik7Ci0gICAgICAgIAot
ICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
biopOwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gbV9w
YWdlOyB9Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNlc3Npb25TdG9yYWdlKFBh
Z2UqKTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0b3JhZ2VBcmVhKiwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgUGFnZSogbV9wYWdlOwot
ICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VB
cmVhTWFwOwotICAgICAgICBTZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsK
LSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRE9N
X1NUT1JBR0UpCi0KLSNlbmRpZiAvLyBTZXNzaW9uU3RvcmFnZV9oCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ1MTkyKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxv
Y2FsU3RvcmFnZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5j
TWFuYWdlcj4gc3luY01hbmFnZXIpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJl
YTo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShzdG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5j
TWFuYWdlcikpOwogfQogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQotICAg
IDogbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3Rv
cmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFn
ZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKICAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5
bmNNYW5hZ2VyKQotICAgICwgbV9zZXNzaW9uU3RvcmFnZVBhZ2UoMCkKKyNpZm5kZWYgTkRFQlVH
CisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKIHsKICAgICBBU1NFUlQobV9zZWN1
cml0eU9yaWdpbik7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CkBAIC02NCwzNyArNjcsMzUg
QEAgU3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKgogICAgIH0KIH0KIAot
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCitQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCBwYWdlLCAwKSk7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEo
b3JpZ2luLCB0aGlzKSk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVh
Ojpjb3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIG1fc3RvcmFnZU1hcCkpOwot
fQotCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFn
ZSogcGFnZSwgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBzdG9yYWdlTWFwKQotICAgIDogbV9zZWN1
cml0eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAoc3RvcmFnZU1hcCkKLSAgICAs
IG1fc2Vzc2lvblN0b3JhZ2VQYWdlKHBhZ2UpCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCisgICAgOiBtX3N0b3JhZ2VU
eXBlKGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikK
KyAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCisgICAgLCBtX3N0b3JhZ2VT
eW5jTWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQorI2VuZGlmCiB7CiAgICAgQVNT
RVJUKG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUGFnZSk7
Ci0KLSAgICBpZiAoIW1fc3RvcmFnZU1hcCkgewotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9y
YWdlTWFwOjpjcmVhdGUoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0gICAgfQor
ICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKIH0K
IAogdW5zaWduZWQgU3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCiBT
dHJpbmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpOwogICAgIAogICAgIFN0cmluZyBrZXk7CkBAIC0xMDksNiArMTEwLDcgQEAg
U3RyaW5nIFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQgaW5kZXgsIAogCiBTdHJpbmcgU3RvcmFn
ZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAgIAogICAg
IHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKQEAgLTExNiw2ICsxMTgsNyBAQCBT
dHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nCiAKIHZvaWQgU3RvcmFnZUFy
ZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpOwogICAgIApAQCAtMTQ3LDYgKzE1MCw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0
ZW0oY29uc3QgU3RyaW5nJiAKIAogdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBT
dHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
ICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJhbWUtPnBh
Z2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTY3LDYgKzE3
MSw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW4KIAogdm9pZCBT
dG9yYWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJh
bWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTgx
LDYgKzE4Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKIAogYm9v
bCBTdG9yYWdlQXJlYTo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwog
ICAgIAogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CkBAIC0xODgsMTMg
KzE5NCwxOCBAQCBib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmCiAKIHZv
aWQgU3RvcmFnZUFyZWE6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1h
cC0+aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6c2NoZWR1
bGVGaW5hbFN5bmMoKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlmIChtX3N0
b3JhZ2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxT
eW5jKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyNlbmRp
ZgogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25z
dApAQCAtMjA5LDkgKzIyMCwxNCBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VF
dmVudChjCiAgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0
aGUgcGFnZSBncm91cCBpdHNlbGYuCiAgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7
CiAKLSAgICBpZiAobV9zZXNzaW9uU3RvcmFnZVBhZ2UpIHsKKyAgICAvLyBGSVhNRTogV2hlbiBj
YW4gdGhpcyBvY2N1cj8KKyAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09
IFNlc3Npb25TdG9yYWdlKSB7CiAgICAgICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBh
Z2UuCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9zZXNzaW9uU3RvcmFnZVBhZ2UtPm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkg
eworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAgaWYg
KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdp
bigpKSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQpA
QCAtMjE5LDExICsyMzUsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVu
dChjCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kp
CiAgICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQo
U3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRW
YWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBz
b3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25T
dG9yYWdlKCkpKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gdGhp
cyBvY2N1cj8KLSAgICAgICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAg
ICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICAvLyBTZW5kIGV2
ZW50cyB0byBldmVyeSBwYWdlLgogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMg
PSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CiAgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZp
c2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0
b3JhZ2VNYXA7CiAgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisgICAgZW51bSBTdG9yYWdlVHlwZSB7IExvY2FsU3RvcmFnZSwgU2Vz
c2lvblN0b3JhZ2UgfTsKIAogICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8U3RvcmFnZUFyZWE+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBjcmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpOwotICAgICAgICBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdp
biosIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8
U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICAvLyBUaGUgSFRN
TDUgRE9NIFN0b3JhZ2UgQVBJCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAt
NjQsMjggKzY0LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhcihG
cmFtZSogc291cmNlRnJhbWUpOwogCiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0OwotICAgICAgICB2b2lkIHNjaGVkdWxlRmluYWxTeW5jKCk7CisgICAgICAg
IHZvaWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBDb3VsZCBiZSBjYWxsZWQgZnJvbSBhIGJhY2tn
cm91bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+KTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQ
YWdlKik7Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFnZSosIFBhc3NS
ZWZQdHI8U3RvcmFnZU1hcD4pOworICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2Vj
dXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAgICAgICBT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAg
ICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7CiAKKyAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFn
ZU1hcD4gbV9zdG9yYWdlTWFwOwogCiAgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1f
c3RvcmFnZUFyZWFTeW5jOwogICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0
b3JhZ2VTeW5jTWFuYWdlcjsKLSAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAv
LyBOVUxMIGlmZiBpdCdzIExvY2FsU3RvcmFnZQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTE5MikK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw2ICs3NSw4IEBAIFN0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVhU3luYygpCiB2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMoKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoaXMgdG8gYXZvaWQgcmFjZXMsIGJ1
dCBpdCdkIGJlIGJldHRlciB0byBtYWtlIHRoaW5ncyBzYWZlIHdpdGhvdXQgYmxvY2tpbmcuCisg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKG1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDQ1MTkyKQkoZnJvbSBXZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDo0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7CisKK3N0YXRpYyBM
b2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOworICAgIHJldHVybiBs
b2NhbFN0b3JhZ2VNYXA7Cit9CisKK1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3Jh
Z2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgY29uc3QgU3RyaW5n
IGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7CisgICAgTG9j
YWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQobG9va3Vw
UGF0aCk7CisgICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7CisgICAgICAg
IFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBMb2NhbFN0
b3JhZ2UobG9va3VwUGF0aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQobG9va3Vw
UGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5y
ZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCitMb2Nh
bFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgo
cGF0aC5jb3B5KCkpCit7CisgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQorICAgICAgICBtX3N5
bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKK30KKworTG9j
YWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKK3sKKyAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFw
KCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7CisgICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1f
cGF0aCk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFn
ZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24g
aGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSBuZWVk
IHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhl
IGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCisgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1
cm4gbnVsbC4KKyAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUg
cHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCisgICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhh
cyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlz
IExvY2FsU3RvcmFnZSAKKyAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9y
dCB0YXNrLgorCisgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0
YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCisgICAgLy8gc3lu
YyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBl
IEFyZWFTeW5jCisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlm
IChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CisKKyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VB
cmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKKyAgICBtX3N0
b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1cm4gc3RvcmFn
ZUFyZWEucmVsZWFzZSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoTG9jYWxTdG9yYWdl
QXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKKyAgICAK
KyAgICBtX3N5bmNNYW5hZ2VyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQorCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuY3BwCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsOTYgKzIwLDExMCBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9y
YWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiAjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
LSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0j
aW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYWxTdG9yYWdlKj4gTG9jYWxTdG9yYWdlTWFwOwor
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5h
bWVzcGFjZU1hcDsKIAotc3RhdGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkK
K3N0YXRpYyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3Rv
cmFnZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsIGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZU1hcCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7CiB9CiAKLVBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBT
dHJpbmcmIHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3Bh
Y2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgY29u
c3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7
Ci0gICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZp
bmQobG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5l
dyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5z
ZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2Fs
U3RvcmFnZS5yZWxlYXNlKCk7CisgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOjppdGVyYXRv
ciBpdCA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAg
aWYgKGl0ID09IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJl
ZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzdG9yYWdlTmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0
b3JhZ2VOYW1lc3BhY2UoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVsZWFzZSgpOwogICAgIH0K
LSAgICAKKwogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1Mb2NhbFN0b3JhZ2U6OkxvY2Fs
U3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCitQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3Bh
Y2UoU2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7Cit9CisKK1N0b3JhZ2VOYW1lc3BhY2U6OlN0
b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0
aCkKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3BhdGgocGF0aC5j
b3B5KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KKyAgICAsIG1fc3luY01h
bmFnZXIoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5k
aWYKIHsKLSAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RvcmFnZVR5cGUg
PT0gTG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICBtX3N5bmNNYW5h
Z2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKIH0KIAotTG9jYWxTdG9y
YWdlOjp+TG9jYWxTdG9yYWdlKCkKK1N0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNl
KCkKIHsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7
Ci0gICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkgewor
ICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0g
dGhpcyk7CisgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnJlbW92ZShtX3BhdGgp
OworICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9y
YWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpjb3B5KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKworICAgIFJlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShtX3N0
b3JhZ2VUeXBlLCBtX3BhdGgpKTsKIAotICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3Jp
Z2luIGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQs
Ci0gICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQg
aXMgb2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAotICAgIC8vIHRoaXMg
bWV0aG9kIHdpbGwgcmV0dXJuIG51bGwuCi0gICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50
IGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgotICAgIC8vIFRvIGtu
b3cgaWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRv
IHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCi0gICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hl
ZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4KKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CisgICAg
ICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmly
c3QuZ2V0KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGkt
PmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdOYW1l
c3BhY2UucmVsZWFzZSgpOworfQogCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEg
aXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8g
Ci0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4g
dGFzayBvZiB0eXBlIEFyZWFTeW5jCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFt
ZXNwYWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCiAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVs
ZWFzZSgpOwogCi0gICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlTG9jYWxTdG9y
YWdlKG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CisgICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJl
YTo6Y3JlYXRlKG1fc3RvcmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CiAgICAgbV9z
dG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3Jh
Z2VBcmVhLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKK3ZvaWQg
U3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCi0gICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKExvY2FsU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0g
ICAgCi0gICAgbV9zeW5jTWFuYWdlciA9IDA7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgaXQtPnNlY29uZC0+Y2xvc2UoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2lz
U2h1dGRvd24gPSB0cnVlOworI2VuZGlmCiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQog
I2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCShyZXZpc2lvbiA0NTE5MikJKGZyb20g
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oOjQ1MTkyKQorKysgV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTG9jYWxT
dG9yYWdlX2gKKyNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKKworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFn
ZXI7CisKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0
b3JhZ2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKKworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJp
bmcmIHBhdGgpOworCisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJl
YT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgTG9j
YWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAgICAgIFN0cmluZyBtX3Bh
dGg7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9T
VE9SQUdFKQorCisjZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2UuaAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTYgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBMb2NhbFN0b3JhZ2VfaAotI2RlZmluZSBMb2NhbFN0b3Jh
Z2VfaAorI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlX2gKKyNkZWZpbmUgU3RvcmFnZU5hbWVzcGFj
ZV9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bkhhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzgsMjggKzM5LDM2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBTdG9y
YWdlU3luY01hbmFnZXI7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlIDogcHVibGlj
IFJlZkNvdW50ZWQ8U3RvcmFnZU5hbWVzcGFjZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgfkxv
Y2FsU3RvcmFnZSgpOworICAgICAgICB+U3RvcmFnZU5hbWVzcGFjZSgpOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAg
ICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2lu
Kik7Ci0KKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CiAgICAg
ICAgIHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZShj
b25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBl
LCBjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+
IFN0b3JhZ2VBcmVhTWFwOworICAgICAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFw
OwogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQ
dHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7
Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKKyAgICAgICAg
U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKIAorICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9z
dG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3Vy
IGNvbnN0cnVjdG9yLgogICAgICAgICBTdHJpbmcgbV9wYXRoOwogICAgICAgICBSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBib29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2VuZGlmIC8vIExvY2Fs
U3RvcmFnZV9oCisjZW5kaWYgLy8gU3RvcmFnZU5hbWVzcGFjZV9oCg==
</data>
<flag name="review"
          id="16450"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31946</attachid>
            <date>2009-06-26 13:15:33 -0700</date>
            <delta_ts>2009-06-26 15:32:05 -0700</delta_ts>
            <desc>rebaselined version</desc>
            <filename>5.20090626.patch</filename>
            <type>text/plain</type>
            <size>62452</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDYtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzMyCisKKyAgICAgICAg
Rm9yIHRoZSBmaW5hbCBzdGVwIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTM3NiwKKyAgICAgICAgY29tYmluZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9y
YWdlIGludG8gU3RvcmFnZU5hbWVzcGFjZS4gVGhlCisgICAgICAgIHN5bmNoaW5nIGNvZGUgKGZv
ciBMb2NhbFN0b3JhZ2UpIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgc28gdGhlc2UKKyAgICAg
ICAgY2xhc3NlcyBhcmUgbm93IHZlcnkgc2ltaWxhci4gIEFsbCB0aGV5IGRvIGlzIGVzc2VudGlh
bGx5IGNvbnRhaW4gYQorICAgICAgICBsb2dpY2FsIGdyb3VwaW5nIG9mIG9yaWdpbnMgdGhhdCBh
cmUgYXR0YWNoZWQgdG8gc3BlY2lmaWMgY29udGV4dHMKKyAgICAgICAgKGJlIGl0IFBhZ2VHcm91
cHMgZm9yIExvY2FsU3RvcmFnZSBhbmQgUGFnZSBmb3IgU2Vzc2lvblN0b3JhZ2UpLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNldFNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmxvY2FsU3RvcmFnZSk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBz
dG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAg
KiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1Nlc3Npb25TdG9yYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWE6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6
aW1wb3J0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2Uu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmNvcHkpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisK
IDIwMDktMDYtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1Mjc2KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSwyNCArMjA4
NSwyMiBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAgXAotCVdlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2UuY3BwIFwKLQlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmggXAog
CVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRhc2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVh
ZC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBcCi0JV2ViQ29y
ZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcCBcCi0JV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25T
dG9yYWdlLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBcCiAJV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2UuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcCBcCiAJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogCVdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2
ZW50LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBcCiAJV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VNYXAuaCBcCi0JV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAg
XAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCisJV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAjIEVORCBFTkFCTEVfRE9NX1NU
T1JBR0UKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDcgKzEwMTAsNiBAQCBUaGlz
IGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvRGF0
YWJhc2VUYXNrLmNwcAogICAgICAgICBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAogICAgICAg
ICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKLSAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKICAgICAgICAgc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFN
YW5hZ2VyLmNwcApAQCAtMTAyMSwxMCArMTAyMCwxMCBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZS5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYS5j
cHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZUV2ZW50LmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKLSAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAogICAgIDwvc2V0PgogCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk5ODcsMTQg
KzI5OTg3LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2UuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0K
LQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2UuaCIN
Ci0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcTG9jYWxTdG9yYWdlVGFzay5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAw
MjcsMTQgKzMwMDE5LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTZXNzaW9uU3RvcmFnZS5jcHAiDQotCQkJCT4NCi0JCQk8
L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNlc3Npb25T
dG9yYWdlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAt
MzAxMDcsNiArMzAwOTEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlQXJlYVN5bmMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmls
ZT4NCkBAIC0zMDEyMywxMSArMzAxMTUsMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdl
XFN0b3JhZ2VBcmVhU3luYy5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFn
ZU5hbWVzcGFjZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ1Mjc2KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTgzNCw4ICs4MzQsNiBAQAogCQk1MUIyNDE3QjBEOTMxRjNGMDBFODNGNUMgLyogTGVn
YWN5V2ViQXJjaGl2ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFj
Lm1tICovOyB9OwogCQk1MUJFMzdERjBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM3REQw
REFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTFCRTM3RTAwREFF
RTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFy
ZWEuaCAqLzsgfTsKLQkJNTFCRTM4MjgwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzgy
NjBEQUVGN0RBMDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCAqLzsgfTsKLQkJNTFCRTM4Mjkw
REFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM4MjcwREFFRjdEQTAwMTA4NUZDIC8qIExvY2Fs
U3RvcmFnZS5oICovOyB9OwogCQk1MUMwQUEzOTBGMkFBMTBBMDAxNjQ4QzIgLyogQ2FjaGVkRnJh
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzBB
QTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQzBBQTQxMEYyQUExNUUwMDE2NDhDMiAv
KiBDYWNoZWRGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovOyB9
OwogCQk1MUM4MUI4OTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzgxQjg3MEM0
NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuY3BwICovOyB9OwpAQCAtODQ5LDgg
Kzg0Nyw2IEBACiAJCTUxRTBCQUJDMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMEJBQkEw
REE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAgKi87IH07CiAJCTUxRTBCQUVBMERB
NTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUwQkFFODBEQTU1RDRBMDBBOUU0MTcgLyogSlNT
dG9yYWdlRXZlbnQuY3BwICovOyB9OwogCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNT
dG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTBCQUU5MERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5oICovOyB9Owot
CQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjIxMERBNTcyQTYwMEE5
RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovOyB9OwotCQk1MUUwQkIyNDBEQTU3MkE2MDBBOUU0
MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdl
LmNwcCAqLzsgfTsKIAkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM2MERB
NUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi87IH07CiAJCTUxRTBCQjM5MERBNUFDQjYw
MEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNw
cCAqLzsgfTsKIAkJNTFFMUVDQUYwQzkxQzU0NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9vbC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTFFQ0FE
MEM5MUM1NDYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wubW0gKi87IH07CkBAIC00Mjk2LDYg
KzQyOTIsOCBAQAogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZD
ODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1
REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4
RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURB
NjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUwRDBFODIwRkY0MjcyOTAw
QUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VO
YW1lc3BhY2UuY3BwICovOyB9OworCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFn
ZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsgfTsK
IAkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJEOTIwRkQ5QUEy
RDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OwogCQlDNTEwMkQ5NTBGRDlB
QTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmgg
Ki87IH07CkBAIC01Nzk2LDggKzU3OTQsNiBAQAogCQk1MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMg
LyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQkUzN0REMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdl
QXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUJFMzgyNjBEQUVGN0RBMDAxMDg1RkMgLyog
TG9jYWxTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExv
Y2FsU3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQkUzODI3MERB
RUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9jYWxTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QzBBQTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWNoZWRGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkRnJhbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0
b3J5UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGVFBE
aXJlY3RvcnlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTgxMiw4
ICs1ODA4LDYgQEAKIAkJNTFFMEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3RvcmFnZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTgwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFnZUV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RvcmFnZUV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTkwREE1NUQ0QTAw
QTlFNDE3IC8qIEpTU3RvcmFnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RvcmFnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRTBC
QjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyog
U3RvcmFnZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQx
NyAvKiBTdG9yYWdlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0b3JhZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUxRUNBRDBD
OTFDNTQ2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0b2RyYWluZWRQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTEzMCw2ICs5MTI0LDggQEAKIAkJQzBERkM4NkYwREI2ODQxQTAwM0VB
RTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NvbnNvbGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTA1REE2MzBGM0FBNkI4
MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0
NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMDJE
OTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlU3lu
Y01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRDBGRDlF
RjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTY3Miw4ICs5NjY4LDYgQEAKIAkJCQkxQUQ1MUExMzBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0
YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQkxQUQ1MUExMjBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0
YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFi
YXNlVHJhY2tlckNsaWVudC5oICovLAotCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAvKiBM
b2NhbFN0b3JhZ2UuY3BwICovLAotCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBMb2Nh
bFN0b3JhZ2UuaCAqLywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGFzay5jcHAgKi8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3Rv
cmFnZVRhc2suaCAqLywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGhyZWFkLmNwcCAqLywKQEAgLTk2OTksOCArOTY5Myw2IEBACiAJCQkJMUE3Q0NCMjMwQ0Q5
NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLywKIAkJCQkxQTdDQ0IxNzBDRDk0
NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovLAogCQkJCTFBN0NDQjE4
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKLQkJ
CQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICovLAotCQkJ
CTUxRTBCQjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovLAogCQkJCTUx
RTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlDNDBE
QTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1
MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKQEAgLTk3MTMsNiArOTcwNSw4IEBACiAJCQkJNTFFMEJB
QkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcw
REE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFD
QjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMy
NjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCUM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFG
RjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZB
RkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKQEAgLTE2MTcxLDcgKzE2
MTY1LDYgQEAKIAkJCQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4
dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFCRTM4Mjkw
REFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEx
RjIzMTgwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJlYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNTIwN0JFMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRT
dHJpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NjEwLDcgKzE2NjAzLDYgQEAKIAkJCQkwODRB
RUJFNTBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vz
c2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5RTY0OTIwMDU2RTU4
MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
NjkxMyw2ICsxNjkwNSw3IEBACiAJCQkJQkM3N0QxNkMwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0
YUdyaWRDb2x1bW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JDQUUzNzBGRjE5Mzg1MDAw
NzYyQUUgLyogRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JDQUUz
RDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE4MjU0LDcgKzE4MjQ3LDYgQEAKIAkJCQlBN0FEMkY4NzBFQzg5RDA3
MDA4QUIwMDIgLyogTGlua0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3MzMwQURC
QTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTcwREMxNjBEQTAwNEYwMDMyIC8q
IExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTkwREMxNjBE
QTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5nc01hYy5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtMTg2NTQsNyArMTg2NDYsNiBAQAogCQkJCTkzMzA5RTBEMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBOEM5
NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFFMEJCMjQwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Np
b25TdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4
MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEM5
QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM1RUI4QzMwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODkyNyw2ICsxODkxOCw3IEBACiAJCQkJQkNCQ0FFNTQwRkYxQTI5RTAwMDc2MkFFIC8q
IEpTSFRNTERhdGFHcmlkRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3
RDFGRDBGRjI4RDlCMDA3MDg4N0IgLyogRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNzdEMjM5MEZGMjk4MDgwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA0NTI3NikK
KysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQot
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5o
IgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0Nyw4ICsxNDcsOCBAQCBQYWdl
KiBDaHJvbWU6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsCiAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgaWYgKG5ld1BhZ2UpIHsKLSAgICAgICAgaWYgKFNlc3Npb25TdG9yYWdlKiBv
bGRTZXNzaW9uU3RvcmFnZSA9IG1fcGFnZS0+c2Vzc2lvblN0b3JhZ2UoZmFsc2UpKQotICAgICAg
ICAgICAgbmV3UGFnZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHko
bmV3UGFnZSkpOworICAgICAgICBpZiAoU3RvcmFnZU5hbWVzcGFjZSogb2xkU2Vzc2lvblN0b3Jh
Z2UgPSBtX3BhZ2UtPnNlc3Npb25TdG9yYWdlKGZhbHNlKSkKKyAgICAgICAgICAgIG5ld1BhZ2Ut
PnNldFNlc3Npb25TdG9yYWdlKG9sZFNlc3Npb25TdG9yYWdlLT5jb3B5KCkpOwogICAgIH0KICNl
bmRpZgogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDkgQEAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgot
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtNTc4LDcgKzU3Nyw3
IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICBpZiAoIXNl
dHRpbmdzIHx8ICFzZXR0aW5ncy0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlID0gcGFnZS0+Z3JvdXAoKS5s
b2NhbFN0b3JhZ2UoKTsKKyAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UgPSBwYWdl
LT5ncm91cCgpLmxvY2FsU3RvcmFnZSgpOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEgPSBsb2NhbFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpKSA6IDA7IAogICAgIGlmIChzdG9yYWdlQXJlYSkgewogICAgICAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFy
ZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gNDUyNzYp
CisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdlYktpdFBvaW50OwogCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQotICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlOwogICAgIGNsYXNz
IFN0b3JhZ2U7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDggQEAKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0jaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNlbmRpZgog
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC01NTAsMTcgKzU0OSwxNiBAQCB2
b2lkIFBhZ2U6OnNldERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlCiB9CiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCi1TZXNzaW9uU3RvcmFnZSogUGFnZTo6c2Vzc2lvblN0b3JhZ2UoYm9vbCBv
cHRpb25hbENyZWF0ZSkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2U6OnNlc3Npb25TdG9yYWdlKGJv
b2wgb3B0aW9uYWxDcmVhdGUpCiB7CiAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlICYmIG9wdGlv
bmFsQ3JlYXRlKQotICAgICAgICBtX3Nlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U6OmNy
ZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6
OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAKICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFn
ZS5nZXQoKTsKIH0KIAotdm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRyPFNl
c3Npb25TdG9yYWdlPiBuZXdTdG9yYWdlKQordm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG5ld1N0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKG5l
d1N0b3JhZ2UtPnBhZ2UoKSA9PSB0aGlzKTsKICAgICBtX3Nlc3Npb25TdG9yYWdlID0gbmV3U3Rv
cmFnZTsKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvcGFnZS9Q
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgUmVuZGVyVGhlbWU7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
ICAgICBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOworICAgIGNsYXNzIFNldHRpbmdzOwogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsKKyAgICBjbGFz
cyBTdG9yYWdlTmFtZXNwYWNlOwogI2VuZGlmCi0gICAgY2xhc3MgU2V0dGluZ3M7CiAjaWYgRU5B
QkxFKFdNTCkKICAgICBjbGFzcyBXTUxQYWdlU3RhdGU7CiAjZW5kaWYKQEAgLTE3OSw4ICsxNzks
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0ZWRTdGF0
ZUNoYW5nZWQoUGFnZUdyb3VwKiwgTGlua0hhc2ggdmlzaXRlZEhhc2gpOwogCiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQotICAgICAgICBTZXNzaW9uU3RvcmFnZSogc2Vzc2lvblN0b3JhZ2UoYm9v
bCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOwotICAgICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdl
KFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+KTsKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFjZSog
c2Vzc2lvblN0b3JhZ2UoYm9vbCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOworICAgICAgICB2b2lk
IHNldFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4pOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoV01MKQpAQCAtMjUzLDcgKzI1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IG1fY3VzdG9tSFRNTFRva2VuaXplckNodW5rU2l6ZTsKIAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBtX3Nlc3Np
b25TdG9yYWdlOworICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9zZXNzaW9uU3Rv
cmFnZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oV1gpICYmIGRl
ZmluZWQoX19XWE1TV19fKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFfV1NfV0lOKSkK
SW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvcGFnZS9QYWdl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw3IEBACiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRlICJMb2NhbFN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCkBAIC0xODEsMTMgKzE4MCwx
MyBAQCB2b2lkIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGluCiB9CiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi1Mb2NhbFN0b3JhZ2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWdl
KCkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWdlKCkKIHsKICAgICBp
ZiAoIW1fbG9jYWxTdG9yYWdlKSB7CiAgICAgICAgIC8vIE5lZWQgYSBwYWdlIGluIHRoaXMgcGFn
ZSBncm91cCB0byBxdWVyeSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIHBhdGguCiAgICAgICAgIFBhZ2UqIHBhZ2UgPSAqbV9wYWdlcy5iZWdpbigpOwogICAgICAg
ICBBU1NFUlQocGFnZSk7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlID0gTG9jYWxTdG9yYWdlOjps
b2NhbFN0b3JhZ2UocGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKCkp
OworICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShwYWdlLT5zZXR0aW5ncygpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
aAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEtVUkw7Ci0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xh
c3MgU3RvcmFnZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5vbmNvcHlhYmxl
IHsKICAgICBwdWJsaWM6CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgICAgICBMb2NhbFN0b3JhZ2UqIGxvY2FsU3RvcmFn
ZSgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UoKTsKICNlbmRpZgog
CiAgICAgcHJpdmF0ZToKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0g
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1fbG9jYWxTdG9yYWdlOworICAgICAgICBSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2U7CiAjZW5kaWYKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
LSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5o
IgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7
Ci0KLXN0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOwot
ICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0KLVBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
PiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAg
Y29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBh
dGg7Ci0gICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgp
LmZpbmQobG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgp
KSB7Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVm
KG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAo
KS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxv
Y2FsU3RvcmFnZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpdC0+c2Vjb25k
OwotfQotCi1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0g
ICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCi17Ci0gICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQot
ICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRo
KTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKLXsKLSAgICBBU1NFUlQobG9j
YWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0gICAgbG9jYWxTdG9yYWdlTWFw
KCkucmVtb3ZlKG1fcGF0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3Rv
cmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4g
aW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKLSAg
ICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBv
a2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCi0gICAgLy8gdGhpcyBtZXRo
b2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhp
c3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCi0gICAgLy8gVG8ga25vdyBp
ZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2Fp
dCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0
J3MgQXJlYUltcG9ydCB0YXNrLgotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEg
aXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8g
Ci0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4g
dGFzayBvZiB0eXBlIEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikp
Ci0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0KLSAgICBzdG9yYWdlQXJl
YSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2Vy
KTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6Y2xv
c2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NhbFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAo
TG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5
bmMoKTsKLSAgICAKLSAgICBtX3N5bmNNYW5hZ2VyID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZS5oCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKLSNk
ZWZpbmUgTG9jYWxTdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBTdG9yYWdlQXJlYTsKLSAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7Ci0KLSAgICBj
bGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKLQotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOwot
Ci0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKik7Ci0KLSAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5
T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKLSAgICAgICAgTG9jYWxTdG9yYWdlQXJl
YU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwotCi0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAg
IFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0gICAgfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCi0j
ZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRh
c2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUaHJlYWQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgIkxvY2Fs
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKICNpbmNsdWRlICJTdG9y
YWdlQXJlYVN5bmMuaCIKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCShyZXZp
c2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlc3Npb25T
dG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBTZXNzaW9uU3RvcmFnZTo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3RvcmFnZShwYWdl
KSk7Ci19Ci0KLVNlc3Npb25TdG9yYWdlOjpTZXNzaW9uU3RvcmFnZShQYWdlKiBwYWdlKQotICAg
IDogbV9wYWdlKHBhZ2UpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8
U2Vzc2lvblN0b3JhZ2U+IFNlc3Npb25TdG9yYWdlOjpjb3B5KFBhZ2UqIG5ld1BhZ2UpCi17Ci0g
ICAgQVNTRVJUKG5ld1BhZ2UpOwotICAgIFJlZlB0cjxTZXNzaW9uU3RvcmFnZT4gbmV3U2Vzc2lv
biA9IFNlc3Npb25TdG9yYWdlOjpjcmVhdGUobmV3UGFnZSk7Ci0gICAgCi0gICAgU2Vzc2lvblN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAg
IGZvciAoU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1h
cC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4g
YXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCksIG5ld1BhZ2UpOwotICAg
ICAgICBuZXdTZXNzaW9uLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgYXJlYUNvcHku
cmVsZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ld1Nlc3Npb24ucmVsZWFzZSgp
OwotfQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9y
aWdpbikpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0gICAgICAgIAot
ICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9yaWdp
biwgbV9wYWdlKTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVh
KTsKLSAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCShy
ZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZXNzaW9uU3RvcmFnZV9oCi0jZGVmaW5lIFNlc3Np
b25TdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0KLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNlc3Npb25TdG9yYWdlPiB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY3JlYXRlKFBhZ2UqKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY29weShQYWdlKik7Ci0gICAgICAgIAotICAg
ICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiop
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gbV9wYWdl
OyB9Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNlc3Npb25TdG9yYWdlKFBhZ2Uq
KTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0b3JhZ2VBcmVhKiwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAg
ICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJl
ZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVh
TWFwOwotICAgICAgICBTZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCi0KLSNlbmRpZiAvLyBTZXNzaW9uU3RvcmFnZV9oCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYS5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2Fs
U3RvcmFnZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6
Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShzdG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5jTWFu
YWdlcikpOwogfQogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQotICAgIDog
bV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFn
ZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1h
cChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKICAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNN
YW5hZ2VyKQotICAgICwgbV9zZXNzaW9uU3RvcmFnZVBhZ2UoMCkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKIHsKICAgICBBU1NFUlQobV9zZWN1cml0
eU9yaWdpbik7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CkBAIC02NCwzNyArNjcsMzUgQEAg
U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKgogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCBwYWdlLCAwKSk7CisgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3Jp
Z2luLCB0aGlzKSk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpj
b3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIG1fc3RvcmFnZU1hcCkpOwotfQot
Ci1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSog
cGFnZSwgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBzdG9yYWdlTWFwKQotICAgIDogbV9zZWN1cml0
eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAoc3RvcmFnZU1hcCkKLSAgICAsIG1f
c2Vzc2lvblN0b3JhZ2VQYWdlKHBhZ2UpCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCisgICAgOiBtX3N0b3JhZ2VUeXBl
KGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKKyAg
ICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCisgICAgLCBtX3N0b3JhZ2VTeW5j
TWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQorI2VuZGlmCiB7CiAgICAgQVNTRVJU
KG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUGFnZSk7Ci0K
LSAgICBpZiAoIW1fc3RvcmFnZU1hcCkgewotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdl
TWFwOjpjcmVhdGUoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0gICAgfQorICAg
IEFTU0VSVChtX3N0b3JhZ2VNYXApOworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKIH0KIAog
dW5zaWduZWQgU3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCiBTdHJp
bmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOwogICAgIAogICAgIFN0cmluZyBrZXk7CkBAIC0xMDksNiArMTEwLDcgQEAgU3Ry
aW5nIFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQgaW5kZXgsIAogCiBTdHJpbmcgU3RvcmFnZUFy
ZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAgIAogICAgIHJl
dHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKQEAgLTExNiw2ICsxMTgsNyBAQCBTdHJp
bmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nCiAKIHZvaWQgU3RvcmFnZUFyZWE6
OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwog
ICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOwogICAgIApAQCAtMTQ3LDYgKzE1MCw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0o
Y29uc3QgU3RyaW5nJiAKIAogdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJhbWUtPnBhZ2Uo
KS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTY3LDYgKzE3MSw3
IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW4KIAogdm9pZCBTdG9y
YWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJhbWUt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTgxLDYg
KzE4Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKIAogYm9vbCBT
dG9yYWdlQXJlYTo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAg
IAogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CkBAIC0xODgsMTMgKzE5
NCwxOCBAQCBib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmCiAKIHZvaWQg
U3RvcmFnZUFyZWE6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1hcC0+
aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6c2NoZWR1bGVG
aW5hbFN5bmMoKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5j
KCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyNlbmRpZgog
fQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdApA
QCAtMjA5LDkgKzIyMCwxNCBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVu
dChjCiAgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUg
cGFnZSBncm91cCBpdHNlbGYuCiAgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7CiAK
LSAgICBpZiAobV9zZXNzaW9uU3RvcmFnZVBhZ2UpIHsKKyAgICAvLyBGSVhNRTogV2hlbiBjYW4g
dGhpcyBvY2N1cj8KKyAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IFNl
c3Npb25TdG9yYWdlKSB7CiAgICAgICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2Uu
Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9zZXNzaW9uU3RvcmFnZVBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewor
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigp
KSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQpAQCAt
MjE5LDExICsyMzUsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChj
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3Rv
cmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1
ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3Vy
Y2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9y
YWdlKCkpKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gdGhpcyBv
Y2N1cj8KLSAgICAgICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAgICAg
IGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICAvLyBTZW5kIGV2ZW50
cyB0byBldmVyeSBwYWdlLgogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBw
YWdlLT5ncm91cCgpLnBhZ2VzKCk7CiAgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lv
biA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0b3Jh
Z2VNYXA7CiAgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CisgICAgZW51bSBTdG9yYWdlVHlwZSB7IExvY2FsU3RvcmFnZSwgU2Vzc2lv
blN0b3JhZ2UgfTsKIAogICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8U3RvcmFnZUFyZWE+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBjcmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpOwotICAgICAgICBQYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbios
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICAvLyBUaGUgSFRNTDUg
RE9NIFN0b3JhZ2UgQVBJCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNjQs
MjggKzY0LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhcihGcmFt
ZSogc291cmNlRnJhbWUpOwogCiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0OwotICAgICAgICB2b2lkIHNjaGVkdWxlRmluYWxTeW5jKCk7CisgICAgICAgIHZv
aWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBDb3VsZCBiZSBjYWxsZWQgZnJvbSBhIGJhY2tncm91
bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+KTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdl
Kik7Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFnZSosIFBhc3NSZWZQ
dHI8U3RvcmFnZU1hcD4pOworICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJp
dHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAgICAgICBTdG9y
YWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAgICAg
IHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7
CiAKKyAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1h
cD4gbV9zdG9yYWdlTWFwOwogCiAgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3Rv
cmFnZUFyZWFTeW5jOwogICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3Jh
Z2VTeW5jTWFuYWdlcjsKLSAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAvLyBO
VUxMIGlmZiBpdCdzIExvY2FsU3RvcmFnZQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICBib29s
IG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTI3NikKKysr
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw2ICs3NSw4IEBAIFN0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVhU3luYygpCiB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoaXMgdG8gYXZvaWQgcmFjZXMsIGJ1dCBp
dCdkIGJlIGJldHRlciB0byBtYWtlIHRoaW5ncyBzYWZlIHdpdGhvdXQgYmxvY2tpbmcuCisgICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKG1fc3luY1RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDQ1MTkyKQkoZnJvbSBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlLmNwcDo0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7CisKK3N0YXRpYyBMb2Nh
bFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOworICAgIHJldHVybiBsb2Nh
bFN0b3JhZ2VNYXA7Cit9CisKK1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6
OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgY29uc3QgU3RyaW5nIGxv
b2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7CisgICAgTG9jYWxT
dG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQobG9va3VwUGF0
aCk7CisgICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJl
ZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBMb2NhbFN0b3Jh
Z2UobG9va3VwUGF0aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQobG9va3VwUGF0
aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZWxl
YXNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCitMb2NhbFN0
b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0
aC5jb3B5KCkpCit7CisgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQorICAgICAgICBtX3N5bmNN
YW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKK30KKworTG9jYWxT
dG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKK3sKKyAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCku
Z2V0KG1fcGF0aCkgPT0gdGhpcyk7CisgICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0
aCk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFz
IG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSBuZWVkIHRv
IGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNs
aWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCisgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4g
bnVsbC4KKyAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVy
cG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCisgICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBw
cmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExv
Y2FsU3RvcmFnZSAKKyAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0
YXNrLgorCisgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJs
aXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCisgICAgLy8gc3luYyBp
dHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFy
ZWFTeW5jCisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlmIChz
dG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJldHVy
biBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CisKKyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVh
OjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKKyAgICBtX3N0b3Jh
Z2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoTG9jYWxTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKKyAgICAKKyAg
ICBtX3N5bmNNYW5hZ2VyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQorCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2UuY3BwCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsOTYgKzIwLDExMCBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdl
LmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiAjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYWxTdG9yYWdlKj4gTG9jYWxTdG9yYWdlTWFwOwordHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcDsKIAotc3RhdGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK3N0
YXRpYyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgp
CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFn
ZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7CiB9CiAKLVBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJp
bmcmIHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6
OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgY29uc3Qg
U3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7Ci0g
ICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQo
bG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQo
bG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsU3Rv
cmFnZS5yZWxlYXNlKCk7CisgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOjppdGVyYXRvciBp
dCA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYg
KGl0ID09IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBzdG9yYWdlTmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VOYW1lc3BhY2UoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVsZWFzZSgpOwogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3Rv
cmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCitQYXNz
UmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2Uo
U2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7Cit9CisKK1N0b3JhZ2VOYW1lc3BhY2U6OlN0b3Jh
Z2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3BhdGgocGF0aC5jb3B5
KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KKyAgICAsIG1fc3luY01hbmFn
ZXIoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYK
IHsKLSAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0g
TG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICBtX3N5bmNNYW5hZ2Vy
ID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKIH0KIAotTG9jYWxTdG9yYWdl
Ojp+TG9jYWxTdG9yYWdlKCkKK1N0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNlKCkK
IHsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0g
ICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkgeworICAg
ICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhp
cyk7CisgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnJlbW92ZShtX3BhdGgpOwor
ICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdl
QXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNl
PiBTdG9yYWdlTmFtZXNwYWNlOjpjb3B5KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKworICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShtX3N0b3Jh
Z2VUeXBlLCBtX3BhdGgpKTsKIAotICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQsCi0g
ICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQgaXMg
b2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAotICAgIC8vIHRoaXMgbWV0
aG9kIHdpbGwgcmV0dXJuIG51bGwuCi0gICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50IGV4
aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgotICAgIC8vIFRvIGtub3cg
aWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdh
aXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCi0gICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBp
dCdzIEFyZWFJbXBvcnQgdGFzay4KKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3Qu
Z2V0KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZp
cnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdOYW1lc3Bh
Y2UucmVsZWFzZSgpOworfQogCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMg
YmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCi0g
ICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFz
ayBvZiB0eXBlIEFyZWFTeW5jCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNw
YWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCiAgICAgUmVmUHRy
PFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmdldChvcmlnaW4pKQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFz
ZSgpOwogCi0gICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlTG9jYWxTdG9yYWdl
KG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CisgICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6
Y3JlYXRlKG1fc3RvcmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CiAgICAgbV9zdG9y
YWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VB
cmVhLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKK3ZvaWQgU3Rv
cmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCi0gICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKExvY2FsU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0gICAg
Ci0gICAgbV9zeW5jTWFuYWdlciA9IDA7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaXQtPnNlY29uZC0+Y2xvc2UoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1
dGRvd24gPSB0cnVlOworI2VuZGlmCiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQogI2Vu
ZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCShyZXZpc2lvbiA0NTE5MikJKGZyb20gV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oOjQ1MTkyKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTG9jYWxTdG9y
YWdlX2gKKyNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7
CisKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3Jh
Z2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKKworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcm
IHBhdGgpOworCisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4s
IFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgTG9jYWxT
dG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAgICAgIFN0cmluZyBtX3BhdGg7
CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTYgQEAKICAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBMb2NhbFN0b3JhZ2VfaAotI2RlZmluZSBMb2NhbFN0b3JhZ2Vf
aAorI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlX2gKKyNkZWZpbmUgU3RvcmFnZU5hbWVzcGFjZV9o
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhh
c2guaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzgsMjggKzM5LDM2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBTdG9yYWdl
U3luY01hbmFnZXI7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3RvcmFnZU5hbWVzcGFjZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgfkxvY2Fs
U3RvcmFnZSgpOworICAgICAgICB+U3RvcmFnZU5hbWVzcGFjZSgpOwogCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAgICAg
ICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7
Ci0KKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CiAgICAgICAg
IHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZShjb25z
dCBTdHJpbmcmIHBhdGgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBlLCBj
b25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFN0
b3JhZ2VBcmVhTWFwOworICAgICAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwog
Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8
U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7Ci0g
ICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgU3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKIAorICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9zdG9y
YWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3VyIGNv
bnN0cnVjdG9yLgogICAgICAgICBTdHJpbmcgbV9wYXRoOwogICAgICAgICBSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2VuZGlmIC8vIExvY2FsU3Rv
cmFnZV9oCisjZW5kaWYgLy8gU3RvcmFnZU5hbWVzcGFjZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31956</attachid>
            <date>2009-06-26 15:32:05 -0700</date>
            <delta_ts>2009-06-30 09:35:06 -0700</delta_ts>
            <desc>resynced + added #include &quot;DOMWindow.cpp&quot; to storageArea.cpp</desc>
            <filename>5.20090626.patch.2</filename>
            <type>text/plain</type>
            <size>62452</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDYtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzMyCisKKyAgICAgICAg
Rm9yIHRoZSBmaW5hbCBzdGVwIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTM3NiwKKyAgICAgICAgY29tYmluZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9y
YWdlIGludG8gU3RvcmFnZU5hbWVzcGFjZS4gVGhlCisgICAgICAgIHN5bmNoaW5nIGNvZGUgKGZv
ciBMb2NhbFN0b3JhZ2UpIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgc28gdGhlc2UKKyAgICAg
ICAgY2xhc3NlcyBhcmUgbm93IHZlcnkgc2ltaWxhci4gIEFsbCB0aGV5IGRvIGlzIGVzc2VudGlh
bGx5IGNvbnRhaW4gYQorICAgICAgICBsb2dpY2FsIGdyb3VwaW5nIG9mIG9yaWdpbnMgdGhhdCBh
cmUgYXR0YWNoZWQgdG8gc3BlY2lmaWMgY29udGV4dHMKKyAgICAgICAgKGJlIGl0IFBhZ2VHcm91
cHMgZm9yIExvY2FsU3RvcmFnZSBhbmQgUGFnZSBmb3IgU2Vzc2lvblN0b3JhZ2UpLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Up
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNldFNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6
OmxvY2FsU3RvcmFnZSk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuaDoKKyAgICAgICAgKiBz
dG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAg
KiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1Nlc3Npb25TdG9yYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjprZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWE6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6
aW1wb3J0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2Uu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmNvcHkpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisK
IDIwMDktMDYtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1Mjc2KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSwyNCArMjA4
NSwyMiBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAgXAotCVdlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2UuY3BwIFwKLQlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmggXAog
CVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRhc2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVh
ZC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBcCi0JV2ViQ29y
ZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcCBcCi0JV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25T
dG9yYWdlLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBcCiAJV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2UuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcCBcCiAJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogCVdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2
ZW50LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBcCiAJV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VNYXAuaCBcCi0JV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAg
XAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCisJV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2UuY3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAjIEVORCBFTkFCTEVfRE9NX1NU
T1JBR0UKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDcgKzEwMTAsNiBAQCBUaGlz
IGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvRGF0
YWJhc2VUYXNrLmNwcAogICAgICAgICBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAogICAgICAg
ICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKLSAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKICAgICAgICAgc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFN
YW5hZ2VyLmNwcApAQCAtMTAyMSwxMCArMTAyMCwxMCBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZS5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYS5j
cHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0b3JhZ2Uv
U3RvcmFnZUV2ZW50LmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKLSAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAogICAgIDwvc2V0PgogCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk5ODcsMTQg
KzI5OTg3LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2UuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0K
LQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2UuaCIN
Ci0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcTG9jYWxTdG9yYWdlVGFzay5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAw
MjcsMTQgKzMwMDE5LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTZXNzaW9uU3RvcmFnZS5jcHAiDQotCQkJCT4NCi0JCQk8
L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNlc3Npb25T
dG9yYWdlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAt
MzAxMDcsNiArMzAwOTEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlQXJlYVN5bmMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmls
ZT4NCkBAIC0zMDEyMywxMSArMzAxMTUsMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdl
XFN0b3JhZ2VBcmVhU3luYy5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFn
ZU5hbWVzcGFjZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ1Mjc2KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTgzNCw4ICs4MzQsNiBAQAogCQk1MUIyNDE3QjBEOTMxRjNGMDBFODNGNUMgLyogTGVn
YWN5V2ViQXJjaGl2ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFj
Lm1tICovOyB9OwogCQk1MUJFMzdERjBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM3REQw
REFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTFCRTM3RTAwREFF
RTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFy
ZWEuaCAqLzsgfTsKLQkJNTFCRTM4MjgwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzgy
NjBEQUVGN0RBMDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCAqLzsgfTsKLQkJNTFCRTM4Mjkw
REFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM4MjcwREFFRjdEQTAwMTA4NUZDIC8qIExvY2Fs
U3RvcmFnZS5oICovOyB9OwogCQk1MUMwQUEzOTBGMkFBMTBBMDAxNjQ4QzIgLyogQ2FjaGVkRnJh
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzBB
QTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQzBBQTQxMEYyQUExNUUwMDE2NDhDMiAv
KiBDYWNoZWRGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovOyB9
OwogCQk1MUM4MUI4OTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzgxQjg3MEM0
NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuY3BwICovOyB9OwpAQCAtODQ5LDgg
Kzg0Nyw2IEBACiAJCTUxRTBCQUJDMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMEJBQkEw
REE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAgKi87IH07CiAJCTUxRTBCQUVBMERB
NTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUwQkFFODBEQTU1RDRBMDBBOUU0MTcgLyogSlNT
dG9yYWdlRXZlbnQuY3BwICovOyB9OwogCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNT
dG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTBCQUU5MERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5oICovOyB9Owot
CQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjIxMERBNTcyQTYwMEE5
RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovOyB9OwotCQk1MUUwQkIyNDBEQTU3MkE2MDBBOUU0
MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdl
LmNwcCAqLzsgfTsKIAkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM2MERB
NUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi87IH07CiAJCTUxRTBCQjM5MERBNUFDQjYw
MEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNw
cCAqLzsgfTsKIAkJNTFFMUVDQUYwQzkxQzU0NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9vbC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTFFQ0FE
MEM5MUM1NDYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wubW0gKi87IH07CkBAIC00Mjk2LDYg
KzQyOTIsOCBAQAogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZD
ODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1
REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4
RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURB
NjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUwRDBFODIwRkY0MjcyOTAw
QUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VO
YW1lc3BhY2UuY3BwICovOyB9OworCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFn
ZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsgfTsK
IAkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJEOTIwRkQ5QUEy
RDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OwogCQlDNTEwMkQ5NTBGRDlB
QTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmgg
Ki87IH07CkBAIC01Nzk2LDggKzU3OTQsNiBAQAogCQk1MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMg
LyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQkUzN0REMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdl
QXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUJFMzgyNjBEQUVGN0RBMDAxMDg1RkMgLyog
TG9jYWxTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExv
Y2FsU3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQkUzODI3MERB
RUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9jYWxTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QzBBQTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWNoZWRGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkRnJhbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0
b3J5UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGVFBE
aXJlY3RvcnlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTgxMiw4
ICs1ODA4LDYgQEAKIAkJNTFFMEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3RvcmFnZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTgwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFnZUV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RvcmFnZUV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTkwREE1NUQ0QTAw
QTlFNDE3IC8qIEpTU3RvcmFnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RvcmFnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRTBC
QjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyog
U3RvcmFnZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQx
NyAvKiBTdG9yYWdlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0b3JhZ2VNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUxRUNBRDBD
OTFDNTQ2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0b2RyYWluZWRQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTEzMCw2ICs5MTI0LDggQEAKIAkJQzBERkM4NkYwREI2ODQxQTAwM0VB
RTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NvbnNvbGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTA1REE2MzBGM0FBNkI4
MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0
NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMDJE
OTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlU3lu
Y01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRDBGRDlF
RjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTY3Miw4ICs5NjY4LDYgQEAKIAkJCQkxQUQ1MUExMzBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0
YWJhc2VUcmFja2VyLmNwcCAqLywKIAkJCQkxQUQ1MUExMjBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0
YWJhc2VUcmFja2VyLmggKi8sCiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFi
YXNlVHJhY2tlckNsaWVudC5oICovLAotCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAvKiBM
b2NhbFN0b3JhZ2UuY3BwICovLAotCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBMb2Nh
bFN0b3JhZ2UuaCAqLywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGFzay5jcHAgKi8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3Rv
cmFnZVRhc2suaCAqLywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGhyZWFkLmNwcCAqLywKQEAgLTk2OTksOCArOTY5Myw2IEBACiAJCQkJMUE3Q0NCMjMwQ0Q5
NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLywKIAkJCQkxQTdDQ0IxNzBDRDk0
NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovLAogCQkJCTFBN0NDQjE4
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKLQkJ
CQk1MUUwQkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICovLAotCQkJ
CTUxRTBCQjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovLAogCQkJCTUx
RTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlDNDBE
QTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1
MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKQEAgLTk3MTMsNiArOTcwNSw4IEBACiAJCQkJNTFFMEJB
QkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcw
REE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFD
QjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMy
NjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCUM1MEQwRTgxMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFG
RjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZB
RkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKQEAgLTE2MTcxLDcgKzE2
MTY1LDYgQEAKIAkJCQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4
dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFCRTM4Mjkw
REFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEx
RjIzMTgwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJlYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNTIwN0JFMDlCRDQxMEEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRT
dHJpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NjEwLDcgKzE2NjAzLDYgQEAKIAkJCQkwODRB
RUJFNTBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vz
c2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5RTY0OTIwMDU2RTU4
MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
NjkxMyw2ICsxNjkwNSw3IEBACiAJCQkJQkM3N0QxNkMwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0
YUdyaWRDb2x1bW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JDQUUzNzBGRjE5Mzg1MDAw
NzYyQUUgLyogRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JDQUUz
RDBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE4MjU0LDcgKzE4MjQ3LDYgQEAKIAkJCQlBN0FEMkY4NzBFQzg5RDA3
MDA4QUIwMDIgLyogTGlua0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU2RDM3MzMwQURC
QTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTcwREMxNjBEQTAwNEYwMDMyIC8q
IExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTkwREMxNjBE
QTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5nc01hYy5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtMTg2NTQsNyArMTg2NDYsNiBAQAogCQkJCTkzMzA5RTBEMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBOEM5
NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFFMEJCMjQwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Np
b25TdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4
MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEM5
QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM1RUI4QzMwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODkyNyw2ICsxODkxOCw3IEBACiAJCQkJQkNCQ0FFNTQwRkYxQTI5RTAwMDc2MkFFIC8q
IEpTSFRNTERhdGFHcmlkRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3
RDFGRDBGRjI4RDlCMDA3MDg4N0IgLyogRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNzdEMjM5MEZGMjk4MDgwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA0NTI3NikK
KysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQot
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5o
IgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0Nyw4ICsxNDcsOCBAQCBQYWdl
KiBDaHJvbWU6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsCiAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgaWYgKG5ld1BhZ2UpIHsKLSAgICAgICAgaWYgKFNlc3Npb25TdG9yYWdlKiBv
bGRTZXNzaW9uU3RvcmFnZSA9IG1fcGFnZS0+c2Vzc2lvblN0b3JhZ2UoZmFsc2UpKQotICAgICAg
ICAgICAgbmV3UGFnZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHko
bmV3UGFnZSkpOworICAgICAgICBpZiAoU3RvcmFnZU5hbWVzcGFjZSogb2xkU2Vzc2lvblN0b3Jh
Z2UgPSBtX3BhZ2UtPnNlc3Npb25TdG9yYWdlKGZhbHNlKSkKKyAgICAgICAgICAgIG5ld1BhZ2Ut
PnNldFNlc3Npb25TdG9yYWdlKG9sZFNlc3Npb25TdG9yYWdlLT5jb3B5KCkpOwogICAgIH0KICNl
bmRpZgogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDkgQEAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgot
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtNTc4LDcgKzU3Nyw3
IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICBpZiAoIXNl
dHRpbmdzIHx8ICFzZXR0aW5ncy0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlID0gcGFnZS0+Z3JvdXAoKS5s
b2NhbFN0b3JhZ2UoKTsKKyAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UgPSBwYWdl
LT5ncm91cCgpLmxvY2FsU3RvcmFnZSgpOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEgPSBsb2NhbFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpKSA6IDA7IAogICAgIGlmIChzdG9yYWdlQXJlYSkgewogICAgICAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURPTVN0b3JhZ2Uoc3RvcmFnZUFy
ZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gNDUyNzYp
CisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdlYktpdFBvaW50OwogCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQotICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlOwogICAgIGNsYXNz
IFN0b3JhZ2U7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDggQEAKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0jaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNlbmRpZgog
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC01NTAsMTcgKzU0OSwxNiBAQCB2
b2lkIFBhZ2U6OnNldERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlCiB9CiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCi1TZXNzaW9uU3RvcmFnZSogUGFnZTo6c2Vzc2lvblN0b3JhZ2UoYm9vbCBv
cHRpb25hbENyZWF0ZSkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2U6OnNlc3Npb25TdG9yYWdlKGJv
b2wgb3B0aW9uYWxDcmVhdGUpCiB7CiAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlICYmIG9wdGlv
bmFsQ3JlYXRlKQotICAgICAgICBtX3Nlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U6OmNy
ZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6
OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAKICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFn
ZS5nZXQoKTsKIH0KIAotdm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRyPFNl
c3Npb25TdG9yYWdlPiBuZXdTdG9yYWdlKQordm9pZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG5ld1N0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKG5l
d1N0b3JhZ2UtPnBhZ2UoKSA9PSB0aGlzKTsKICAgICBtX3Nlc3Npb25TdG9yYWdlID0gbmV3U3Rv
cmFnZTsKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvcGFnZS9Q
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEwICs2MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgUmVuZGVyVGhlbWU7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
ICAgICBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOworICAgIGNsYXNzIFNldHRpbmdzOwogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsKKyAgICBjbGFz
cyBTdG9yYWdlTmFtZXNwYWNlOwogI2VuZGlmCi0gICAgY2xhc3MgU2V0dGluZ3M7CiAjaWYgRU5B
QkxFKFdNTCkKICAgICBjbGFzcyBXTUxQYWdlU3RhdGU7CiAjZW5kaWYKQEAgLTE3OSw4ICsxNzks
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0ZWRTdGF0
ZUNoYW5nZWQoUGFnZUdyb3VwKiwgTGlua0hhc2ggdmlzaXRlZEhhc2gpOwogCiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQotICAgICAgICBTZXNzaW9uU3RvcmFnZSogc2Vzc2lvblN0b3JhZ2UoYm9v
bCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOwotICAgICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdl
KFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+KTsKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFjZSog
c2Vzc2lvblN0b3JhZ2UoYm9vbCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOworICAgICAgICB2b2lk
IHNldFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4pOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoV01MKQpAQCAtMjUzLDcgKzI1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IG1fY3VzdG9tSFRNTFRva2VuaXplckNodW5rU2l6ZTsKIAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBtX3Nlc3Np
b25TdG9yYWdlOworICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9zZXNzaW9uU3Rv
cmFnZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oV1gpICYmIGRl
ZmluZWQoX19XWE1TV19fKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFfV1NfV0lOKSkK
SW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvcGFnZS9QYWdl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw3IEBACiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRlICJMb2NhbFN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2UuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCkBAIC0xODEsMTMgKzE4MCwx
MyBAQCB2b2lkIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGluCiB9CiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi1Mb2NhbFN0b3JhZ2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWdl
KCkKK1N0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWdlKCkKIHsKICAgICBp
ZiAoIW1fbG9jYWxTdG9yYWdlKSB7CiAgICAgICAgIC8vIE5lZWQgYSBwYWdlIGluIHRoaXMgcGFn
ZSBncm91cCB0byBxdWVyeSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIHBhdGguCiAgICAgICAgIFBhZ2UqIHBhZ2UgPSAqbV9wYWdlcy5iZWdpbigpOwogICAgICAg
ICBBU1NFUlQocGFnZSk7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlID0gTG9jYWxTdG9yYWdlOjps
b2NhbFN0b3JhZ2UocGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKCkp
OworICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShwYWdlLT5zZXR0aW5ncygpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
aAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEtVUkw7Ci0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xh
c3MgU3RvcmFnZU5hbWVzcGFjZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5vbmNvcHlhYmxl
IHsKICAgICBwdWJsaWM6CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgICAgICBMb2NhbFN0b3JhZ2UqIGxvY2FsU3RvcmFn
ZSgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2UoKTsKICNlbmRpZgog
CiAgICAgcHJpdmF0ZToKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0g
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1fbG9jYWxTdG9yYWdlOworICAgICAgICBSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2U7CiAjZW5kaWYKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkocmV2aXNpb24gNDUyNzYpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
LSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5o
IgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7
Ci0KLXN0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOwot
ICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0KLVBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
PiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAg
Y29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBh
dGg7Ci0gICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgp
LmZpbmQobG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgp
KSB7Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVm
KG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAo
KS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxv
Y2FsU3RvcmFnZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpdC0+c2Vjb25k
OwotfQotCi1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0g
ICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCi17Ci0gICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQot
ICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRo
KTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKLXsKLSAgICBBU1NFUlQobG9j
YWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0gICAgbG9jYWxTdG9yYWdlTWFw
KCkucmVtb3ZlKG1fcGF0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3Rv
cmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4g
aW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKLSAg
ICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBv
a2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCi0gICAgLy8gdGhpcyBtZXRo
b2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhp
c3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCi0gICAgLy8gVG8ga25vdyBp
ZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2Fp
dCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0
J3MgQXJlYUltcG9ydCB0YXNrLgotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEg
aXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8g
Ci0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4g
dGFzayBvZiB0eXBlIEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikp
Ci0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0KLSAgICBzdG9yYWdlQXJl
YSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2Vy
KTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6Y2xv
c2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NhbFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAo
TG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5
bmMoKTsKLSAgICAKLSAgICBtX3N5bmNNYW5hZ2VyID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZS5oCShyZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKLSNk
ZWZpbmUgTG9jYWxTdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBTdG9yYWdlQXJlYTsKLSAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7Ci0KLSAgICBj
bGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKLQotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOwot
Ci0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKik7Ci0KLSAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5
T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKLSAgICAgICAgTG9jYWxTdG9yYWdlQXJl
YU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwotCi0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAg
IFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0gICAgfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCi0j
ZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRh
c2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUaHJlYWQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgIkxvY2Fs
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKICNpbmNsdWRlICJTdG9y
YWdlQXJlYVN5bmMuaCIKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCShyZXZp
c2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlc3Npb25T
dG9yYWdlLmgiCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBTZXNzaW9uU3RvcmFnZTo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3RvcmFnZShwYWdl
KSk7Ci19Ci0KLVNlc3Npb25TdG9yYWdlOjpTZXNzaW9uU3RvcmFnZShQYWdlKiBwYWdlKQotICAg
IDogbV9wYWdlKHBhZ2UpCi17Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8
U2Vzc2lvblN0b3JhZ2U+IFNlc3Npb25TdG9yYWdlOjpjb3B5KFBhZ2UqIG5ld1BhZ2UpCi17Ci0g
ICAgQVNTRVJUKG5ld1BhZ2UpOwotICAgIFJlZlB0cjxTZXNzaW9uU3RvcmFnZT4gbmV3U2Vzc2lv
biA9IFNlc3Npb25TdG9yYWdlOjpjcmVhdGUobmV3UGFnZSk7Ci0gICAgCi0gICAgU2Vzc2lvblN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAg
IGZvciAoU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1h
cC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4g
YXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCksIG5ld1BhZ2UpOwotICAg
ICAgICBuZXdTZXNzaW9uLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgYXJlYUNvcHku
cmVsZWFzZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5ld1Nlc3Npb24ucmVsZWFzZSgp
OwotfQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9y
aWdpbikpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0gICAgICAgIAot
ICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9yaWdp
biwgbV9wYWdlKTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVh
KTsKLSAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCShy
ZXZpc2lvbiA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZXNzaW9uU3RvcmFnZV9oCi0jZGVmaW5lIFNlc3Np
b25TdG9yYWdlX2gKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0KLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNlc3Npb25TdG9yYWdlPiB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY3JlYXRlKFBhZ2UqKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gY29weShQYWdlKik7Ci0gICAgICAgIAotICAg
ICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiop
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gbV9wYWdl
OyB9Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNlc3Npb25TdG9yYWdlKFBhZ2Uq
KTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0b3JhZ2VBcmVhKiwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAg
ICAgICAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJl
ZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVh
TWFwOwotICAgICAgICBTZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCi0KLSNlbmRpZiAvLyBTZXNzaW9uU3RvcmFnZV9oCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYS5jcHAJKHJldmlzaW9uIDQ1Mjc2KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2Fs
U3RvcmFnZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6
Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShzdG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5jTWFu
YWdlcikpOwogfQogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQotICAgIDog
bV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFn
ZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1h
cChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKICAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNN
YW5hZ2VyKQotICAgICwgbV9zZXNzaW9uU3RvcmFnZVBhZ2UoMCkKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKIHsKICAgICBBU1NFUlQobV9zZWN1cml0
eU9yaWdpbik7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CkBAIC02NCwzNyArNjcsMzUgQEAg
U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKgogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCBwYWdlLCAwKSk7CisgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3Jp
Z2luLCB0aGlzKSk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpj
b3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIG1fc3RvcmFnZU1hcCkpOwotfQot
Ci1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSog
cGFnZSwgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBzdG9yYWdlTWFwKQotICAgIDogbV9zZWN1cml0
eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAoc3RvcmFnZU1hcCkKLSAgICAsIG1f
c2Vzc2lvblN0b3JhZ2VQYWdlKHBhZ2UpCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCisgICAgOiBtX3N0b3JhZ2VUeXBl
KGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKKyAg
ICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCisgICAgLCBtX3N0b3JhZ2VTeW5j
TWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQorI2VuZGlmCiB7CiAgICAgQVNTRVJU
KG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUGFnZSk7Ci0K
LSAgICBpZiAoIW1fc3RvcmFnZU1hcCkgewotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdl
TWFwOjpjcmVhdGUoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0gICAgfQorICAg
IEFTU0VSVChtX3N0b3JhZ2VNYXApOworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKIH0KIAog
dW5zaWduZWQgU3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCiBTdHJp
bmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOwogICAgIAogICAgIFN0cmluZyBrZXk7CkBAIC0xMDksNiArMTEwLDcgQEAgU3Ry
aW5nIFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQgaW5kZXgsIAogCiBTdHJpbmcgU3RvcmFnZUFy
ZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAgIAogICAgIHJl
dHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKQEAgLTExNiw2ICsxMTgsNyBAQCBTdHJp
bmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nCiAKIHZvaWQgU3RvcmFnZUFyZWE6
OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwog
ICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOwogICAgIApAQCAtMTQ3LDYgKzE1MCw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0o
Y29uc3QgU3RyaW5nJiAKIAogdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJhbWUtPnBhZ2Uo
KS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTY3LDYgKzE3MSw3
IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW4KIAogdm9pZCBTdG9y
YWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICBpZiAoZnJhbWUt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQpAQCAtMTgxLDYg
KzE4Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKIAogYm9vbCBT
dG9yYWdlQXJlYTo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAg
IAogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CkBAIC0xODgsMTMgKzE5
NCwxOCBAQCBib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmCiAKIHZvaWQg
U3RvcmFnZUFyZWE6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1hcC0+
aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6c2NoZWR1bGVG
aW5hbFN5bmMoKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQogewogICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5j
KCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKKyNlbmRpZgog
fQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdApA
QCAtMjA5LDkgKzIyMCwxNCBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVu
dChjCiAgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUg
cGFnZSBncm91cCBpdHNlbGYuCiAgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7CiAK
LSAgICBpZiAobV9zZXNzaW9uU3RvcmFnZVBhZ2UpIHsKKyAgICAvLyBGSVhNRTogV2hlbiBjYW4g
dGhpcyBvY2N1cj8KKyAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IFNl
c3Npb25TdG9yYWdlKSB7CiAgICAgICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2Uu
Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9zZXNzaW9uU3RvcmFnZVBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewor
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigp
KSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQpAQCAt
MjE5LDExICsyMzUsNiBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChj
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3Rv
cmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1
ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3Vy
Y2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9y
YWdlKCkpKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gdGhpcyBv
Y2N1cj8KLSAgICAgICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAgICAg
IGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICAvLyBTZW5kIGV2ZW50
cyB0byBldmVyeSBwYWdlLgogICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBw
YWdlLT5ncm91cCgpLnBhZ2VzKCk7CiAgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lv
biA0NTI3NikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0b3Jh
Z2VNYXA7CiAgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CisgICAgZW51bSBTdG9yYWdlVHlwZSB7IExvY2FsU3RvcmFnZSwgU2Vzc2lv
blN0b3JhZ2UgfTsKIAogICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8U3RvcmFnZUFyZWE+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBjcmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpOwotICAgICAgICBQYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbios
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICAvLyBUaGUgSFRNTDUg
RE9NIFN0b3JhZ2UgQVBJCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNjQs
MjggKzY0LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhcihGcmFt
ZSogc291cmNlRnJhbWUpOwogCiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0OwotICAgICAgICB2b2lkIHNjaGVkdWxlRmluYWxTeW5jKCk7CisgICAgICAgIHZv
aWQgY2xvc2UoKTsKIAogICAgICAgICAvLyBDb3VsZCBiZSBjYWxsZWQgZnJvbSBhIGJhY2tncm91
bmQgdGhyZWFkLgogICAgICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+KTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdl
Kik7Ci0gICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFnZSosIFBhc3NSZWZQ
dHI8U3RvcmFnZU1hcD4pOworICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJp
dHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAgICAgICBTdG9y
YWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAgICAg
IHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7
CiAKKyAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1h
cD4gbV9zdG9yYWdlTWFwOwogCiAgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3Rv
cmFnZUFyZWFTeW5jOwogICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3Jh
Z2VTeW5jTWFuYWdlcjsKLSAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAvLyBO
VUxMIGlmZiBpdCdzIExvY2FsU3RvcmFnZQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICBib29s
IG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTI3NikKKysr
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw2ICs3NSw4IEBAIFN0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVhU3luYygpCiB2b2lkIFN0
b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoaXMgdG8gYXZvaWQgcmFjZXMsIGJ1dCBp
dCdkIGJlIGJldHRlciB0byBtYWtlIHRoaW5ncyBzYWZlIHdpdGhvdXQgYmxvY2tpbmcuCisgICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKG1fc3luY1RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDQ1MTkyKQkoZnJvbSBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlLmNwcDo0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7CisKK3N0YXRpYyBMb2Nh
bFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOworICAgIHJldHVybiBsb2Nh
bFN0b3JhZ2VNYXA7Cit9CisKK1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6
OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgY29uc3QgU3RyaW5nIGxv
b2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7CisgICAgTG9jYWxT
dG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQobG9va3VwUGF0
aCk7CisgICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJl
ZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBMb2NhbFN0b3Jh
Z2UobG9va3VwUGF0aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQobG9va3VwUGF0
aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZWxl
YXNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCitMb2NhbFN0
b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0
aC5jb3B5KCkpCit7CisgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQorICAgICAgICBtX3N5bmNN
YW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKK30KKworTG9jYWxT
dG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKK3sKKyAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCku
Z2V0KG1fcGF0aCkgPT0gdGhpcyk7CisgICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0
aCk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFz
IG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSBuZWVkIHRv
IGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNs
aWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCisgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4g
bnVsbC4KKyAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVy
cG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCisgICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBw
cmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExv
Y2FsU3RvcmFnZSAKKyAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0
YXNrLgorCisgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJs
aXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCisgICAgLy8gc3luYyBp
dHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFy
ZWFTeW5jCisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlmIChz
dG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJldHVy
biBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CisKKyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVh
OjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKKyAgICBtX3N0b3Jh
Z2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoTG9jYWxTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKKyAgICAKKyAg
ICBtX3N5bmNNYW5hZ2VyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQorCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2UuY3BwCShyZXZpc2lvbiA0NTE5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsOTYgKzIwLDExMCBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdl
LmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiAjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYWxTdG9yYWdlKj4gTG9jYWxTdG9yYWdlTWFwOwordHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcDsKIAotc3RhdGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK3N0
YXRpYyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgp
CiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFn
ZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7CiB9CiAKLVBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJp
bmcmIHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6
OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgY29uc3Qg
U3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7Ci0g
ICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQo
bG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQo
bG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsU3Rv
cmFnZS5yZWxlYXNlKCk7CisgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOjppdGVyYXRvciBp
dCA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYg
KGl0ID09IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBzdG9yYWdlTmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VOYW1lc3BhY2UoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVsZWFzZSgpOwogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3Rv
cmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCitQYXNz
UmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2Uo
U2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7Cit9CisKK1N0b3JhZ2VOYW1lc3BhY2U6OlN0b3Jh
Z2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3BhdGgocGF0aC5jb3B5
KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KKyAgICAsIG1fc3luY01hbmFn
ZXIoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYK
IHsKLSAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0g
TG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICBtX3N5bmNNYW5hZ2Vy
ID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKIH0KIAotTG9jYWxTdG9yYWdl
Ojp+TG9jYWxTdG9yYWdlKCkKK1N0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNlKCkK
IHsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0g
ICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkgeworICAg
ICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhp
cyk7CisgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnJlbW92ZShtX3BhdGgpOwor
ICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdl
QXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNl
PiBTdG9yYWdlTmFtZXNwYWNlOjpjb3B5KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKworICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShtX3N0b3Jh
Z2VUeXBlLCBtX3BhdGgpKTsKIAotICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQsCi0g
ICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQgaXMg
b2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAotICAgIC8vIHRoaXMgbWV0
aG9kIHdpbGwgcmV0dXJuIG51bGwuCi0gICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50IGV4
aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgotICAgIC8vIFRvIGtub3cg
aWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdh
aXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCi0gICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBp
dCdzIEFyZWFJbXBvcnQgdGFzay4KKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3Qu
Z2V0KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZp
cnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdOYW1lc3Bh
Y2UucmVsZWFzZSgpOworfQogCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMg
YmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCi0g
ICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFz
ayBvZiB0eXBlIEFyZWFTeW5jCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNw
YWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCiAgICAgUmVmUHRy
PFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmdldChvcmlnaW4pKQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFz
ZSgpOwogCi0gICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlTG9jYWxTdG9yYWdl
KG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CisgICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6
Y3JlYXRlKG1fc3RvcmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CiAgICAgbV9zdG9y
YWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VB
cmVhLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKK3ZvaWQgU3Rv
cmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCi0gICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKExvY2FsU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0gICAg
Ci0gICAgbV9zeW5jTWFuYWdlciA9IDA7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaXQtPnNlY29uZC0+Y2xvc2UoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1
dGRvd24gPSB0cnVlOworI2VuZGlmCiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQogI2Vu
ZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCShyZXZpc2lvbiA0NTE5MikJKGZyb20gV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oOjQ1MTkyKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTG9jYWxTdG9y
YWdlX2gKKyNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7
CisKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3Jh
Z2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKKworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcm
IHBhdGgpOworCisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4s
IFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgTG9jYWxT
dG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAgICAgIFN0cmluZyBtX3BhdGg7
CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaAkocmV2aXNpb24gNDUxOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTYgQEAKICAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBMb2NhbFN0b3JhZ2VfaAotI2RlZmluZSBMb2NhbFN0b3JhZ2Vf
aAorI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlX2gKKyNkZWZpbmUgU3RvcmFnZU5hbWVzcGFjZV9o
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhh
c2guaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzgsMjggKzM5LDM2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBTdG9yYWdl
U3luY01hbmFnZXI7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3RvcmFnZU5hbWVzcGFjZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgfkxvY2Fs
U3RvcmFnZSgpOworICAgICAgICB+U3RvcmFnZU5hbWVzcGFjZSgpOwogCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAgICAg
ICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7
Ci0KKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CiAgICAgICAg
IHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZShjb25z
dCBTdHJpbmcmIHBhdGgpOworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBlLCBj
b25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFN0
b3JhZ2VBcmVhTWFwOworICAgICAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwog
Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8
U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7Ci0g
ICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgU3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKIAorICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9zdG9y
YWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3VyIGNv
bnN0cnVjdG9yLgogICAgICAgICBTdHJpbmcgbV9wYXRoOwogICAgICAgICBSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2VuZGlmIC8vIExvY2FsU3Rv
cmFnZV9oCisjZW5kaWYgLy8gU3RvcmFnZU5hbWVzcGFjZV9oCg==
</data>
<flag name="review"
          id="16503"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>