<?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>27072</bug_id>
          
          <creation_ts>2009-07-08 00:32:55 -0700</creation_ts>
          <short_desc>Split StorageNamespace and StorageArea into an interface and implementation</short_desc>
          <delta_ts>2009-07-08 16:55:49 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>beidson</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130388</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-08 00:32:55 -0700</bug_when>
    <thetext>I need to split StorageNamespace and StorageArea into an interface and implementation.  In a later patch, I&apos;ll implement a proxy interface that&apos;ll run inside the Chromium renderer process.

This is a continuation of other refactoring work: https://bugs.webkit.org/show_bug.cgi?id=25376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130390</commentid>
    <comment_count>1</comment_count>
      <attachid>32435</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-08 00:52:24 -0700</bug_when>
    <thetext>Created attachment 32435
v1

I need to split StorageNamespace and StorageArea into an interface and implementation.  In a later patch, I&apos;ll implement a proxy interface that&apos;ll run inside the Chromium renderer process.

This is a continuation of other refactoring work: https://bugs.webkit.org/show_bug.cgi?id=25376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130451</commentid>
    <comment_count>2</comment_count>
      <attachid>32435</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-08 10:21:00 -0700</bug_when>
    <thetext>Comment on attachment 32435
v1

&gt; Index: WebCore/storage/StorageArea.cpp

&gt; +#if PLATFORM(CHROMIUM)
&gt; +#else
&gt; +    return StorageAreaImpl::create(storageType, origin, syncManager);
&gt;  #endif

I think this should be #if !PLATFORM(CHROMIUM) to avoid the #else, or
perhaps you should add a similar FIXME comment there as you do below:


&gt; Index: WebCore/storage/StorageNamespace.cpp

&gt; +#if PLATFORM(CHROMIUM)
&gt; +    // FIXME: Implement.
&gt; +#else
&gt; +    return StorageNamespaceImpl::localStorageNamespace(path);
&gt; +#endif

Otherwise, looks good to me.  R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130492</commentid>
    <comment_count>3</comment_count>
      <attachid>32470</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-08 13:25:48 -0700</bug_when>
    <thetext>Created attachment 32470
v2

The main difference is that I took out the Chromium ifdef&apos;s and replaced them with an #error for Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130544</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-08 15:27:46 -0700</bug_when>
    <thetext>Landed as:  http://trac.webkit.org/changeset/45643</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130548</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-08 15:37:17 -0700</bug_when>
    <thetext>I had to revert that change due to build errors.  r45644 was the rollback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130566</commentid>
    <comment_count>6</comment_count>
      <attachid>32486</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-08 16:27:59 -0700</bug_when>
    <thetext>Created attachment 32486
Fix build in release mode

I&apos;m not sure why this showed up in release mode and not debug (probably optimizations?), but there was a build error in the last patch.  To fix it, I defined 2 virtual functions in StorageArea and made StorageAreaSync use a StorageArea* rather than a StroageAreaImpl* which removed some complex dependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130569</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-08 16:49:02 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure why this showed up in release mode and not debug (probably
&gt; optimizations?), but there was a build error in the last patch.  To fix it, I
&gt; defined 2 virtual functions in StorageArea and made StorageAreaSync use a
&gt; StorageArea* rather than a StroageAreaImpl* which removed some complex
&gt; dependencies.

I think it would be better to make StorageAreaSync talk directly to the implementation of StorageArea since StorageAreaSync is in effect part of the implementation of StorageArea.  This can be done as a follow-on patch as far as I am concerned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130571</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-08 16:55:49 -0700</bug_when>
    <thetext>Landed (take 2) as:  http://trac.webkit.org/changeset/45651</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32435</attachid>
            <date>2009-07-08 00:52:24 -0700</date>
            <delta_ts>2009-07-08 13:25:48 -0700</delta_ts>
            <desc>v1</desc>
            <filename>v1.patch</filename>
            <type>text/plain</type>
            <size>63342</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDctMDggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgU3RvcmFnZUFyZWEgYW5kIFN0b3JhZ2VOYW1lc3BhY2UgaW50byBhbiBpbnRlcmZhY2Ug
YW5kIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcwNzIKKworICAgICAgICBJIG5lZWQgdG8gc3BsaXQgU3RvcmFnZU5hbWVz
cGFjZSBhbmQgU3RvcmFnZUFyZWEgaW50byBhbiBpbnRlcmZhY2UgYW5kCisgICAgICAgIGltcGxl
bWVudGF0aW9uLiAgSW4gYSBsYXRlciBwYXRjaCwgSSdsbCBpbXBsZW1lbnQgYSBwcm94eSBpbnRl
cmZhY2UKKyAgICAgICAgdGhhdCdsbCBydW4gaW5zaWRlIHRoZSBDaHJvbWl1bSByZW5kZXJlciBw
cm9jZXNzLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgZml4IHRoZSBhbHBoYWJldGljYWwgb3Jk
ZXJpbmcgb2YgZmlsZXMgSSByZWNlbnRseSBhZGRlZAorICAgICAgICBpbiB0aGUgcHJvamVjdCBm
aWxlcy4KKworICAgICAgICBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIG90aGVyIHJlZmFjdG9y
aW5nIHdvcms6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTM3NgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6flN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YUltcGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVh
SW1wbDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbXBv
cnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpjbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWEuaC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxT
dG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OnNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2U6On5TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp+U3Rv
cmFnZU5hbWVzcGFjZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oLgorCiAyMDA5LTA3LTA3ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1NTg3KQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEwNSw2ICsyMTA1LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWEuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaCBcCisJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgXAog
CVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VFdmVudC5jcHAgXApAQCAtMjExMyw2ICsyMTE1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgg
XAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgXAorCVdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
CiBlbmRpZiAjIEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZp
c2lvbiA0NTU4NykKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIxLDkgKzEwMjEsMTEgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZp
bGVzIG5lZQogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCisgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCiAgICAgICAgIHN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAogICAgICAgICBzdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3NldD4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDU1ODcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDA4Nyw2ICszMDA4Nywx
NCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTMwMTE5
LDYgKzMwMTI3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9y
YWdlTmFtZXNwYWNlSW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIuY3BwIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA0NTU4NykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzAyLDYgKzQzMDIsMTAgQEAKIAkJQzUx
MDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEwMkQ5MzBGRDlBQTJEMDBG
QUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQzUxMDJFQ0YwRkQ5RUY4
QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VB
cmVhU3luYy5oICovOyB9OwogCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFy
ZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovOyB9Owor
CQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTYwRUU4MTAwNDU0M0Ew
MEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovOyB9OworCQlDNTE2MEVFQjEwMDQ1NDNB
MDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFy
ZWFJbXBsLmggKi87IH07CisJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87
IH07CisJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhC
QzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwogCQlD
NkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEy
ODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0
QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkw
QTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNF
RDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVB
RjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MTM4LDYgKzkxNDIsMTAg
QEAKIAkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRDBGRDlFRjhDMDBGQUZG
MDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVD
RTBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUM1MTYwRUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUlt
cGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFJ
bXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUxNjBFRTkxMDA0NTQzQTAw
QTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdG9yYWdlQXJlYUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU1
RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2
RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDgsOCArOTcx
NiwxMCBAQAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywK
IAkJCQk1MUJFMzdERDBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuY3BwICovLAogCQkJ
CTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oICovLAotCQkJCUM1MTAy
RUNEMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuaCAqLywKKwkJCQlDNTE2MEVF
ODEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLywKKwkJCQlDNTE2MEVF
OTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8sCiAJCQkJQzUxMDJFQ0Uw
RkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8sCisJCQkJQzUxMDJFQ0Qw
RkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovLAogCQkJCTUxRTBCQUJBMERB
NTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3BwICovLAogCQkJCTUxRTBCQUI5MERBNTU0
NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaCAqLywKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBB
OUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywKQEAgLTk3MTcsOCArOTcyNywxMCBAQAogCQkJ
CTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCiAJCQkJQzUwRDBF
ODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAogCQkJCUM1MEQw
RTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCi0JCQkJQzUxMDJE
OTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1NUUz
OEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8sCisJCQkJ
QzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8sCiAJ
CQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8s
CisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
LAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpAQCAtMTY5
MjAsNiArMTY5MzIsOCBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdl
TmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFFRjBGRjk2MTVEMDBDRTAxMzgg
LyogRE9NRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUE2ODQyMjBG
RkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4OTM1LDYgKzE4OTQ5LDggQEAKIAkJCQlDNTBEMEU4MjBG
RjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzdEQUFFRTBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0YUdyaWREYXRhU291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxl
U3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAv
KiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTE2MEVFQTEw
MDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NTU4NykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIyNyArMjgsMjAgQEAK
IAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlN0b3JhZ2VFdmVudC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgotI2luY2x1
ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNpbmNs
dWRlICJTdG9yYWdlQXJlYUltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VU
eXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gc3luY01hbmFnZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShz
dG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5jTWFuYWdlcikpOwotfQotCi1TdG9yYWdlQXJlYTo6U3Rv
cmFnZUFyZWEoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKLSAgICA6IG1fc3Rv
cmFnZVR5cGUoc3RvcmFnZVR5cGUpCi0gICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKLSAg
ICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKLSAgICAsIG1fc3RvcmFnZVN5
bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93
bihmYWxzZSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNlbHNlCisgICAgcmV0dXJuIFN0b3Jh
Z2VBcmVhSW1wbDo6Y3JlYXRlKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKTsKICNl
bmRpZgotewotICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKLSAgICBBU1NFUlQobV9zdG9y
YWdlTWFwKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGVyZSdzIG5vIGJhY2tpbmcgc3RvcmFnZSBm
b3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRo
YXQgb2YgcHJpdmF0ZSBicm93c2luZywKLSAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQu
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4OTQKLSAgICBpZiAo
bV9zdG9yYWdlU3luY01hbmFnZXIpIHsKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMgPSBTdG9y
YWdlQXJlYVN5bmM6OmNyZWF0ZShtX3N0b3JhZ2VTeW5jTWFuYWdlciwgdGhpcyk7Ci0gICAgICAg
IEFTU0VSVChtX3N0b3JhZ2VBcmVhU3luYyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VB
cmVhKG9yaWdpbiwgdGhpcykpOwotfQotCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCi0gICAgOiBtX3N0b3JhZ2VUeXBl
KGFyZWEtPm1fc3RvcmFnZVR5cGUpCi0gICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKLSAg
ICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCi0gICAgLCBtX3N0b3JhZ2VTeW5j
TWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKLSNpZm5kZWYgTkRFQlVHCi0gICAg
LCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQotI2VuZGlmCi17Ci0gICAgQVNTRVJU
KG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwotICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKLX0KLQotdW5zaWduZWQgU3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVybiBtX3N0b3JhZ2VN
YXAtPmxlbmd0aCgpOwotfQotCi1TdHJpbmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIAotICAgIFN0cmluZyBrZXk7
Ci0gICAgCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmtleShpbmRleCwga2V5KSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQot
ICAgICAgICAKLSAgICByZXR1cm4ga2V5OwotfQotCi1TdHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0
ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIAotICAgIHJldHVybiBtX3N0
b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJU
KCF2YWx1ZS5pc051bGwoKSk7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAg
Ci0gICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSkgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBGb3IgTG9jYWxTdG9yYWdlIHdoZXJlIGEgZGlzayBx
dW90YSB3aWxsIGJlIGVuZm9yY2VkLCBoZXJlIGlzIHdoZXJlIHdlIG5lZWQgdG8gZG8gcXVvdGEg
Y2hlY2tpbmcuCi0gICAgLy8gICAgICAgIElmIHdlIGRlY2lkZSB0byBlbmZvcmNlIGEgbWVtb3J5
IHF1b3RhIGZvciBTZXNzaW9uU3RvcmFnZSwgdGhpcyBpcyB3aGVyZSB3ZSdkIGRvIHRoYXQsIGFs
c28uCi0gICAgLy8gaWYgKDxvdmVyIHF1b3RhPikgewotICAgIC8vICAgICBlYyA9IFFVT1RBX0VY
Q0VFREVEX0VSUjsKLSAgICAvLyAgICAgcmV0dXJuOwotICAgIC8vIH0KLSAgICAKLSAgICBTdHJp
bmcgb2xkVmFsdWU7ICAgCi0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFn
ZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7Ci0gICAgCi0gICAgaWYgKG5ld01h
cCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKLQotICAgIC8vIE9u
bHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0dWFsbHkgY2hhbmdlZAotICAg
IGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgewotICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
Ci0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXks
IHZhbHVlKTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFs
dWUsIGZyYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAgaWYgKGZyYW1l
LT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBu
ZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Ci0gICAgaWYg
KG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKLQotICAg
IC8vIE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0dWFsbHkgcmVtb3Zl
ZAotICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZUFy
ZWFTeW5jKQotICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5
bmMoa2V5LCBTdHJpbmcoKSk7Ci0gICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xk
VmFsdWUsIFN0cmluZygpLCBmcmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFN0b3JhZ2VBcmVhOjpj
bGVhcihGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIAotICAgIGlmIChmcmFtZS0+cGFnZSgpLT5z
ZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUoKTsKLSAgICAKLSAgICBp
ZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZUNsZWFyKCk7Ci0gICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBT
dHJpbmcoKSwgZnJhbWUpOwotfQotCi1ib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+
Y29udGFpbnMoa2V5KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6aW1wb3J0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7Ci0gICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJdGVtKGtleSwgdmFsdWUpOwotfQotCi12
b2lkIFN0b3JhZ2VBcmVhOjpjbG9zZSgpCi17Ci0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQot
ICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBtX2lzU2h1dGRvd24gPSB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgU3Rv
cmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2
ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCitTdG9yYWdlQXJlYTo6flN0b3JhZ2VB
cmVhKCkKIHsKLSAgICAvLyBXZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9t
IGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZy
YW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQotICAgIC8vIG9mIGFueSBnaXZlbiBwYWdl
IGluIHRoZSBncm91cCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgotICAgIFZlY3Rv
cjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOwotCi0gICAgLy8gRklYTUU6IFdoZW4gY2FuIHRoaXMg
b2NjdXI/Ci0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFw
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9u
U3RvcmFnZSkgewotICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgotICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkK
LSAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChT
dG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNv
dXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+c2Vzc2lvblN0
b3JhZ2UoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5
IHBhZ2UuCi0gICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3Vw
KCkucGFnZXMoKTsKLSAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHBhZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAg
ICAgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFt
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3Bh
dGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VF
dmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5k
b2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2lu
ZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7Ci0gICAgfSAgICAgICAgCiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NTU4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw0MiArNTMsMTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
U3RvcmFnZUFyZWE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBjcmVhdGUoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4g
Y29weShTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYSgpID0g
MDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjb3B5KFNlY3VyaXR5
T3JpZ2luKikgPSAwOwogCiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBBUEkKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXkodW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGdldEl0
ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFt
ZSogc291cmNlRnJhbWUpOwotICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJj
ZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1l
KiBzb3VyY2VGcmFtZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25z
dCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpID0gMDsKIAotICAgICAgICBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0g
ICAgICAgIC8vIENvdWxkIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCi0gICAg
ICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIHsgcmV0dXJuIG1f
c2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgU3RvcmFn
ZUFyZWEoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3lu
Y01hbmFnZXI+KTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdl
QXJlYSopOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKSBjb25zdDsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwotCi0gICAgICAgIFN0b3JhZ2VUeXBlIG1fc3RvcmFn
ZVR5cGU7Ci0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsK
LSAgICAgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKLQotICAgICAgICBSZWZQ
dHI8U3RvcmFnZUFyZWFTeW5jPiBtX3N0b3JhZ2VBcmVhU3luYzsKLSAgICAgICAgUmVmUHRyPFN0
b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdlU3luY01hbmFnZXI7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIGJvb2wgbV9pc1NodXRkb3duOwotI2VuZGlmCisgICAgICAgIHZpcnR1YWwgYm9v
bCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKSA9IDA7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDQ1NTg3KQkoZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOjQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGUoU3RvcmFnZVR5cGUgc3Rv
cmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNN
YW5hZ2VyPiBzeW5jTWFuYWdlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VB
cmVhKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7Cit9CisKK1N0b3JhZ2VBcmVh
OjpTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorICAgIDog
bV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2lu
KQorICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZSgpKQorICAgICwgbV9zdG9y
YWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pc1No
dXRkb3duKGZhbHNlKQorI2VuZGlmCit7CisgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOwor
ICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOworCisgICAgLy8gRklYTUU6IElmIHRoZXJlJ3Mgbm8g
YmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBkZWZhdWx0IFdlYktpdCBiZWhh
dmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAorICAgIC8vIG5vdCBzaWxl
bnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTg5NAorICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFuYWdlcikgeworICAgICAgICBtX3N0b3Jh
Z2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKG1fc3RvcmFnZVN5bmNNYW5hZ2Vy
LCB0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFTeW5jKTsKKyAgICB9Cit9CisK
K1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjb3B5KFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCB0aGlzKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9yYWdlQXJlYSogYXJlYSkKKyAg
ICA6IG1fc3RvcmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlP
cmlnaW4ob3JpZ2luKQorICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAg
ICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lm
bmRlZiBOREVCVUcKKyAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5k
aWYKK3sKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNTRVJUKG1fc3RvcmFn
ZU1hcCk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworfQorCit1bnNpZ25lZCBTdG9yYWdl
QXJlYTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJlYTo6
a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAg
CisgICAgU3RyaW5nIGtleTsKKyAgICAKKyAgICBpZiAoIW1fc3RvcmFnZU1hcC0+a2V5KGluZGV4
LCBrZXkpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBrZXk7Cit9CisKK1N0cmluZyBT
dG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAg
CisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOworfQorCit2b2lkIFN0b3Jh
Z2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKKyAgICBibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSB7CisgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEZvciBMb2NhbFN0b3Jh
Z2Ugd2hlcmUgYSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5mb3JjZWQsIGhlcmUgaXMgd2hlcmUgd2Ug
bmVlZCB0byBkbyBxdW90YSBjaGVja2luZy4KKyAgICAvLyAgICAgICAgSWYgd2UgZGVjaWRlIHRv
IGVuZm9yY2UgYSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Npb25TdG9yYWdlLCB0aGlzIGlzIHdoZXJl
IHdlJ2QgZG8gdGhhdCwgYWxzby4KKyAgICAvLyBpZiAoPG92ZXIgcXVvdGE+KSB7CisgICAgLy8g
ICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOworICAgIC8vICAgICByZXR1cm47CisgICAgLy8g
fQorICAgIAorICAgIFN0cmluZyBvbGRWYWx1ZTsgICAKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4g
bmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlKTsKKyAg
ICAKKyAgICBpZiAobmV3TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFz
ZSgpOworCisgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1
YWxseSBjaGFuZ2VkCisgICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7CisgICAgICAgIGlmICht
X3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOworICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChr
ZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJl
YTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQoreworICAgIEFT
U0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAg
ICAKKyAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgUmVm
UHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9s
ZFZhbHVlKTsKKyAgICBpZiAobmV3TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAu
cmVsZWFzZSgpOworCisgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdh
cyBhY3R1YWxseSByZW1vdmVkCisgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAg
ICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIGZyYW1lKTsKKyAgICB9Cit9CisKK3Zv
aWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYg
KGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0
ZSgpOworICAgIAorICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJp
bmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBmcmFtZSk7Cit9CisKK2Jvb2wgU3RvcmFnZUFyZWE6
OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAoreworICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICByZXR1
cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpp
bXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9z
dG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFs
U3luYygpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisjZW5k
aWYKK30KKwordm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29u
c3QKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYTo6
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKK3sKKyAg
ICAvLyBXZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2Ug
dG8gYSB2ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11
dGF0ZSB0aGUgZnJhbWUgdHJlZQorICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91
cCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgorICAgIFZlY3RvcjxSZWZQdHI8RnJh
bWU+ID4gZnJhbWVzOworCisgICAgLy8gRklYTUU6IFdoZW4gY2FuIHRoaXMgb2NjdXI/CisgICAg
UGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgewor
ICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAgICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAg
ICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1
ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5k
b21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+c2Vzc2lvblN0b3JhZ2UoKSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCisgICAg
ICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsK
KyAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgp
OworICAgICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRy
YXZlcnNlTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZl
bnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBv
bGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgp
LCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2Fs
U3RvcmFnZSgpKSk7CisgICAgfSAgICAgICAgCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShE
T01fU1RPUkFHRSkKKwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlz
aW9uIDQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAK
ICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKQEAgLTQzLDEyICs0MywxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVh
dGUoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKK1Bhc3NSZWZQdHI8U3RvcmFn
ZUFyZWE+IFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3lu
Y01hbmFnZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShzdG9yYWdl
VHlwZSwgb3JpZ2luLCBzeW5jTWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZUFyZWFJbXBsKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7CiB9CiAKLVN0
b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2Vy
KQorU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKK3sKK30KKworU3RvcmFnZUFy
ZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdl
cikKICAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3Jp
Z2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKQEAg
LTY4LDEzICs3MiwxMyBAQCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU3RvcmFnZVR5cGUgc3Rv
CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y29weShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFy
ZWFJbXBsOjpjb3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCB0
aGlzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwob3JpZ2luLCB0
aGlzKSk7CiB9CiAKLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBTdG9yYWdlQXJlYSogYXJlYSkKK1N0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBs
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFN0b3JhZ2VBcmVhSW1wbCogYXJlYSkKICAgICA6IG1f
c3RvcmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKICAgICAsIG1fc2VjdXJpdHlPcmlnaW4o
b3JpZ2luKQogICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKQEAgLTg4LDEz
ICs5MiwxMyBAQCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qCiAgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwogfQogCi11bnNpZ25lZCBTdG9yYWdlQXJlYTo6bGVuZ3Ro
KCkgY29uc3QKK3Vuc2lnbmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3Ro
KCk7CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK1N0cmluZyBTdG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTA5LDcgKzExMyw3IEBA
IFN0cmluZyBTdG9yYWdlQXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCAKICAgICByZXR1cm4ga2V5
OwogfQogCi1TdHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNv
bnN0CitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdAogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKQEAgLTExNyw3ICsxMjEsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0
ZW0oY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwog
fQogCi12b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQordm9pZCBTdG9y
YWdlQXJlYUltcGw6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwpAQCAtMTQ5LDcgKzE1Myw3
IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiAKICAgICB9CiB9CiAK
LXZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5
LCBGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTcwLDcgKzE3NCw3IEBAIHZvaWQgU3RvcmFnZUFy
ZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6
OmNsZWFyKEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpOwpAQCAtMTg1LDcgKzE4OSw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFy
KEZyYW1lKiBmcmFtZSkKICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5n
KCksIFN0cmluZygpLCBmcmFtZSk7CiB9CiAKLWJvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNv
bnN0IFN0cmluZyYga2V5KSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNv
bnN0IFN0cmluZyYga2V5KSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKQEAgLTE5MywxMyArMTk3LDE4IEBAIGJvb2wg
U3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbV9zdG9yYWdl
TWFwLT5jb250YWlucyhrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjppbXBvcnRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRl
bShrZXksIHZhbHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQorU2VjdXJpdHlP
cmlnaW4qIFN0b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmlnaW4oKQoreworICAgIHJldHVybiBt
X3NlY3VyaXR5T3JpZ2luLmdldCgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2Uo
KQogewogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5
bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7CkBAIC0yMDksMTMgKzIxOCwxMyBAQCB2b2lkIFN0b3Jh
Z2VBcmVhOjpjbG9zZSgpCiAjZW5kaWYKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCkgY29uc3QKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKSBjb25zdAogewogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAg
ICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogfQog
Ci12b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUq
IHNvdXJjZUZyYW1lKQordm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBjb3B5
IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNlIHNl
bmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRyZWUK
ICAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBwYWdl
IGdyb3VwIGl0c2VsZi4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9u
IDQ1NTg3KQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaDo0NTU4NykKKysrIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU3RvcmFnZUFyZWFfaAorI2RlZmluZSBTdG9yYWdlQXJlYV9oCisKKyNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAi
U3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQYWdlOworICAgIGNsYXNz
IFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKKyAgICBjbGFzcyBT
dG9yYWdlTWFwOworICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKKyAgICB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOworICAgIGVudW0gU3RvcmFnZVR5cGUgeyBMb2NhbFN0b3JhZ2UsIFNl
c3Npb25TdG9yYWdlIH07CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPFN0b3JhZ2VBcmVhPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbios
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAgICAvLyBUaGUgSFRNTDUg
RE9NIFN0b3JhZ2UgQVBJCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAg
ICBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7Cisg
ICAgICAgIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAg
dm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYywgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdm9pZCByZW1vdmVJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2b2lk
IGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7CisKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25z
dCBTdHJpbmcmIGtleSkgY29uc3Q7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAv
LyBDb3VsZCBiZSBjYWxsZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgorICAgICAgICB2b2lk
IGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAg
ICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJldHVybiBtX3NlY3VyaXR5
T3JpZ2luLmdldCgpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0b3JhZ2VBcmVhKFN0
b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2Vy
Pik7CisgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgU3RvcmFnZUFyZWEqKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJh
bWUqIHNvdXJjZUZyYW1lKTsKKworICAgICAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwor
ICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7CisKKyAgICAgICAgUmVmUHRyPFN0b3Jh
Z2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3lu
Y01hbmFnZXI+IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBib29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3Jh
Z2VBcmVhX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDQ1NTg3
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1OCArMjMsNDAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU3RvcmFn
ZUFyZWFfaAotI2RlZmluZSBTdG9yYWdlQXJlYV9oCisjaWZuZGVmIFN0b3JhZ2VBcmVhSW1wbF9o
CisjZGVmaW5lIFN0b3JhZ2VBcmVhSW1wbF9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAK
LSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
Ci0jaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgot
I2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIFBhZ2U7
Ci0gICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwot
ICAgIGNsYXNzIFN0b3JhZ2VNYXA7Ci0gICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwotICAg
IHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0gICAgZW51bSBTdG9yYWdlVHlwZSB7IExvY2Fs
U3RvcmFnZSwgU2Vzc2lvblN0b3JhZ2UgfTsKLQotICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZUFyZWE+IHsKKyAgICBjbGFzcyBTdG9yYWdlQXJl
YUltcGwgOiBwdWJsaWMgU3RvcmFnZUFyZWEgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmln
aW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBQYXNzUmVmUHRy
PFN0b3JhZ2VBcmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgflN0
b3JhZ2VBcmVhSW1wbCgpOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+
IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3Jh
Z2UgQVBJCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcg
a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7Ci0gICAgICAgIFN0
cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYywgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0
IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2b2lkIGNsZWFyKEZy
YW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0
cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSog
c291cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFy
KEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJp
bmcmIGtleSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCBi
b29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNsb3NlKCk7CiAKICAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3Jv
dW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKCkgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVk
OgotICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0
eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbigpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3Jh
Z2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7
CisgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhSW1w
bCopOworCiAgICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CiAK
ICAgICAgICAgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJj
ZUZyYW1lKTsKQEAgLTk1LDQgKzc3LDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZW5kaWYg
Ly8gRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jZW5kaWYgLy8gU3RvcmFnZUFyZWFfaAorI2VuZGlm
IC8vIFN0b3JhZ2VBcmVhSW1wbF9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cAkocmV2aXNpb24gNDU1ODcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgi
CiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDEsMTIgKzQxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEluc3RlYWQsIHF1ZXVl
IHVwIGEgYmF0Y2ggb2YgaXRlbXMgdG8gc3luYyBhbmQgYWN0dWFsbHkgZG8gdGhlIHN5bmMgYXQg
dGhlIGZvbGxvd2luZyBpbnRlcnZhbC4KIHN0YXRpYyBjb25zdCBkb3VibGUgU3RvcmFnZVN5bmNJ
bnRlcnZhbCA9IDEuMDsKIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IFN0b3JhZ2VBcmVh
U3luYzo6Y3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01h
bmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKQorUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYVN5bmM+IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJ
bXBsPiBzdG9yYWdlQXJlYSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVh
U3luYyhzdG9yYWdlU3luY01hbmFnZXIsIHN0b3JhZ2VBcmVhKSk7CiB9CiAKLVN0b3JhZ2VBcmVh
U3luYzo6U3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9y
YWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKQorU3Rv
cmFnZUFyZWFTeW5jOjpTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3Jh
Z2VBcmVhKQogICAgIDogbV9zeW5jVGltZXIodGhpcywgJlN0b3JhZ2VBcmVhU3luYzo6c3luY1Rp
bWVyRmlyZWQpCiAgICAgLCBtX2l0ZW1zQ2xlYXJlZChmYWxzZSkKICAgICAsIG1fZmluYWxTeW5j
U2NoZWR1bGVkKGZhbHNlKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkocmV2aXNp
b24gNDU1ODcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEZyYW1lOwotICAgIGNsYXNzIFN0b3JhZ2VBcmVhOyAgICAKKyAgICBjbGFzcyBTdG9yYWdlQXJl
YUltcGw7CiAgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIAogICAgIGNsYXNzIFN0
b3JhZ2VBcmVhU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VBcmVhU3luYz4gewpAQCAt
NDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH5TdG9yYWdlQXJlYVN5
bmMoKTsKICNlbmRpZgogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3lu
Yz4gY3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFn
ZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBjcmVhdGUoUGFzc1JlZlB0cjxTdG9yYWdlU3lu
Y01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+
IHN0b3JhZ2VBcmVhKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMo
KTsKICAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKQEAgLTU1
LDkgKzU1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNjaGVkdWxlQ2xl
YXIoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RvcmFnZUFyZWFTeW5jKFBh
c3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgU3RvcmFnZUFyZWFTeW5jKFBh
c3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSk7CiAKLSAgICAgICAgCiAgICAgICAgIHZv
aWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAK
ICAgICAgICAgVGltZXI8U3RvcmFnZUFyZWFTeW5jPiBtX3N5bmNUaW1lcjsgICAgICAgIApAQCAt
NjYsNyArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBib29s
IG1fZmluYWxTeW5jU2NoZWR1bGVkOwogCi0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gbV9z
dG9yYWdlQXJlYTsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gbV9zdG9yYWdlQXJl
YTsKICAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zeW5jTWFuYWdlcjsKIAog
ICAgICAgICAvLyBUaGUgZGF0YWJhc2UgaGFuZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBh
bmQgdXNlZCBvbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiA0NTU4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAyICsyNiwzMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIAotI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIgogCi0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdG9yYWdlTmFt
ZXNwYWNlKj4gTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOwotCi1zdGF0aWMgTG9jYWxTdG9yYWdl
TmFtZXNwYWNlTWFwJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwLCBsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2VNYXAsICgpKTsKLSAgICByZXR1cm4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOwotfQotCiBQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgY29uc3QgU3RyaW5nIGxvb2t1
cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7Ci0gICAgTG9jYWxTdG9y
YWdlTmFtZXNwYWNlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgp
LmZpbmQobG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCgpLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzdG9yYWdlTmFt
ZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2UoTG9jYWxTdG9yYWdlLCBsb29r
dXBQYXRoKSk7Ci0gICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnNldChsb29rdXBQ
YXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1l
c3BhY2UucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiBpdC0+c2Vjb25kOworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisjZWxzZQorICAgIHJl
dHVybiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgpOwor
I2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFj
ZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RvcmFnZU5hbWVzcGFjZShTZXNzaW9uU3RvcmFnZSwgU3RyaW5nKCkpKTsKLX0KLQotU3RvcmFn
ZU5hbWVzcGFjZTo6U3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAs
IG1fcGF0aChwYXRoLmNvcHkoKSkgIC8vIEZJWE1FOiBJcyB0aGUgLmNvcHkgbmVjZXNzYXJ5Pwot
ICAgICwgbV9zeW5jTWFuYWdlcigwKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93
bihmYWxzZSkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorI2Vsc2UKKyAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKCk7CiAjZW5kaWYKLXsKLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0
b3JhZ2UgJiYgIW1fcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3luY01hbmFnZXIgPSBTdG9y
YWdlU3luY01hbmFnZXI6OmNyZWF0ZShtX3BhdGgpOwogfQogCiBTdG9yYWdlTmFtZXNwYWNlOjp+
U3RvcmFnZU5hbWVzcGFjZSgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkgewotICAgICAgICBBU1NFUlQobG9j
YWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0gICAgICAgIGxv
Y2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnJlbW92ZShtX3BhdGgpOwotICAgIH0KLX0KLQotUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpjb3B5KCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLQot
ICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcg
U3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VUeXBlLCBtX3BhdGgpKTsKLQotICAgIFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAo
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBhcmVhQ29weSA9IGkt
PnNlY29uZC0+Y29weShpLT5maXJzdC5nZXQoKSk7Ci0gICAgICAgIG5ld05hbWVzcGFjZS0+bV9z
dG9yYWdlQXJlYU1hcC5zZXQoaS0+Zmlyc3QsIGFyZWFDb3B5LnJlbGVhc2UoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7Ci0KLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwotICAgIGlm
IChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCi0gICAgICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0KLSAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VB
cmVhOjpjcmVhdGUobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKLSAgICBt
X3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKLSAgICByZXR1cm4gc3Rv
cmFnZUFyZWEucmVsZWFzZSgpOwotfQotCi12b2lkIFN0b3JhZ2VOYW1lc3BhY2U6OmNsb3NlKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKLQotICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFw
LmVuZCgpOwotICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNs
b3NlKCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKLSNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmgJKHJldmlzaW9uIDQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMzAgKzQxLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxT
dG9yYWdlTmFtZXNwYWNlPiB7CiAgICAgcHVibGljOgotICAgICAgICB+U3RvcmFnZU5hbWVzcGFj
ZSgpOwotCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCi0g
ICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2lu
Kik7Ci0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOwotICAgICAg
ICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTdG9yYWdlTmFtZXNwYWNl
KFN0b3JhZ2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0
eU9yaWdpbkhhc2g+IFN0b3JhZ2VBcmVhTWFwOwotICAgICAgICBTdG9yYWdlQXJlYU1hcCBtX3N0
b3JhZ2VBcmVhTWFwOwotCi0gICAgICAgIFN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7Ci0KLSAg
ICAgICAgLy8gT25seSB1c2VkIGlmIG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlIGFuZCB0
aGUgcGF0aCB3YXMgbm90ICIiIGluIG91ciBjb25zdHJ1Y3Rvci4KLSAgICAgICAgU3RyaW5nIG1f
cGF0aDsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zeW5jTWFuYWdlcjsK
LQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBtX2lzU2h1dGRvd247Ci0jZW5kaWYKKyAg
ICAgICAgdmlydHVhbCB+U3RvcmFnZU5hbWVzcGFjZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopID0gMDsK
KyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAJKHJldmlzaW9uIDQ1NTg3KQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZS5jcHA6NDU1ODcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VOYW1lc3BhY2UuaCIKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBTdG9yYWdlTmFtZXNwYWNlKj4gTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFw
OworCitzdGF0aWMgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwJiBsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2VNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTG9jYWxTdG9yYWdlTmFtZXNwYWNl
TWFwLCBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsICgpKTsKKyAgICByZXR1cm4gbG9jYWxTdG9y
YWdlTmFtZXNwYWNlTWFwOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3Jh
Z2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgY29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIi
KSA6IHBhdGg7CisgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOjppdGVyYXRvciBpdCA9IGxv
Y2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYgKGl0ID09
IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBzdG9yYWdlTmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1l
c3BhY2UoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2FsU3RvcmFnZU5h
bWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVsZWFzZSgpOworICAgIH0KKworICAgIHJl
dHVybiBpdC0+c2Vjb25kOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3Jh
Z2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2UoU2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7Cit9
CisKK1N0b3JhZ2VOYW1lc3BhY2U6OlN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5
cGUpCisgICAgLCBtX3BhdGgocGF0aC5jb3B5KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5l
Y2Vzc2FyeT8KKyAgICAsIG1fc3luY01hbmFnZXIoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBt
X2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKK3sKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBM
b2NhbFN0b3JhZ2UgJiYgIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIG1fc3luY01hbmFnZXIg
PSBTdG9yYWdlU3luY01hbmFnZXI6OmNyZWF0ZShtX3BhdGgpOworfQorCitTdG9yYWdlTmFtZXNw
YWNlOjp+U3RvcmFnZU5hbWVzcGFjZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkgeworICAgICAgICBBU1NF
UlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7CisgICAg
ICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnJlbW92ZShtX3BhdGgpOworICAgIH0KK30K
KworUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpjb3B5KCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKKworICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJl
ZihuZXcgU3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VUeXBlLCBtX3BhdGgpKTsKKworICAgIFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAg
IGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBhcmVhQ29w
eSA9IGktPnNlY29uZC0+Y29weShpLT5maXJzdC5nZXQoKSk7CisgICAgICAgIG5ld05hbWVzcGFj
ZS0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+Zmlyc3QsIGFyZWFDb3B5LnJlbGVhc2UoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
IW1faXNTaHV0ZG93bik7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwor
ICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAg
ICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CisKKyAgICBzdG9yYWdlQXJlYSA9IFN0
b3JhZ2VBcmVhOjpjcmVhdGUobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsK
KyAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1
cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2U6OmNs
b3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNv
bmQtPmNsb3NlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9pc1NodXRkb3duID0gdHJ1ZTsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RE9NX1NUT1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAJKHJldmlzaW9uIDQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIApAQCAtNDAs
MTIgKzQwLDEyIEBAIHN0YXRpYyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3QKICAg
ICByZXR1cm4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOwogfQogCi1QYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25z
dCBTdHJpbmcmIHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIGNvbnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikg
OiBwYXRoOwogICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOwogICAgIGlmIChpdCA9PSBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5lbmQoKSkgewotICAgICAgICBSZWZQdHI8U3RvcmFn
ZU5hbWVzcGFjZT4gc3RvcmFnZU5hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNw
YWNlKExvY2FsU3RvcmFnZSwgbG9va3VwUGF0aCkpOworICAgICAgICBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZT4gc3RvcmFnZU5hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNl
SW1wbChMb2NhbFN0b3JhZ2UsIGxvb2t1cFBhdGgpKTsKICAgICAgICAgbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIHN0b3JhZ2VOYW1lc3BhY2UuZ2V0KCkpOwogICAg
ICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CiAgICAgfQpAQCAtNTMsMTIg
KzUzLDEyIEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWUKICAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9y
YWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpCitQYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKFNlc3Npb25T
dG9yYWdlLCBTdHJpbmcoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVz
cGFjZUltcGwoU2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7CiB9CiAKLVN0b3JhZ2VOYW1lc3Bh
Y2U6OlN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK1N0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9zdG9yYWdl
VHlwZShzdG9yYWdlVHlwZSkKICAgICAsIG1fcGF0aChwYXRoLmNvcHkoKSkgIC8vIEZJWE1FOiBJ
cyB0aGUgLmNvcHkgbmVjZXNzYXJ5PwogICAgICwgbV9zeW5jTWFuYWdlcigwKQpAQCAtNzAsNyAr
NzAsNyBAQCBTdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNlKFN0b3JhCiAgICAgICAg
IG1fc3luY01hbmFnZXIgPSBTdG9yYWdlU3luY01hbmFnZXI6OmNyZWF0ZShtX3BhdGgpOwogfQog
Ci1TdG9yYWdlTmFtZXNwYWNlOjp+U3RvcmFnZU5hbWVzcGFjZSgpCitTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6flN0b3JhZ2VOYW1lc3BhY2VJbXBsKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCkBAIC04MCwxMiArODAsMTIgQEAgU3RvcmFnZU5hbWVzcGFjZTo6flN0b3JhZ2VOYW1l
c3BhY2UoKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdl
TmFtZXNwYWNlOjpjb3B5KCkKK1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5h
bWVzcGFjZUltcGw6OmNvcHkoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwogCi0gICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG5l
d05hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKG1fc3RvcmFnZVR5cGUs
IG1fcGF0aCkpOworICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiBuZXdOYW1lc3BhY2UgPSBuZXcg
U3RvcmFnZU5hbWVzcGFjZUltcGwobV9zdG9yYWdlVHlwZSwgbV9wYXRoKTsKIAogICAgIFN0b3Jh
Z2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZv
ciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7
IGkgIT0gZW5kOyArK2kpIHsKQEAgLTkzLDEwICs5MywxMCBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IFN0b3JhZ2VOYW1lCiAgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJl
YU1hcC5zZXQoaS0+Zmlyc3QsIGFyZWFDb3B5LnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ld05hbWVz
cGFjZSk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2U6OnN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdl
TmFtZXNwYWNlCiAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBT
dG9yYWdlTmFtZXNwYWNlOjpjbG9zZSgpCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9z
ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkocmV2aXNp
b24gNDU1ODcpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmg6NDU1ODcp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlX2gKKyNkZWZpbmUgU3RvcmFnZU5hbWVz
cGFjZV9oCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkhhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFn
ZXI7CisKKyAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8U3Rv
cmFnZU5hbWVzcGFjZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgflN0b3JhZ2VOYW1lc3BhY2Uo
KTsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsKKworICAg
ICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiop
OworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKTsKKyAgICAgICAg
dm9pZCBjbG9zZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFjZShT
dG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPFN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlP
cmlnaW5IYXNoPiBTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgU3RvcmFnZUFyZWFNYXAgbV9zdG9y
YWdlQXJlYU1hcDsKKworICAgICAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworCisgICAg
ICAgIC8vIE9ubHkgdXNlZCBpZiBtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSBhbmQgdGhl
IHBhdGggd2FzIG5vdCAiIiBpbiBvdXIgY29uc3RydWN0b3IuCisgICAgICAgIFN0cmluZyBtX3Bh
dGg7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGJvb2wgbV9pc1NodXRkb3duOworI2VuZGlmCisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjZW5kaWYgLy8gU3RvcmFnZU5hbWVzcGFjZV9oCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaAkocmV2aXNpb24gNDU1ODcpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzUgKzIzLDI3
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU3RvcmFnZU5hbWVzcGFjZV9oCi0j
ZGVmaW5lIFN0b3JhZ2VOYW1lc3BhY2VfaAorI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlSW1wbF9o
CisjZGVmaW5lIFN0b3JhZ2VOYW1lc3BhY2VJbXBsX2gKIAogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKIAotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBTdG9yYWdlQXJlYTsKLSAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFn
ZXI7Ci0KLSAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8U3Rv
cmFnZU5hbWVzcGFjZT4geworICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2VJbXBsIDogcHVibGlj
IFN0b3JhZ2VOYW1lc3BhY2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgflN0b3JhZ2VOYW1lc3Bh
Y2UoKTsKLQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsKIAot
ICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
biopOwotICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoKTsKLSAgICAg
ICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1wbCgp
OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNw
YWNlPiBjb3B5KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgU3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXRoKTsKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU3RvcmFnZUFy
ZWFNYXA7CiAgICAgICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7CkBAIC03MSw0
ICs2Myw0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RP
UkFHRSkKIAotI2VuZGlmIC8vIFN0b3JhZ2VOYW1lc3BhY2VfaAorI2VuZGlmIC8vIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsX2gK
</data>
<flag name="review"
          id="16879"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32470</attachid>
            <date>2009-07-08 13:25:48 -0700</date>
            <delta_ts>2009-07-08 16:27:59 -0700</delta_ts>
            <desc>v2</desc>
            <filename>v2.patch</filename>
            <type>text/plain</type>
            <size>63970</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDctMDggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgU3RvcmFnZUFyZWEgYW5kIFN0b3JhZ2VOYW1lc3BhY2UgaW50byBhbiBpbnRlcmZhY2Ug
YW5kIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcwNzIKKworICAgICAgICBJIG5lZWQgdG8gc3BsaXQgU3RvcmFnZU5hbWVz
cGFjZSBhbmQgU3RvcmFnZUFyZWEgaW50byBhbiBpbnRlcmZhY2UgYW5kCisgICAgICAgIGltcGxl
bWVudGF0aW9uLiAgSW4gYSBsYXRlciBwYXRjaCwgSSdsbCBpbXBsZW1lbnQgYSBwcm94eSBpbnRl
cmZhY2UKKyAgICAgICAgdGhhdCdsbCBydW4gaW5zaWRlIHRoZSBDaHJvbWl1bSByZW5kZXJlciBw
cm9jZXNzLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgZml4IHRoZSBhbHBoYWJldGljYWwgb3Jk
ZXJpbmcgb2YgZmlsZXMgSSByZWNlbnRseSBhZGRlZAorICAgICAgICBpbiB0aGUgcHJvamVjdCBm
aWxlcy4KKworICAgICAgICBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIG90aGVyIHJlZmFjdG9y
aW5nIHdvcms6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTM3NgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6flN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YUltcGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVh
SW1wbDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbXBv
cnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpjbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWEuaC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxT
dG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U6OnNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2U6On5TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp+U3Rv
cmFnZU5hbWVzcGFjZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oLgorCiAyMDA5LTA3LTA4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXg6IEFkZCBt
aXNzaW5nICNpbmNsdWRlcyBmb3IgV2luZG93cyAoY1VSTCkgYnVpbGQuCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDQ1NjMxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMjEwNSw2ICsyMTA1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5jcHAgXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAgXApAQCAtMjEx
Myw2ICsyMTE1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU1hcC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAgXAogCVdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTmFtZXNwYWNlSW1wbC5jcHAgXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAjIEVORCBFTkFCTEVfRE9N
X1NUT1JBR0UKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTYzMSkKKysrIFdlYkNvcmUv
V2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDkgKzEwMjEsMTEgQEAg
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2UuY3BwCiAgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKICAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlRXZlbnQuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAK
KyAgICAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKICAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAK
ICAgICA8L3NldD4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gNDU2MzEpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDA4Nyw2ICszMDA4NywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1w
bC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTMwMTE5LDYgKzMwMTI3LDE0IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFn
ZVxTdG9yYWdlU3luY01hbmFnZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTYzMSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MzAyLDYgKzQzMDIsMTAgQEAKIAkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8q
IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCAqLzsgfTsKIAkJQzUxMDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVh
U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUx
MDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovOyB9OwogCQlDNTEw
MkVEMDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRUNFMEZEOUVGOEMwMEZBRkYw
NCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovOyB9OworCQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NF
RTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MTYwRUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUlt
cGwuY3BwICovOyB9OworCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2
MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi87IH07CisJCUM1NUUz
OEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2
QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IH07CisJCUM1NUUzOEMwMTAwNDBENUQw
MEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIg
LyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgKi87IH07CkBAIC05MTM4LDYgKzkxNDIsMTAgQEAKIAkJQzUxMDJEOTMwRkQ5QUEyRDAw
RkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRTBGRDlFRjhDMDBGQUZGMDQgLyogU3Rv
cmFnZUFyZWFTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
b3JhZ2VBcmVhU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MTYwRUU4
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8q
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1
NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcw
QTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDgsOCArOTcxNiwxMCBAQAogCQkJCTUxRTNGOUQxMERB
MDVENzEwMDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKIAkJCQk1MUJFMzdERDBEQUVFMDBFMDAx
MDg1RkMgLyogU3RvcmFnZUFyZWEuY3BwICovLAogCQkJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVG
QyAvKiBTdG9yYWdlQXJlYS5oICovLAotCQkJCUM1MTAyRUNEMEZEOUVGOEMwMEZBRkYwNCAvKiBT
dG9yYWdlQXJlYVN5bmMuaCAqLywKKwkJCQlDNTE2MEVFODEwMDQ1NDNBMDBBN0NFRTIgLyogU3Rv
cmFnZUFyZWFJbXBsLmNwcCAqLywKKwkJCQlDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3Rv
cmFnZUFyZWFJbXBsLmggKi8sCiAJCQkJQzUxMDJFQ0UwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3Jh
Z2VBcmVhU3luYy5jcHAgKi8sCisJCQkJQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3Jh
Z2VBcmVhU3luYy5oICovLAogCQkJCTUxRTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdl
RXZlbnQuY3BwICovLAogCQkJCTUxRTBCQUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZl
bnQuaCAqLywKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50Lmlk
bCAqLywKQEAgLTk3MTcsOCArOTcyNywxMCBAQAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQx
NyAvKiBTdG9yYWdlTWFwLmggKi8sCiAJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0
b3JhZ2VOYW1lc3BhY2UuY3BwICovLAogCQkJCUM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBT
dG9yYWdlTmFtZXNwYWNlLmggKi8sCi0JCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8sCisJCQkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8sCiAJCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFG
RjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAw
RkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRo
ID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpAQCAtMTY5MjAsNiArMTY5MzIsOCBAQAogCQkJCUM1
MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzdEQUFFRjBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0YUdyaWREYXRhU291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRl
RmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTE2MEVFQjEw
MDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4
OTM1LDYgKzE4OTQ5LDggQEAKIAkJCQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFn
ZU5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdEQUFFRTBGRjk2MTVEMDBDRTAx
MzggLyogRE9NRGF0YUdyaWREYXRhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QTY4
NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFn
ZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3Bw
CShyZXZpc2lvbiA0NTYzMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIyOSArMjYsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3Ig
IkNocm9taXVtIHNob3VsZCBub3QgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5l
IGl0cyBvd24gdmVyc2lvbiBvZiB0aGVzZSBmYWN0b3JpZXMgdGhhdCBuYXZpZ2F0ZSB0aGUgbXVs
dGktcHJvY2VzcyBib3VuZHJ5LiIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
Ci0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVh
OjpjcmVhdGUoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5h
Z2VyKSk7Ci19Ci0KLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSBzdG9yYWdl
VHlwZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IHN5bmNNYW5hZ2VyKQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAs
IG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6
OmNyZWF0ZSgpKQotICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCi0jaWZu
ZGVmIE5ERUJVRwotICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgQVNT
RVJUKG1fc2VjdXJpdHlPcmlnaW4pOwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwotCi0gICAg
Ly8gRklYTUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2Us
IHRoZSBkZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJy
b3dzaW5nLAotICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAotICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFu
YWdlcikgewotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3Jl
YXRlKG1fc3RvcmFnZVN5bmNNYW5hZ2VyLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFn
ZUFyZWFTeW5jKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VB
cmVhOjpjb3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1
dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCB0aGlz
KSk7Ci19Ci0KLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBTdG9yYWdlQXJlYSogYXJlYSkKLSAgICA6IG1fc3RvcmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdl
VHlwZSkKLSAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFw
KGFyZWEtPm1fc3RvcmFnZU1hcCkKLSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1f
c3RvcmFnZVN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihh
cmVhLT5tX2lzU2h1dGRvd24pCi0jZW5kaWYKLXsKLSAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdp
bik7Ci0gICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotfQotCi11bnNpZ25lZCBTdG9yYWdlQXJlYTo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7Ci0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Ci19
Ci0KLVN0cmluZyBTdG9yYWdlQXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAgU3RyaW5nIGtleTsKLSAgICAKLSAgICBpZiAo
IW1fc3RvcmFnZU1hcC0+a2V5KGluZGV4LCBrZXkpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJl
dHVybiBrZXk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRl
bShrZXkpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQot
ewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgp
KTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBpZiAoZnJhbWUt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSB7Ci0gICAgICAg
IGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IEZvciBMb2NhbFN0b3JhZ2Ugd2hlcmUgYSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5m
b3JjZWQsIGhlcmUgaXMgd2hlcmUgd2UgbmVlZCB0byBkbyBxdW90YSBjaGVja2luZy4KLSAgICAv
LyAgICAgICAgSWYgd2UgZGVjaWRlIHRvIGVuZm9yY2UgYSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Np
b25TdG9yYWdlLCB0aGlzIGlzIHdoZXJlIHdlJ2QgZG8gdGhhdCwgYWxzby4KLSAgICAvLyBpZiAo
PG92ZXIgcXVvdGE+KSB7Ci0gICAgLy8gICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAg
IC8vICAgICByZXR1cm47Ci0gICAgLy8gfQotICAgIAotICAgIFN0cmluZyBvbGRWYWx1ZTsgICAK
LSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtl
eSwgdmFsdWUsIG9sZFZhbHVlKTsKLSAgICAKLSAgICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0
b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwotCi0gICAgLy8gT25seSBub3RpZnkgdGhlIGNs
aWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9
IHZhbHVlKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAgICAgIG1f
c3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOwotICAgICAg
ICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwotICAg
IH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwg
RnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGlu
Z3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
dHJpbmcgb2xkVmFsdWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFn
ZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKLSAgICBpZiAobmV3TWFwKQotICAgICAg
ICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwotCi0gICAgLy8gT25seSBub3RpZnkg
dGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSByZW1vdmVkCi0gICAgaWYgKCFvbGRW
YWx1ZS5pc051bGwoKSkgewotICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygp
KTsKLSAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCks
IGZyYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7Ci0gICAgCi0gICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZh
dGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fc3RvcmFn
ZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOwotICAgIAotICAgIGlmIChtX3N0b3JhZ2VBcmVh
U3luYykKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICBk
aXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBmcmFtZSk7
Ci19Ci0KLWJvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dAotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKLSAgICAKLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOwot
fQotCi12b2lkIFN0b3JhZ2VBcmVhOjppbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBtX3N0
b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWE6
OmNsb3NlKCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFn
ZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIG1f
aXNTaHV0ZG93biA9IHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
Ci0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsK
LX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZy
YW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50
IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZl
bnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQotICAgIC8vIG9mIGFu
eSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxm
LgotICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOwotCi0gICAgLy8gRklYTUU6IFdo
ZW4gY2FuIHRoaXMgb2NjdXI/Ci0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdG9yYWdlVHlw
ZSA9PSBTZXNzaW9uU3RvcmFnZSkgewotICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91
ciBwYWdlLgotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0
eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hX
aW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50
LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3co
KS0+c2Vzc2lvblN0b3JhZ2UoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNlbmQgZXZl
bnRzIHRvIGV2ZXJ5IHBhZ2UuCi0gICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9
IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKLSAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9y
aWdpbigpKSkKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3Vt
ZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5k
b2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1l
c1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7Ci0gICAgfSAgICAgICAgCisgICAg
cmV0dXJuIFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNN
YW5hZ2VyKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ1NjMx
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDQ1ICs1MCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKICAgICBlbnVtIFN0b3JhZ2VUeXBlIHsgTG9jYWxTdG9yYWdlLCBTZXNzaW9uU3Rv
cmFnZSB9OwogCisgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIENocm9taXVt
IHNpbmNlIHRoZXNlIGFjdGlvbnMgbmVlZCB0byBiZSBwcm94aWVkIGJldHdlZW4gcHJvY2Vzc2Vz
LgogICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFn
ZUFyZWE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBjcmVhdGUoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+KTsKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gY29weShT
ZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYSgpIHsgfQorICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4q
KSA9IDA7CiAKICAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQotICAgICAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0OwotICAgICAgICBTdHJpbmcgZ2V0SXRlbShjb25z
dCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJh
bWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUp
OwotCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAg
ICAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBi
YWNrZ3JvdW5kIHRocmVhZC4KLSAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKCkgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQotCi0gICAgcHJv
dGVjdGVkOgotICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4q
LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBTdG9yYWdlQXJlYShT
ZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAg
ICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBtX3NlY3VyaXR5T3JpZ2luOwotICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9y
YWdlTWFwOwotCi0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFyZWFT
eW5jOwotICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFu
YWdlcjsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBtX2lzU2h1dGRvd247Ci0jZW5k
aWYKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihGcmFtZSogc291cmNlRnJhbWUpID0gMDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGNsb3NlKCkgPSAwOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZpc2lvbiA0NTU4NykJKGZyb20gV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcDo0NTU4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VU
eXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gc3luY01hbmFnZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShz
dG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5jTWFuYWdlcikpOworfQorCitTdG9yYWdlQXJlYTo6U3Rv
cmFnZUFyZWEoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IG1fc3Rv
cmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKKyAg
ICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKKyAgICAsIG1fc3RvcmFnZVN5
bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faXNTaHV0ZG93
bihmYWxzZSkKKyNlbmRpZgoreworICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBB
U1NFUlQobV9zdG9yYWdlTWFwKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGVyZSdzIG5vIGJhY2tp
bmcgc3RvcmFnZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Ig
c2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKKyAgICAvLyBub3Qgc2lsZW50bHkg
aWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4
OTQKKyAgICBpZiAobV9zdG9yYWdlU3luY01hbmFnZXIpIHsKKyAgICAgICAgbV9zdG9yYWdlQXJl
YVN5bmMgPSBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShtX3N0b3JhZ2VTeW5jTWFuYWdlciwgdGhp
cyk7CisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhU3luYyk7CisgICAgfQorfQorCitQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0b3JhZ2VBcmVhKG9yaWdpbiwgdGhpcykpOworfQorCitTdG9yYWdlQXJlYTo6U3RvcmFn
ZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCisgICAgOiBt
X3N0b3JhZ2VUeXBlKGFyZWEtPm1fc3RvcmFnZVR5cGUpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2lu
KG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCisgICAgLCBt
X3N0b3JhZ2VTeW5jTWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdlcikKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3duKQorI2VuZGlmCit7
CisgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOworICAgIEFTU0VSVChtX3N0b3JhZ2VNYXAp
OworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKK30KKwordW5zaWduZWQgU3RvcmFnZUFyZWE6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVy
biBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOworfQorCitTdHJpbmcgU3RvcmFnZUFyZWE6OmtleSh1
bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAorICAg
IFN0cmluZyBrZXk7CisgICAgCisgICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmtleShpbmRleCwga2V5
KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4ga2V5OworfQorCitTdHJpbmcgU3RvcmFn
ZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAorICAg
IHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKK30KKwordm9pZCBTdG9yYWdlQXJl
YTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7
CisgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBs
ZXRlKCk7CisgICAgCisgICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKSkgeworICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBGb3IgTG9jYWxTdG9yYWdlIHdo
ZXJlIGEgZGlzayBxdW90YSB3aWxsIGJlIGVuZm9yY2VkLCBoZXJlIGlzIHdoZXJlIHdlIG5lZWQg
dG8gZG8gcXVvdGEgY2hlY2tpbmcuCisgICAgLy8gICAgICAgIElmIHdlIGRlY2lkZSB0byBlbmZv
cmNlIGEgbWVtb3J5IHF1b3RhIGZvciBTZXNzaW9uU3RvcmFnZSwgdGhpcyBpcyB3aGVyZSB3ZSdk
IGRvIHRoYXQsIGFsc28uCisgICAgLy8gaWYgKDxvdmVyIHF1b3RhPikgeworICAgIC8vICAgICBl
YyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAgICAvLyAgICAgcmV0dXJuOworICAgIC8vIH0KKyAg
ICAKKyAgICBTdHJpbmcgb2xkVmFsdWU7ICAgCisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01h
cCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSk7CisgICAgCisg
ICAgaWYgKG5ld01hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsK
KworICAgIC8vIE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0dWFsbHkg
Y2hhbmdlZAorICAgIGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICBpZiAobV9zdG9y
YWdlQXJlYVN5bmMpCisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVt
Rm9yU3luYyhrZXksIHZhbHVlKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBv
bGRWYWx1ZSwgdmFsdWUsIGZyYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OnJl
bW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQo
IW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisg
ICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIFJlZlB0cjxT
dG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1
ZSk7CisgICAgaWYgKG5ld01hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVh
c2UoKTsKKworICAgIC8vIE9ubHkgbm90aWZ5IHRoZSBjbGllbnQgaWYgYW4gaXRlbSB3YXMgYWN0
dWFsbHkgcmVtb3ZlZAorICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYg
KG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVk
dWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2
ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFN0
b3JhZ2VBcmVhOjpjbGVhcihGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAorICAgIGlmIChmcmFt
ZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUoKTsK
KyAgICAKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5zY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCks
IFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOworfQorCitib29sIFN0b3JhZ2VBcmVhOjpjb250
YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgcmV0dXJuIG1f
c3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKK30KKwordm9pZCBTdG9yYWdlQXJlYTo6aW1wb3J0
SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CisgICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJdGVtKGtleSwgdmFs
dWUpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpjbG9zZSgpCit7CisgICAgaWYgKG1fc3RvcmFn
ZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVGaW5hbFN5bmMo
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1dGRvd24gPSB0cnVlOworI2VuZGlmCit9
CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7CisgICAgLy8g
V2UgbmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEg
dmVjdG9yIHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUg
dGhlIGZyYW1lIHRyZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3Ig
bXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+
IGZyYW1lczsKKworICAgIC8vIEZJWE1FOiBXaGVuIGNhbiB0aGlzIG9jY3VyPworICAgIFBhZ2Uq
IHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAg
ICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KKyAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAg
ZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmcmFt
ZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2lu
ZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgorICAgICAgICBj
b25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CisgICAg
ICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAg
ICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
KCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAgICAg
IGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0
b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFs
dWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291
cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5sb2NhbFN0b3Jh
Z2UoKSkpOworICAgIH0gICAgICAgIAorfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCisKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZpc2lvbiA0
NTU4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KICAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogCkBAIC00MywxMiArNDMsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y3JlYXRlKFN0
b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5h
Z2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEoc3RvcmFnZVR5cGUs
IG9yaWdpbiwgc3luY01hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VB
cmVhSW1wbChzdG9yYWdlVHlwZSwgb3JpZ2luLCBzeW5jTWFuYWdlcikpOwogfQogCi1TdG9yYWdl
QXJlYTo6U3RvcmFnZUFyZWEoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKK1N0
b3JhZ2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCgpCit7Cit9CisKK1N0b3JhZ2VBcmVhSW1w
bDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiAg
ICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihv
cmlnaW4pCiAgICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCkBAIC02OCwx
MyArNzIsMTMgQEAgU3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFN0b3JhZ2VUeXBlIHN0bwogICAg
IH0KIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNvcHkoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhSW1w
bDo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhKG9yaWdpbiwgdGhpcykp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKG9yaWdpbiwgdGhpcykp
OwogfQogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwg
U3RvcmFnZUFyZWEqIGFyZWEpCitTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBTdG9yYWdlQXJlYUltcGwqIGFyZWEpCiAgICAgOiBtX3N0b3Jh
Z2VUeXBlKGFyZWEtPm1fc3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdp
bikKICAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCkBAIC04OCwxMyArOTIs
MTMgQEAgU3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKgogICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKIH0KIAotdW5zaWduZWQgU3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNv
bnN0Cit1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwog
fQogCi1TdHJpbmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
ICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKQEAgLTEwOSw3ICsxMTMsNyBAQCBTdHJp
bmcgU3RvcmFnZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgCiAgICAgcmV0dXJuIGtleTsKIH0K
IAotU3RyaW5nIFN0b3JhZ2VBcmVhOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAor
U3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QK
IHsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBs
ZXRlKCk7CkBAIC0xMTcsNyArMTIxLDcgQEAgU3RyaW5nIFN0b3JhZ2VBcmVhOjpnZXRJdGVtKGNv
bnN0IFN0cmluZwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKIH0KIAot
dm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKQEAgLTE0OSw3ICsxNTMsNyBAQCB2
b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYgCiAgICAgfQogfQogCi12b2lk
IFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJhbWUp
Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJh
bWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKTsKQEAgLTE3MCw3ICsxNzQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpy
ZW1vdmVJdGVtKGNvbnN0IFN0cmluCiAgICAgfQogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjpjbGVh
cihGcmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1l
KQogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKQEAgLTE4NSw3ICsxODksNyBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcihGcmFt
ZSogZnJhbWUpCiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBT
dHJpbmcoKSwgZnJhbWUpOwogfQogCi1ib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKK2Jvb2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CkBAIC0xOTMsMTMgKzE5NywxOCBAQCBib29sIFN0b3Jh
Z2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+
Y29udGFpbnMoa2V5KTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6aW1wb3J0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpp
bXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5
LCB2YWx1ZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKK1NlY3VyaXR5T3JpZ2lu
KiBTdG9yYWdlQXJlYUltcGw6OnNlY3VyaXR5T3JpZ2luKCkKK3sKKyAgICByZXR1cm4gbV9zZWN1
cml0eU9yaWdpbi5nZXQoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKIHsK
ICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5z
Y2hlZHVsZUZpbmFsU3luYygpOwpAQCAtMjA5LDEzICsyMTgsMTMgQEAgdm9pZCBTdG9yYWdlQXJl
YTo6Y2xvc2UoKQogI2VuZGlmCiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpIGNvbnN0Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAg
IG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIH0KIAotdm9p
ZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewogICAgIC8vIFdlIG5lZWQgdG8gY29weSBhbGwg
cmVsZXZhbnQgZnJhbWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3RvciBzaW5jZSBzZW5kaW5n
IHRoZSBldmVudCB0byBvbmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCiAgICAg
Ly8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0aGUgcGFnZSBncm91
cCBpdHNlbGYuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA0NTU4
NykJKGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmg6NDU1ODcpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFN0b3JhZ2VBcmVhX2gKKyNkZWZpbmUgU3RvcmFnZUFyZWFfaAorCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VNYXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKworI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBTZWN1
cml0eU9yaWdpbjsKKyAgICBjbGFzcyBTdG9yYWdlQXJlYVN5bmM7CisgICAgY2xhc3MgU3RvcmFn
ZU1hcDsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CisgICAgdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKKyAgICBlbnVtIFN0b3JhZ2VUeXBlIHsgTG9jYWxTdG9yYWdlLCBTZXNzaW9u
U3RvcmFnZSB9OworCisgICAgY2xhc3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVNo
YXJlZDxTdG9yYWdlQXJlYT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IGNyZWF0ZShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBT
dG9yYWdlIEFQSQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0OworICAgICAg
ICBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CisgICAgICAgIHZvaWQg
c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlSXRlbShj
b25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdm9pZCBjbGVh
cihGcmFtZSogc291cmNlRnJhbWUpOworCisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3Ry
aW5nJiBrZXkpIGNvbnN0OworICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAgICAgLy8gQ291
bGQgYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICAgICAgdm9pZCBpbXBv
cnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdp
bi5nZXQoKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBTdG9yYWdlQXJlYShTdG9yYWdl
VHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwor
ICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0
OworCisgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBz
b3VyY2VGcmFtZSk7CisKKyAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKKyAgICAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOworICAgICAgICBSZWZQ
dHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOworCisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJl
YVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5jOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYm9v
bCBtX2lzU2h1dGRvd247CisjZW5kaWYKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBTdG9yYWdlQXJl
YV9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCShyZXZpc2lvbiA0NTU4NykKKysr
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NTggKzIzLDQwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFN0b3JhZ2VBcmVh
X2gKLSNkZWZpbmUgU3RvcmFnZUFyZWFfaAorI2lmbmRlZiBTdG9yYWdlQXJlYUltcGxfaAorI2Rl
ZmluZSBTdG9yYWdlQXJlYUltcGxfaAogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2lu
Y2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNs
dWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQYWdlOwotICAg
IGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKLSAgICBj
bGFzcyBTdG9yYWdlTWFwOwotICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKLSAgICB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotICAgIGVudW0gU3RvcmFnZVR5cGUgeyBMb2NhbFN0b3Jh
Z2UsIFNlc3Npb25TdG9yYWdlIH07Ci0KLSAgICBjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBU
aHJlYWRTYWZlU2hhcmVkPFN0b3JhZ2VBcmVhPiB7CisgICAgY2xhc3MgU3RvcmFnZUFyZWFJbXBs
IDogcHVibGljIFN0b3JhZ2VBcmVhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBjcmVhdGUoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwg
UGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYT4gY29weShTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIH5TdG9yYWdl
QXJlYUltcGwoKTsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjb3B5
KFNlY3VyaXR5T3JpZ2luKik7CiAKICAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQ
SQotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleSh1
bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0OwotICAgICAgICBTdHJpbmcg
Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBjbGVhcihGcmFtZSog
c291cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIHNvdXJj
ZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFt
ZSogc291cmNlRnJhbWUpOwogCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0OwotICAgICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBj
b250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpOwogCiAgICAgICAgIC8vIENvdWxkIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0
aHJlYWQuCiAgICAgICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgU3RvcmFnZUFyZWEoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qLCBTdG9yYWdlQXJlYSopOworICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlw
ZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOworICAg
ICAgICBTdG9yYWdlQXJlYUltcGwoU2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdlQXJlYUltcGwqKTsK
KwogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAg
ICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7CkBAIC05NSw0ICs3Nyw0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2VuZGlmIC8vIEVO
QUJMRShET01fU1RPUkFHRSkKIAotI2VuZGlmIC8vIFN0b3JhZ2VBcmVhX2gKKyNlbmRpZiAvLyBT
dG9yYWdlQXJlYUltcGxfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJl
dmlzaW9uIDQ1NjMxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2lu
Y2x1ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQx
LDEyICs0MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBJbnN0ZWFkLCBxdWV1ZSB1cCBh
IGJhdGNoIG9mIGl0ZW1zIHRvIHN5bmMgYW5kIGFjdHVhbGx5IGRvIHRoZSBzeW5jIGF0IHRoZSBm
b2xsb3dpbmcgaW50ZXJ2YWwuCiBzdGF0aWMgY29uc3QgZG91YmxlIFN0b3JhZ2VTeW5jSW50ZXJ2
YWwgPSAxLjA7CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBTdG9yYWdlQXJlYVN5bmM6
OmNyZWF0ZShQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2Vy
LCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSkKK1Bhc3NSZWZQdHI8U3RvcmFn
ZUFyZWFTeW5jPiBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShQYXNzUmVmUHRyPFN0b3JhZ2VTeW5j
TWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4g
c3RvcmFnZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYVN5bmMo
c3RvcmFnZVN5bmNNYW5hZ2VyLCBzdG9yYWdlQXJlYSkpOwogfQogCi1TdG9yYWdlQXJlYVN5bmM6
OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5
bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSkKK1N0b3JhZ2VB
cmVhU3luYzo6U3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBz
dG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJl
YSkKICAgICA6IG1fc3luY1RpbWVyKHRoaXMsICZTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZp
cmVkKQogICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCiAgICAgLCBtX2ZpbmFsU3luY1NjaGVk
dWxlZChmYWxzZSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHJldmlzaW9uIDQ1
NjMxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGcmFt
ZTsKLSAgICBjbGFzcyBTdG9yYWdlQXJlYTsgICAgCisgICAgY2xhc3MgU3RvcmFnZUFyZWFJbXBs
OwogICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICAKICAgICBjbGFzcyBTdG9yYWdl
QXJlYVN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlQXJlYVN5bmM+IHsKQEAgLTQ2LDcg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB+U3RvcmFnZUFyZWFTeW5jKCk7
CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IGNy
ZWF0ZShQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gY3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9y
YWdlQXJlYSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNjaGVkdWxlRmluYWxTeW5jKCk7CiAg
ICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CkBAIC01NSw5ICs1
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZUNsZWFyKCk7
CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSk7CisgICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEpOwogCi0gICAgICAgIAogICAgICAgICB2b2lkIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogCiAgICAg
ICAgIFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4gbV9zeW5jVGltZXI7ICAgICAgICAKQEAgLTY2LDcg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgYm9vbCBtX2Zp
bmFsU3luY1NjaGVkdWxlZDsKIAotICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IG1fc3RvcmFn
ZUFyZWE7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IG1fc3RvcmFnZUFyZWE7CiAg
ICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CiAKICAgICAg
ICAgLy8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBvcGVuZWQgYW5kIHVz
ZWQgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmNwcAkocmV2aXNpb24gNDU2MzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwMiArMjYsMjQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAKLSNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAi
U3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorI2Vycm9yICJDaHJvbWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhpcyBm
aWxlIGFuZCBpbnN0ZWFkIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YgdGhlc2UgZmFjdG9yaWVz
IHRoYXQgbmF2aWdhdGUgdGhlIG11bHRpLXByb2Nlc3MgYm91bmRyeS4iCisjZW5kaWYKIAotdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcDsKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLXN0YXRpYyBMb2NhbFN0b3JhZ2VO
YW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsIGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7Ci19CituYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5h
bWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAg
ICBjb25zdCBTdHJpbmcgbG9va3VwUGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDog
cGF0aDsKLSAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxT
dG9yYWdlTmFtZXNwYWNlTWFwKCkuZmluZChsb29rdXBQYXRoKTsKLSAgICBpZiAoaXQgPT0gbG9j
YWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFj
ZShMb2NhbFN0b3JhZ2UsIGxvb2t1cFBhdGgpKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNw
YWNlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIHN0b3JhZ2VOYW1lc3BhY2UuZ2V0KCkpOwotICAgICAg
ICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UocGF0aCk7CiB9CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3Rv
cmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShTZXNzaW9uU3RvcmFnZSwgU3RyaW5nKCkpKTsK
LX0KLQotU3RvcmFnZU5hbWVzcGFjZTo6U3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdl
VHlwZSkKLSAgICAsIG1fcGF0aChwYXRoLmNvcHkoKSkgIC8vIEZJWE1FOiBJcyB0aGUgLmNvcHkg
bmVjZXNzYXJ5PwotICAgICwgbV9zeW5jTWFuYWdlcigwKQotI2lmbmRlZiBOREVCVUcKLSAgICAs
IG1faXNTaHV0ZG93bihmYWxzZSkKLSNlbmRpZgotewotICAgIGlmIChtX3N0b3JhZ2VUeXBlID09
IExvY2FsU3RvcmFnZSAmJiAhbV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zeW5jTWFuYWdl
ciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7Ci19Ci0KLVN0b3JhZ2VOYW1l
c3BhY2U6On5TdG9yYWdlTmFtZXNwYWNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIEFT
U0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKLSAg
ICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci0gICAgfQot
fQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OmNvcHko
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOwotCi0gICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG5ld05hbWVzcGFjZSA9IGFkb3B0
UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKG1fc3RvcmFnZVR5cGUsIG1fcGF0aCkpOwotCi0gICAg
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0g
ICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IGFyZWFD
b3B5ID0gaS0+c2Vjb25kLT5jb3B5KGktPmZpcnN0LmdldCgpKTsKLSAgICAgICAgbmV3TmFtZXNw
YWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5maXJzdCwgYXJlYUNvcHkucmVsZWFzZSgpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKLQotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7
Ci0gICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKLSAg
ICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLQotICAgIHN0b3JhZ2VBcmVhID0g
U3RvcmFnZUFyZWE6OmNyZWF0ZShtX3N0b3JhZ2VUeXBlLCBvcmlnaW4sIG1fc3luY01hbmFnZXIp
OwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwotICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZU5hbWVzcGFjZTo6
Y2xvc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwotCi0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFn
ZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+Y2xvc2UoKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBtX2lzU2h1dGRvd24gPSB0cnVl
OwotI2VuZGlmCisgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHJldmlzaW9uIDQ1NjMxKQorKysgV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzIgKzM5LDE2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBTdG9y
YWdlU3luY01hbmFnZXI7CiAKKyAgICAvLyBUaGlzIGludGVyZmFjZSBpcyByZXF1aXJlZCBmb3Ig
Q2hyb21pdW0gc2luY2UgdGhlc2UgYWN0aW9ucyBuZWVkIHRvIGJlIHByb3hpZWQgYmV0d2VlbiBw
cm9jZXNzZXMuCiAgICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFN0b3JhZ2VOYW1lc3BhY2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIH5TdG9yYWdlTmFtZXNw
YWNlKCk7Ci0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9j
YWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qKTsKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7Ci0gICAg
ICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0b3JhZ2VOYW1lc3Bh
Y2UoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3Vy
aXR5T3JpZ2luSGFzaD4gU3RvcmFnZUFyZWFNYXA7Ci0gICAgICAgIFN0b3JhZ2VBcmVhTWFwIG1f
c3RvcmFnZUFyZWFNYXA7Ci0KLSAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLQot
ICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5k
IHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3VyIGNvbnN0cnVjdG9yLgotICAgICAgICBTdHJpbmcg
bV9wYXRoOwotICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2Vy
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBib29sIG1faXNTaHV0ZG93bjsKLSNlbmRpZgor
ICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCShyZXZpc2lvbiA0NTU4NykJKGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2UuY3BwOjQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
dG9yYWdlTmFtZXNwYWNlLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cDsKKworc3RhdGljIExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCYgbG9jYWxTdG9yYWdlTmFtZXNw
YWNlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExvY2FsU3RvcmFnZU5hbWVzcGFj
ZU1hcCwgbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwLCAoKSk7CisgICAgcmV0dXJuIGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZU1hcDsKK30KKworUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9y
YWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIGNvbnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygi
IikgOiBwYXRoOworICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDo6aXRlcmF0b3IgaXQgPSBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOworICAgIGlmIChpdCA9
PSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5lbmQoKSkgeworICAgICAgICBSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gc3RvcmFnZU5hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFt
ZXNwYWNlKExvY2FsU3RvcmFnZSwgbG9va3VwUGF0aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VO
YW1lc3BhY2VNYXAoKS5zZXQobG9va3VwUGF0aCwgc3RvcmFnZU5hbWVzcGFjZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKK30KKworUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9y
YWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSkpOwor
fQorCitTdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VU
eXBlKQorICAgICwgbV9wYXRoKHBhdGguY29weSgpKSAgLy8gRklYTUU6IElzIHRoZSAuY29weSBu
ZWNlc3Nhcnk/CisgICAgLCBtX3N5bmNNYW5hZ2VyKDApCisjaWZuZGVmIE5ERUJVRworICAgICwg
bV9pc1NodXRkb3duKGZhbHNlKQorI2VuZGlmCit7CisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0g
TG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0eSgpKQorICAgICAgICBtX3N5bmNNYW5hZ2Vy
ID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKK30KKworU3RvcmFnZU5hbWVz
cGFjZTo6flN0b3JhZ2VOYW1lc3BhY2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgQVNT
RVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMpOworICAg
ICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKKyAgICB9Cit9
CisKK1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6Y29weSgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CisKKyAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbmV3TmFtZXNwYWNlID0gYWRvcHRS
ZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlVHlwZSwgbV9wYXRoKSk7CisKKyAgICBT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAg
ICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdp
bigpOyBpICE9IGVuZDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNv
cHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICBuZXdOYW1lc3Bh
Y2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOwor
ICAgIH0KKworICAgIHJldHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgpOworfQorCitQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOworCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsK
KyAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQorICAg
ICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOworCisgICAgc3RvcmFnZUFyZWEgPSBT
dG9yYWdlQXJlYTo6Y3JlYXRlKG1fc3RvcmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7
CisgICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CisgICAgcmV0
dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKK30KKwordm9pZCBTdG9yYWdlTmFtZXNwYWNlOjpj
bG9zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdl
QXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1f
c3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vj
b25kLT5jbG9zZSgpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1faXNTaHV0ZG93biA9IHRydWU7
CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KERPTV9TVE9SQUdFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCShyZXZpc2lvbiA0NTU4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKQEAgLTQw
LDEyICs0MCwxMiBAQCBzdGF0aWMgTG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwJiBsb2NhbFN0CiAg
ICAgcmV0dXJuIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDsKIH0KIAotUGFzc1JlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29u
c3QgU3RyaW5nJiBwYXRoKQorUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsK
ICAgICBjb25zdCBTdHJpbmcgbG9va3VwUGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIp
IDogcGF0aDsKICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9j
YWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZmluZChsb29rdXBQYXRoKTsKICAgICBpZiAoaXQgPT0g
bG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVz
cGFjZShMb2NhbFN0b3JhZ2UsIGxvb2t1cFBhdGgpKTsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFj
ZUltcGwoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoKSk7CiAgICAgICAgIGxvY2FsU3RvcmFnZU5h
bWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRoLCBzdG9yYWdlTmFtZXNwYWNlLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2UucmVsZWFzZSgpOwogICAgIH0KQEAgLTUzLDEy
ICs1MywxMiBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lCiAgICAg
cmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3Rv
cmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQorUGFzc1JlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShTZXNzaW9u
U3RvcmFnZSwgU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1l
c3BhY2VJbXBsKFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSkpOwogfQogCi1TdG9yYWdlTmFtZXNw
YWNlOjpTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBjb25zdCBTdHJp
bmcmIHBhdGgpCitTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fc3RvcmFn
ZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3BhdGgocGF0aC5jb3B5KCkpICAvLyBGSVhNRTog
SXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KICAgICAsIG1fc3luY01hbmFnZXIoMCkKQEAgLTcwLDcg
KzcwLDcgQEAgU3RvcmFnZU5hbWVzcGFjZTo6U3RvcmFnZU5hbWVzcGFjZShTdG9yYQogICAgICAg
ICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKIH0K
IAotU3RvcmFnZU5hbWVzcGFjZTo6flN0b3JhZ2VOYW1lc3BhY2UoKQorU3RvcmFnZU5hbWVzcGFj
ZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1wbCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIApAQCAtODAsMTIgKzgwLDEyIEBAIFN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFt
ZXNwYWNlKCkKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFn
ZU5hbWVzcGFjZTo6Y29weSgpCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsOjpjb3B5KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKIAotICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBu
ZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VUeXBl
LCBtX3BhdGgpKTsKKyAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbCogbmV3TmFtZXNwYWNlID0gbmV3
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3RvcmFnZVR5cGUsIG1fcGF0aCk7CiAKICAgICBTdG9y
YWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBm
b3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigp
OyBpICE9IGVuZDsgKytpKSB7CkBAIC05MywxMCArOTMsMTAgQEAgUGFzc1JlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBTdG9yYWdlTmFtZQogICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFy
ZWFNYXAuc2V0KGktPmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHJl
dHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdFJlZihuZXdOYW1l
c3BhY2UpOwogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlOjpz
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CkBAIC0xMTAsNyArMTEwLDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFn
ZU5hbWVzcGFjZQogICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQg
U3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xv
c2UoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2lzU2h1
dGRvd24pOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlz
aW9uIDQ1NTg3KQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oOjQ1NTg3
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU3RvcmFnZU5hbWVzcGFjZV9oCisjZGVmaW5lIFN0b3JhZ2VOYW1l
c3BhY2VfaAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW5IYXNoLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKworI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgU3RvcmFnZUFyZWE7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5h
Z2VyOworCisgICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0
b3JhZ2VOYW1lc3BhY2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5TdG9yYWdlTmFtZXNwYWNl
KCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxT
dG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CisKKyAg
ICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
KTsKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CisgICAgICAg
IHZvaWQgY2xvc2UoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2Uo
U3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5
T3JpZ2luSGFzaD4gU3RvcmFnZUFyZWFNYXA7CisgICAgICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3Rv
cmFnZUFyZWFNYXA7CisKKyAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKKworICAg
ICAgICAvLyBPbmx5IHVzZWQgaWYgbV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRo
ZSBwYXRoIHdhcyBub3QgIiIgaW4gb3VyIGNvbnN0cnVjdG9yLgorICAgICAgICBTdHJpbmcgbV9w
YXRoOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOwor
CisjaWZuZGVmIE5ERUJVRworICAgICAgICBib29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgorICAg
IH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RP
UkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VOYW1lc3BhY2VfaApJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlzaW9uIDQ1NTg3KQorKysgV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM1ICsyMywy
NyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFN0b3JhZ2VOYW1lc3BhY2VfaAot
I2RlZmluZSBTdG9yYWdlTmFtZXNwYWNlX2gKKyNpZm5kZWYgU3RvcmFnZU5hbWVzcGFjZUltcGxf
aAorI2RlZmluZSBTdG9yYWdlTmFtZXNwYWNlSW1wbF9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCiAKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0gICAgY2xhc3MgU3RvcmFnZUFyZWE7Ci0gICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5h
Z2VyOwotCi0gICAgY2xhc3MgU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0
b3JhZ2VOYW1lc3BhY2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlSW1wbCA6IHB1Ymxp
YyBTdG9yYWdlTmFtZXNwYWNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIH5TdG9yYWdlTmFtZXNw
YWNlKCk7Ci0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9j
YWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAK
LSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qKTsKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7Ci0gICAg
ICAgIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCB+U3RvcmFnZU5hbWVzcGFjZUltcGwo
KTsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShT
ZWN1cml0eU9yaWdpbiopOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVz
cGFjZT4gY29weSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYg
cGF0aCk7CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBjb25zdCBT
dHJpbmcmIHBhdGgpOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFN0b3JhZ2VB
cmVhTWFwOwogICAgICAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwpAQCAtNzEs
NCArNjMsNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAKLSNlbmRpZiAvLyBTdG9yYWdlTmFtZXNwYWNlX2gKKyNlbmRpZiAvLyBTdG9yYWdl
TmFtZXNwYWNlSW1wbF9oCg==
</data>
<flag name="review"
          id="16901"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32486</attachid>
            <date>2009-07-08 16:27:59 -0700</date>
            <delta_ts>2009-07-08 16:49:23 -0700</delta_ts>
            <desc>Fix build in release mode</desc>
            <filename>v3.patch</filename>
            <type>text/plain</type>
            <size>61720</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDctMDggIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgU3RvcmFnZUFyZWEgYW5kIFN0b3JhZ2VOYW1lc3BhY2UgaW50byBhbiBpbnRlcmZhY2Ug
YW5kIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcwNzIKKworICAgICAgICBJIG5lZWQgdG8gc3BsaXQgU3RvcmFnZU5hbWVz
cGFjZSBhbmQgU3RvcmFnZUFyZWEgaW50byBhbiBpbnRlcmZhY2UgYW5kCisgICAgICAgIGltcGxl
bWVudGF0aW9uLiAgSW4gYSBsYXRlciBwYXRjaCwgSSdsbCBpbXBsZW1lbnQgYSBwcm94eSBpbnRl
cmZhY2UKKyAgICAgICAgdGhhdCdsbCBydW4gaW5zaWRlIHRoZSBDaHJvbWl1bSByZW5kZXJlciBw
cm9jZXNzLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgZml4IHRoZSBhbHBoYWJldGljYWwgb3Jk
ZXJpbmcgb2YgZmlsZXMgSSByZWNlbnRseSBhZGRlZAorICAgICAgICBpbiB0aGUgcHJvamVjdCBm
aWxlcy4KKworICAgICAgICBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIG90aGVyIHJlZmFjdG9y
aW5nIHdvcms6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTM3NgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjcmVh
dGUpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjp+U3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFy
ZWFJbXBsLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJ
bXBsOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjprZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpnZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJ
bXBsOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6aW1wb3J0SXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuaDogQ29waWVkIGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhLmguCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaDoKKyAgICAgICAg
KiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2U6On5TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2Uu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFj
ZUltcGw6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VO
YW1lc3BhY2VJbXBsOjp+U3RvcmFnZU5hbWVzcGFjZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5h
bWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oLgorCiAy
MDA5LTA3LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ1NjMxKQorKysgV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEwNSw2ICsyMTA1LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oIFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWEuaCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgXAorCVdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAgXApAQCAtMjExMyw2ICsyMTE1LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKIAlXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAg
XAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIFwKIAlXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5oCiBlbmRpZiAjIEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJj
ZXMuYmtsCShyZXZpc2lvbiA0NTYzMSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIxLDkgKzEwMjEsMTEgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAog
ICAgICAgICBzdG9yYWdlL1N0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWEu
Y3BwCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAogICAgICAgICBzdG9yYWdl
L1N0b3JhZ2VBcmVhU3luYy5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9y
YWdlTmFtZXNwYWNlSW1wbC5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAogICAg
ICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3NldD4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDU2MzEpCisrKyBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDA4
Nyw2ICszMDA4NywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VB
cmVhSW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTMwMTE5LDYgKzMwMTI3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIu
Y3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTYzMSkKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzAyLDYgKzQzMDIs
MTAgQEAKIAkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEwMkQ5
MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQzUx
MDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0
IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovOyB9OwogCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMu
Y3BwICovOyB9OworCQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTYw
RUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovOyB9OworCQlDNTE2
MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIg
LyogU3RvcmFnZUFyZWFJbXBsLmggKi87IH07CisJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAv
KiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmggKi87IH07CisJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
ICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87
IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZE
NzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87
IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcw
QTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MTM4
LDYgKzkxNDIsMTAgQEAKIAkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdl
U3luY01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkVDRDBG
RDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNTEwMkVDRTBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MTYwRUU4MTAwNDU0M0EwMEE3Q0VFMiAvKiBT
dG9yYWdlQXJlYUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RvcmFnZUFyZWFJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUxNjBF
RTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJE
QiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5
MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZv
cm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk3MDgsOCArOTcxNiwxMCBAQAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAvKiBTdG9y
YWdlLmlkbCAqLywKIAkJCQk1MUJFMzdERDBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEu
Y3BwICovLAogCQkJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oICov
LAotCQkJCUM1MTAyRUNEMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuaCAqLywK
KwkJCQlDNTE2MEVFODEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLywK
KwkJCQlDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8sCiAJ
CQkJQzUxMDJFQ0UwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8sCisJ
CQkJQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovLAogCQkJ
CTUxRTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3BwICovLAogCQkJCTUx
RTBCQUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaCAqLywKIAkJCQk1MUUwQkFC
RDBEQTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywKQEAgLTk3MTcsOCArOTcy
NywxMCBAQAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8s
CiAJCQkJQzUwRDBFODAwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuY3BwICov
LAogCQkJCUM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8s
Ci0JCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
LAorCQkJCUM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgKi8sCisJCQkJQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmggKi8sCiAJCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9y
YWdlOwpAQCAtMTY5MjAsNiArMTY5MzIsOCBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0
NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdEQUFFRjBGRjk2
MTVEMDBDRTAxMzggLyogRE9NRGF0YUdyaWREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3Rv
cmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4OTM1LDYgKzE4OTQ5LDggQEAKIAkJ
CQlDNTBEMEU4MjBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzdEQUFFRTBGRjk2MTVEMDBDRTAxMzggLyogRE9NRGF0YUdyaWREYXRh
U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAv
KiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1NUUzOEMwMTAwNDBE
NUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlDNTE2MEVFQTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NTYzMSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIy
OSArMjYsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5o
IgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjZXJyb3IgIkNocm9taXVtIHNob3VsZCBub3Qg
Y29tcGlsZSB0aGlzIGZpbGUgYW5kIGluc3RlYWQgZGVmaW5lIGl0cyBvd24gdmVyc2lvbiBvZiB0
aGVzZSBmYWN0b3JpZXMgdGhhdCBuYXZpZ2F0ZSB0aGUgbXVsdGktcHJvY2VzcyBib3VuZHJ5LiIK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jaW5jbHVkZSAiRE9NV2luZG93
LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgi
Ci0jaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGUoU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VBcmVhKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7Ci19Ci0KLVN0b3JhZ2VB
cmVhOjpTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQotICAg
IDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3Jp
Z2luKQotICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZSgpKQotICAgICwgbV9z
dG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9p
c1NodXRkb3duKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4p
OwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwotCi0gICAgLy8gRklYTUU6IElmIHRoZXJlJ3Mg
bm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBkZWZhdWx0IFdlYktpdCBi
ZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAotICAgIC8vIG5vdCBz
aWxlbnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTg5NAotICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFuYWdlcikgewotICAgICAgICBtX3N0
b3JhZ2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKG1fc3RvcmFnZVN5bmNNYW5h
Z2VyLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFTeW5jKTsKLSAgICB9Ci19
Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjb3B5KFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCB0aGlzKSk7Ci19Ci0KLVN0b3JhZ2VBcmVh
OjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9yYWdlQXJlYSogYXJlYSkK
LSAgICA6IG1fc3RvcmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKLSAgICAsIG1fc2VjdXJp
dHlPcmlnaW4ob3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkK
LSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQot
I2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCi0j
ZW5kaWYKLXsKLSAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7Ci0gICAgQVNTRVJUKG1fc3Rv
cmFnZU1hcCk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotfQotCi11bnNpZ25lZCBTdG9y
YWdlQXJlYTo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0g
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJl
YTo6a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBB
U1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0g
ICAgCi0gICAgU3RyaW5nIGtleTsKLSAgICAKLSAgICBpZiAoIW1fc3RvcmFnZU1hcC0+a2V5KGlu
ZGV4LCBrZXkpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBrZXk7Ci19Ci0KLVN0cmlu
ZyBTdG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLXsKLSAgICBB
U1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0g
ICAgCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwotfQotCi12b2lkIFN0
b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKLSAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKLSAgICBibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSB7Ci0gICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEZvciBMb2NhbFN0
b3JhZ2Ugd2hlcmUgYSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5mb3JjZWQsIGhlcmUgaXMgd2hlcmUg
d2UgbmVlZCB0byBkbyBxdW90YSBjaGVja2luZy4KLSAgICAvLyAgICAgICAgSWYgd2UgZGVjaWRl
IHRvIGVuZm9yY2UgYSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Npb25TdG9yYWdlLCB0aGlzIGlzIHdo
ZXJlIHdlJ2QgZG8gdGhhdCwgYWxzby4KLSAgICAvLyBpZiAoPG92ZXIgcXVvdGE+KSB7Ci0gICAg
Ly8gICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgIC8vICAgICByZXR1cm47Ci0gICAg
Ly8gfQotICAgIAotICAgIFN0cmluZyBvbGRWYWx1ZTsgICAKLSAgICBSZWZQdHI8U3RvcmFnZU1h
cD4gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlKTsK
LSAgICAKLSAgICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVs
ZWFzZSgpOwotCi0gICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBh
Y3R1YWxseSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7Ci0gICAgICAgIGlm
IChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hl
ZHVsZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOwotICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVu
dChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQotewotICAg
IEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsK
LSAgICAKLSAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAg
UmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXks
IG9sZFZhbHVlKTsKLSAgICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdN
YXAucmVsZWFzZSgpOwotCi0gICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVt
IHdhcyBhY3R1YWxseSByZW1vdmVkCi0gICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgewotICAg
ICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3lu
Yy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKLSAgICAgICAgZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIGZyYW1lKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIW1f
aXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAg
aWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNy
ZWF0ZSgpOwotICAgIAotICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChT
dHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBmcmFtZSk7Ci19Ci0KLWJvb2wgU3RvcmFnZUFy
ZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBy
ZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVh
OjppbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0o
a2V5LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKLXsKLSAgICBpZiAo
bV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZp
bmFsU3luYygpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIG1faXNTaHV0ZG93biA9IHRydWU7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFy
ZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBTdG9yYWdlQXJl
YTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsK
LSAgICAvLyBXZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBh
Z2UgdG8gYSB2ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0
IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQotICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBn
cm91cCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgotICAgIFZlY3RvcjxSZWZQdHI8
RnJhbWU+ID4gZnJhbWVzOwotCi0gICAgLy8gRklYTUU6IFdoZW4gY2FuIHRoaXMgb2NjdXI/Ci0g
ICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkg
ewotICAgICAgICAvLyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgotICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAg
ICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1l
LT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+c2Vzc2lvblN0b3JhZ2UoKSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCi0g
ICAgICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMo
KTsKLSAgICAgICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVu
ZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBh
Z2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAg
ICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93
RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVS
SSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxv
Y2FsU3RvcmFnZSgpKSk7Ci0gICAgfSAgICAgICAgCisgICAgcmV0dXJuIFN0b3JhZ2VBcmVhSW1w
bDo6Y3JlYXRlKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKTsKIH0KIAogfQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ1NjMxKQorKysgV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDQ1ICs1MCwyNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKICAgICBlbnVtIFN0
b3JhZ2VUeXBlIHsgTG9jYWxTdG9yYWdlLCBTZXNzaW9uU3RvcmFnZSB9OwogCisgICAgLy8gVGhp
cyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIENocm9taXVtIHNpbmNlIHRoZXNlIGFjdGlvbnMg
bmVlZCB0byBiZSBwcm94aWVkIGJldHdlZW4gcHJvY2Vzc2VzLgogICAgIGNsYXNzIFN0b3JhZ2VB
cmVhIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZUFyZWE+IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjcmVhdGUoU3RvcmFnZVR5
cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKLSAg
ICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gY29weShTZWN1cml0eU9yaWdpbiopOworICAg
ICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYSgpIHsgfQorICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qKSA9IDA7CiAKICAgICAgICAgLy8g
VGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKLSAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0OwotICAgICAgICBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZv
aWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAg
ICAgICAgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcga2V5KHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNl
RnJhbWUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFt
ZSkgPSAwOwogCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0
OwotICAgICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uo
KSA9IDA7CiAKICAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRo
cmVhZC4KLSAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkg
eyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
biosIFN0b3JhZ2VBcmVhKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdl
RXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgU3RvcmFnZVR5
cGUgbV9zdG9yYWdlVHlwZTsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3Vy
aXR5T3JpZ2luOwotICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOwotCi0g
ICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5jOwotICAgICAg
ICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsKLQotI2lm
bmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBtX2lzU2h1dGRvd247Ci0jZW5kaWYKKyAgICAgICAg
dmlydHVhbCB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpID0gMDsKKyAgICAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSA9IDA7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDQ1NTg3KQkoZnJvbSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOjQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisj
aW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VTeW5jTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8
U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGUoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUs
IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBz
eW5jTWFuYWdlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhKHN0b3Jh
Z2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdl
QXJlYShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFz
c1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorICAgIDogbV9zdG9yYWdl
VHlwZShzdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQorICAgICwg
bV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZSgpKQorICAgICwgbV9zdG9yYWdlU3luY01h
bmFnZXIoc3luY01hbmFnZXIpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pc1NodXRkb3duKGZh
bHNlKQorI2VuZGlmCit7CisgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOworICAgIEFTU0VS
VChtX3N0b3JhZ2VNYXApOworCisgICAgLy8gRklYTUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBz
dG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBkZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91
bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAorICAgIC8vIG5vdCBzaWxlbnRseSBpZ25v
cmluZyBpdC4gIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAor
ICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFuYWdlcikgeworICAgICAgICBtX3N0b3JhZ2VBcmVhU3lu
YyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKG1fc3RvcmFnZVN5bmNNYW5hZ2VyLCB0aGlzKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFTeW5jKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjb3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RvcmFnZUFyZWEob3JpZ2luLCB0aGlzKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJl
YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9yYWdlQXJlYSogYXJlYSkKKyAgICA6IG1fc3Rv
cmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3Jp
Z2luKQorICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAsIG1fc3Rv
cmFnZVN5bmNNYW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVC
VUcKKyAgICAsIG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5kaWYKK3sKKyAg
ICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworfQorCit1bnNpZ25lZCBTdG9yYWdlQXJlYTo6bGVu
Z3RoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgcmV0dXJuIG1f
c3RvcmFnZU1hcC0+bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJlYTo6a2V5KHVuc2ln
bmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgU3Ry
aW5nIGtleTsKKyAgICAKKyAgICBpZiAoIW1fc3RvcmFnZU1hcC0+a2V5KGluZGV4LCBrZXkpKSB7
CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBrZXk7Cit9CisKK1N0cmluZyBTdG9yYWdlQXJl
YTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgcmV0
dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpz
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYywgRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAg
ICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKKyAgICAKKyAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEZvciBMb2NhbFN0b3JhZ2Ugd2hlcmUg
YSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5mb3JjZWQsIGhlcmUgaXMgd2hlcmUgd2UgbmVlZCB0byBk
byBxdW90YSBjaGVja2luZy4KKyAgICAvLyAgICAgICAgSWYgd2UgZGVjaWRlIHRvIGVuZm9yY2Ug
YSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Npb25TdG9yYWdlLCB0aGlzIGlzIHdoZXJlIHdlJ2QgZG8g
dGhhdCwgYWxzby4KKyAgICAvLyBpZiAoPG92ZXIgcXVvdGE+KSB7CisgICAgLy8gICAgIGVjID0g
UVVPVEFfRVhDRUVERURfRVJSOworICAgIC8vICAgICByZXR1cm47CisgICAgLy8gfQorICAgIAor
ICAgIFN0cmluZyBvbGRWYWx1ZTsgICAKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0g
bV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlKTsKKyAgICAKKyAgICBp
ZiAobmV3TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOworCisg
ICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBjaGFu
Z2VkCisgICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7CisgICAgICAgIGlmIChtX3N0b3JhZ2VB
cmVhU3luYykKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JT
eW5jKGtleSwgdmFsdWUpOworICAgICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZh
bHVlLCB2YWx1ZSwgZnJhbWUpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYTo6cmVtb3Zl
SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBp
ZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgUmVmUHRyPFN0b3Jh
Z2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsK
KyAgICBpZiAobmV3TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgp
OworCisgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxs
eSByZW1vdmVkCisgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICBpZiAobV9z
dG9yYWdlQXJlYVN5bmMpCisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJ
dGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQo
a2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIGZyYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFn
ZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7
CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKGZyYW1lLT5w
YWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOworICAg
IAorICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xlYXIoKTsKKyAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3Ry
aW5nKCksIFN0cmluZygpLCBmcmFtZSk7Cit9CisKK2Jvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5z
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5jb250YWlucyhrZXkpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjppbXBvcnRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKKyAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5LCB2YWx1ZSk7
Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJl
YVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwor
CisjaWZuZGVmIE5ERUJVRworICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisjZW5kaWYKK30KKwor
dm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9j
a1VudGlsSW1wb3J0Q29tcGxldGUoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKK3sKKyAgICAvLyBXZSBu
ZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0
b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUg
ZnJhbWUgdHJlZQorICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBtdXRh
dGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgorICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJh
bWVzOworCisgICAgLy8gRklYTUU6IFdoZW4gY2FuIHRoaXMgb2NjdXI/CisgICAgUGFnZSogcGFn
ZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgeworICAgICAgICAv
LyBTZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAgICAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICBmcmFt
ZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZyYW1lc1tp
XS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNl
RnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3co
KSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+c2Vzc2lvblN0b3JhZ2UoKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCisgICAgICAgIGNvbnN0
IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKKyAgICAgICAg
SGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOworICAgICAg
ICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0
KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFn
ZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwg
bmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VG
cmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgp
KSk7CisgICAgfSAgICAgICAgCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFH
RSkKKwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHJldmlzaW9uIDQ1NTg3
KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAKQEAgLTQzLDEyICs0MywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGUoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0
b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShzdG9yYWdlVHlwZSwgb3Jp
Z2luLCBzeW5jTWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJ
bXBsKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7CiB9CiAKLVN0b3JhZ2VBcmVh
OjpTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorU3RvcmFn
ZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKK3sKK30KKworU3RvcmFnZUFyZWFJbXBsOjpT
dG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKICAgICA6
IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdp
bikKICAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKQEAgLTY4LDEzICs3
MiwxMyBAQCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU3RvcmFnZVR5cGUgc3RvCiAgICAgfQog
fQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWFJbXBsOjpj
b3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCB0aGlzKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwob3JpZ2luLCB0aGlzKSk7CiB9
CiAKLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9y
YWdlQXJlYSogYXJlYSkKK1N0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFN0b3JhZ2VBcmVhSW1wbCogYXJlYSkKICAgICA6IG1fc3RvcmFnZVR5
cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKICAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQog
ICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKQEAgLTg4LDEzICs5MiwxMyBA
QCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qCiAgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwogfQogCi11bnNpZ25lZCBTdG9yYWdlQXJlYTo6bGVuZ3RoKCkgY29uc3QK
K3Vuc2lnbmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
IW1faXNTaHV0ZG93bik7CiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7CiB9CiAK
LVN0cmluZyBTdG9yYWdlQXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKK1N0cmluZyBTdG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAg
IGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTA5LDcgKzExMyw3IEBAIFN0cmluZyBT
dG9yYWdlQXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCAKICAgICByZXR1cm4ga2V5OwogfQogCi1T
dHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CitTdHJp
bmcgU3RvcmFnZUFyZWFJbXBsOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewog
ICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKQEAgLTExNyw3ICsxMjEsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3Qg
U3RyaW5nCiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwogfQogCi12b2lk
IFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYUlt
cGw6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwpAQCAtMTQ5LDcgKzE1Myw3IEBAIHZvaWQg
U3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiAKICAgICB9CiB9CiAKLXZvaWQgU3Rv
cmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKK3Zv
aWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpOwpAQCAtMTcwLDcgKzE3NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92
ZUl0ZW0oY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZy
YW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogZnJhbWUpCiB7
CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOwpAQCAtMTg1LDcgKzE4OSw3IEBAIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBm
cmFtZSkKICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmlu
ZygpLCBmcmFtZSk7CiB9CiAKLWJvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5KSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5KSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKTsKQEAgLTE5MywxMyArMTk3LDE4IEBAIGJvb2wgU3RvcmFnZUFy
ZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250
YWlucyhrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjppbXBvcnRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9y
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbShrZXksIHZh
bHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6Y2xvc2UoKQorU2VjdXJpdHlPcmlnaW4qIFN0
b3JhZ2VBcmVhSW1wbDo6c2VjdXJpdHlPcmlnaW4oKQoreworICAgIHJldHVybiBtX3NlY3VyaXR5
T3JpZ2luLmdldCgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2UoKQogewogICAg
IGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVk
dWxlRmluYWxTeW5jKCk7CkBAIC0yMDksMTMgKzIxOCwxMyBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpj
bG9zZSgpCiAjZW5kaWYKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCkgY29uc3QKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKSBjb25zdAogewogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAgICAgbV9z
dG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogfQogCi12b2lkIFN0
b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKQordm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVl
LCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBjb3B5IGFsbCByZWxl
dmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNlIHNlbmRpbmcgdGhl
IGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRyZWUKICAgICAvLyBv
ZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0
c2VsZi4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDQ1NTg3KQko
ZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaDo0NTU4NykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3Rv
cmFnZUFyZWFfaAorI2RlZmluZSBTdG9yYWdlQXJlYV9oCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1h
cC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKKyAgICBjbGFzcyBTdG9yYWdlTWFw
OworICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKKyAgICB0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworICAgIGVudW0gU3RvcmFnZVR5cGUgeyBMb2NhbFN0b3JhZ2UsIFNlc3Npb25TdG9y
YWdlIH07CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PFN0b3JhZ2VBcmVhPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+
IGNvcHkoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3Jh
Z2UgQVBJCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICBTdHJpbmcg
a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7CisgICAgICAgIFN0
cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYywgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0
IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2b2lkIGNsZWFyKEZy
YW1lKiBzb3VyY2VGcmFtZSk7CisKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgY29uc3Q7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBDb3VsZCBi
ZSBjYWxsZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgorICAgICAgICB2b2lkIGltcG9ydEl0
ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdl
dCgpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0b3JhZ2VBcmVhKFN0b3JhZ2VUeXBl
LCBTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAg
ICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgU3RvcmFnZUFyZWEqKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CisK
KyAgICAgICAgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJj
ZUZyYW1lKTsKKworICAgICAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworICAgICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47CisgICAgICAgIFJlZlB0cjxT
dG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7CisKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3lu
Yz4gbV9zdG9yYWdlQXJlYVN5bmM7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+
IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBib29sIG1f
aXNTaHV0ZG93bjsKKyNlbmRpZgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VBcmVhX2gK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDQ1NTg3KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw1OCAr
MjMsNDAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU3RvcmFnZUFyZWFfaAot
I2RlZmluZSBTdG9yYWdlQXJlYV9oCisjaWZuZGVmIFN0b3JhZ2VBcmVhSW1wbF9oCisjZGVmaW5l
IFN0b3JhZ2VBcmVhSW1wbF9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIFBhZ2U7Ci0gICAgY2xh
c3MgU2VjdXJpdHlPcmlnaW47Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwotICAgIGNsYXNz
IFN0b3JhZ2VNYXA7Ci0gICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwotICAgIHR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0gICAgZW51bSBTdG9yYWdlVHlwZSB7IExvY2FsU3RvcmFnZSwg
U2Vzc2lvblN0b3JhZ2UgfTsKLQotICAgIGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVh
ZFNhZmVTaGFyZWQ8U3RvcmFnZUFyZWE+IHsKKyAgICBjbGFzcyBTdG9yYWdlQXJlYUltcGwgOiBw
dWJsaWMgU3RvcmFnZUFyZWEgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IGNyZWF0ZShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKik7CisgICAgICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVh
SW1wbCgpOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNvcHkoU2Vj
dXJpdHlPcmlnaW4qKTsKIAogICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3JhZ2UgQVBJCi0g
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcga2V5KHVuc2ln
bmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBnZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJdGVtKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJh
bWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2b2lkIGNsZWFyKEZyYW1lKiBzb3Vy
Y2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogc291cmNlRnJh
bWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwg
RnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKEZyYW1lKiBz
b3VyY2VGcmFtZSk7CiAKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCk7CiAKICAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVh
ZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgeyBy
ZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBTdG9yYWdlQXJlYShTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0
b3JhZ2VTeW5jTWFuYWdlcj4pOwotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbios
IFN0b3JhZ2VBcmVhKik7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlLCBT
ZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAg
IFN0b3JhZ2VBcmVhSW1wbChTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhSW1wbCopOworCiAg
ICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CiAKICAgICAgICAg
dm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsK
QEAgLTk1LDQgKzc3LDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZW5kaWYgLy8gRU5BQkxF
KERPTV9TVE9SQUdFKQogCi0jZW5kaWYgLy8gU3RvcmFnZUFyZWFfaAorI2VuZGlmIC8vIFN0b3Jh
Z2VBcmVhSW1wbF9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA0
NTYzMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRnJh
bWU7Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWE7ICAgIAorICAgIGNsYXNzIFN0b3JhZ2VBcmVhOwog
ICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICAKICAgICBjbGFzcyBTdG9yYWdlQXJl
YVN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlQXJlYVN5bmM+IHsKQEAgLTU3LDcgKzU3
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VB
cmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2Vy
LCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSk7CiAKLSAgICAgICAgCiAgICAg
ICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7CiAKICAgICAgICAgVGltZXI8U3RvcmFnZUFyZWFTeW5jPiBtX3N5bmNUaW1lcjsgICAgICAg
IApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcAkocmV2aXNpb24gNDU2MzEp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEwMiArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdG9y
YWdlTmFtZXNwYWNlLmgiCiAKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKIAot
bmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2Vycm9yICJDaHJv
bWl1bSBzaG91bGQgbm90IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBpbnN0ZWFkIGRlZmluZSBpdHMg
b3duIHZlcnNpb24gb2YgdGhlc2UgZmFjdG9yaWVzIHRoYXQgbmF2aWdhdGUgdGhlIG11bHRpLXBy
b2Nlc3MgYm91bmRyeS4iCisjZW5kaWYKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFn
ZU5hbWVzcGFjZSo+IExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDsKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAKLXN0YXRpYyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5h
bWVzcGFjZU1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VOYW1l
c3BhY2VNYXAsIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2VNYXA7Ci19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNw
YWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBjb25zdCBTdHJpbmcgbG9va3VwUGF0aCA9
IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKLSAgICBMb2NhbFN0b3JhZ2VOYW1l
c3BhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZmluZChs
b29rdXBQYXRoKTsKLSAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZW5k
KCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2Ug
PSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShMb2NhbFN0b3JhZ2UsIGxvb2t1cFBhdGgp
KTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIHN0
b3JhZ2VOYW1lc3BhY2UuZ2V0KCkpOwotICAgICAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZS5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UocGF0aCk7CiB9CiAKIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFj
ZShTZXNzaW9uU3RvcmFnZSwgU3RyaW5nKCkpKTsKLX0KLQotU3RvcmFnZU5hbWVzcGFjZTo6U3Rv
cmFnZU5hbWVzcGFjZShTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRo
KQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAsIG1fcGF0aChwYXRoLmNv
cHkoKSkgIC8vIEZJWE1FOiBJcyB0aGUgLmNvcHkgbmVjZXNzYXJ5PwotICAgICwgbV9zeW5jTWFu
YWdlcigwKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkKLSNlbmRp
ZgotewotICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSAmJiAhbV9wYXRoLmlz
RW1wdHkoKSkKLSAgICAgICAgbV9zeW5jTWFuYWdlciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3Jl
YXRlKG1fcGF0aCk7Ci19Ci0KLVN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNlKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1fc3RvcmFnZVR5cGUg
PT0gTG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2VN
YXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNl
TWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VOYW1l
c3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OmNvcHkoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotCi0gICAgUmVmUHRyPFN0b3JhZ2VO
YW1lc3BhY2U+IG5ld05hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKG1f
c3RvcmFnZVR5cGUsIG1fcGF0aCkpOwotCi0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAg
ICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IGFyZWFDb3B5ID0gaS0+c2Vjb25kLT5jb3B5KGktPmZp
cnN0LmdldCgpKTsKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChp
LT5maXJzdCwgYXJlYUNvcHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3TmFt
ZXNwYWNlLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5h
bWVzcGFjZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLQotICAgIFJl
ZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7Ci0gICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9z
dG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJl
bGVhc2UoKTsKLQotICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZShtX3N0b3Jh
Z2VUeXBlLCBvcmlnaW4sIG1fc3luY01hbmFnZXIpOwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0
KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwotICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgU3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotCi0gICAgU3RvcmFnZUFy
ZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Y2xvc2UoKTsKLQotI2lmbmRlZiBO
REVCVUcKLSAgICBtX2lzU2h1dGRvd24gPSB0cnVlOwotI2VuZGlmCisgICAgcmV0dXJuIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgJKHJldmlz
aW9uIDQ1NjMxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMzIgKzM5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAKKyAgICAvLyBU
aGlzIGludGVyZmFjZSBpcyByZXF1aXJlZCBmb3IgQ2hyb21pdW0gc2luY2UgdGhlc2UgYWN0aW9u
cyBuZWVkIHRvIGJlIHByb3hpZWQgYmV0d2VlbiBwcm9jZXNzZXMuCiAgICAgY2xhc3MgU3RvcmFn
ZU5hbWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VOYW1lc3BhY2U+IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIH5TdG9yYWdlTmFtZXNwYWNlKCk7Ci0KICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKLSAgICAgICAgUGFzc1JlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU3RvcmFnZUFyZWFN
YXA7Ci0gICAgICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7Ci0KLSAgICAgICAg
U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLQotICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9z
dG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3Vy
IGNvbnN0cnVjdG9yLgotICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICBib29sIG1faXNTaHV0ZG93bjsKLSNlbmRpZgorICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFt
ZXNwYWNlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKSA9IDA7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZpc2lvbiA0NTU4NykJKGZyb20g
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwOjQ1NTg3KQorKysgV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCisKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVz
cGFjZSo+IExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDsKKworc3RhdGljIExvY2FsU3RvcmFnZU5h
bWVzcGFjZU1hcCYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCwgbG9jYWxTdG9yYWdlTmFtZXNwYWNl
TWFwLCAoKSk7CisgICAgcmV0dXJuIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDsKK30KKworUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VO
YW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGNvbnN0IFN0cmluZyBsb29rdXBQ
YXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikgOiBwYXRoOworICAgIExvY2FsU3RvcmFn
ZU5hbWVzcGFjZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5m
aW5kKGxvb2t1cFBhdGgpOworICAgIGlmIChpdCA9PSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAo
KS5lbmQoKSkgeworICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gc3RvcmFnZU5hbWVz
cGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlKExvY2FsU3RvcmFnZSwgbG9va3Vw
UGF0aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5zZXQobG9va3VwUGF0
aCwgc3RvcmFnZU5hbWVzcGFjZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNw
YWNlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKworUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNl
KFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSkpOworfQorCitTdG9yYWdlTmFtZXNwYWNlOjpTdG9y
YWdlTmFtZXNwYWNlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgp
CisgICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQorICAgICwgbV9wYXRoKHBhdGguY29w
eSgpKSAgLy8gRklYTUU6IElzIHRoZSAuY29weSBuZWNlc3Nhcnk/CisgICAgLCBtX3N5bmNNYW5h
Z2VyKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQorI2VuZGlm
Cit7CisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNF
bXB0eSgpKQorICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVh
dGUobV9wYXRoKTsKK30KKworU3RvcmFnZU5hbWVzcGFjZTo6flN0b3JhZ2VOYW1lc3BhY2UoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9
PSBMb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCgpLmdldChtX3BhdGgpID09IHRoaXMpOworICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VN
YXAoKS5yZW1vdmUobV9wYXRoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVz
cGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6Y29weSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisKKyAgICBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZT4gbmV3TmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2UobV9z
dG9yYWdlVHlwZSwgbV9wYXRoKSk7CisKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CisgICAg
ICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmly
c3QuZ2V0KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGkt
PmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdOYW1l
c3BhY2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFt
ZXNwYWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworCisgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKKyAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQorICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVs
ZWFzZSgpOworCisgICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlKG1fc3RvcmFn
ZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CisgICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQo
b3JpZ2luLCBzdG9yYWdlQXJlYSk7CisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsK
K30KKwordm9pZCBTdG9yYWdlTmFtZXNwYWNlOjpjbG9zZSgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisKKyAgICBTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5jbG9zZSgpOworCisjaWZuZGVmIE5E
RUJVRworICAgIG1faXNTaHV0ZG93biA9IHRydWU7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZpc2lvbiA0NTU4NykKKysrIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3Rv
cmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKQEAgLTQwLDEyICs0MCwxMiBAQCBzdGF0aWMgTG9jYWxT
dG9yYWdlTmFtZXNwYWNlTWFwJiBsb2NhbFN0CiAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcDsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNw
YWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKQorUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBjb25zdCBTdHJpbmcgbG9va3VwUGF0
aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKICAgICBMb2NhbFN0b3JhZ2VO
YW1lc3BhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuZmlu
ZChsb29rdXBQYXRoKTsKICAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3Bh
Y2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShMb2NhbFN0b3JhZ2UsIGxvb2t1cFBh
dGgpKTsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2Ug
PSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwoTG9jYWxTdG9yYWdlLCBsb29rdXBQ
YXRoKSk7CiAgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLnNldChsb29rdXBQYXRo
LCBzdG9yYWdlTmFtZXNwYWNlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3Bh
Y2UucmVsZWFzZSgpOwogICAgIH0KQEAgLTUzLDEyICs1MywxMiBAQCBQYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lCiAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLVBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UoKQorUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RvcmFnZU5hbWVzcGFjZShTZXNzaW9uU3RvcmFnZSwgU3RyaW5nKCkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFNlc3Npb25TdG9yYWdlLCBT
dHJpbmcoKSkpOwogfQogCi1TdG9yYWdlTmFtZXNwYWNlOjpTdG9yYWdlTmFtZXNwYWNlKFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgpCitTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0
IFN0cmluZyYgcGF0aCkKICAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBt
X3BhdGgocGF0aC5jb3B5KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KICAg
ICAsIG1fc3luY01hbmFnZXIoMCkKQEAgLTcwLDcgKzcwLDcgQEAgU3RvcmFnZU5hbWVzcGFjZTo6
U3RvcmFnZU5hbWVzcGFjZShTdG9yYQogICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5
bmNNYW5hZ2VyOjpjcmVhdGUobV9wYXRoKTsKIH0KIAotU3RvcmFnZU5hbWVzcGFjZTo6flN0b3Jh
Z2VOYW1lc3BhY2UoKQorU3RvcmFnZU5hbWVzcGFjZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1w
bCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtODAsMTIgKzgwLDEyIEBA
IFN0b3JhZ2VOYW1lc3BhY2U6On5TdG9yYWdlTmFtZXNwYWNlKCkKICAgICB9CiB9CiAKLVBhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6Y29weSgpCitQYXNzUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKIAot
ICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcg
U3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VUeXBlLCBtX3BhdGgpKTsKKyAgICBTdG9yYWdlTmFt
ZXNwYWNlSW1wbCogbmV3TmFtZXNwYWNlID0gbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3Rv
cmFnZVR5cGUsIG1fcGF0aCk7CiAKICAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRv
ciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CkBAIC05Mywx
MCArOTMsMTAgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZQogICAg
ICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBhcmVhQ29w
eS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXdOYW1lc3BhY2UpOwogfQogCi1QYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CkBAIC0xMTAsNyArMTEwLDcgQEAg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZQogICAgIHJldHVybiBzdG9y
YWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU3RvcmFnZU5hbWVzcGFjZTo6Y2xvc2UoKQor
dm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlzaW9uIDQ1NTg3KQkoZnJvbSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oOjQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFnZU5h
bWVzcGFjZV9oCisjZGVmaW5lIFN0b3JhZ2VOYW1lc3BhY2VfaAorCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RvcmFnZUFy
ZWE7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOworCisgICAgY2xhc3MgU3RvcmFnZU5h
bWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VOYW1lc3BhY2U+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIH5TdG9yYWdlTmFtZXNwYWNlKCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9y
YWdlTmFtZXNwYWNlPiBjb3B5KCk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYg
cGF0aCk7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU3RvcmFnZUFyZWFNYXA7
CisgICAgICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7CisKKyAgICAgICAgU3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKKworICAgICAgICAvLyBPbmx5IHVzZWQgaWYgbV9zdG9y
YWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBwYXRoIHdhcyBub3QgIiIgaW4gb3VyIGNv
bnN0cnVjdG9yLgorICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBi
b29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VO
YW1lc3BhY2VfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJl
dmlzaW9uIDQ1NTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDM1ICsyMywyNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIFN0b3JhZ2VOYW1lc3BhY2VfaAotI2RlZmluZSBTdG9yYWdlTmFtZXNwYWNlX2gK
KyNpZm5kZWYgU3RvcmFnZU5hbWVzcGFjZUltcGxfaAorI2RlZmluZSBTdG9yYWdlTmFtZXNwYWNl
SW1wbF9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkhhc2guaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU3RvcmFnZUFy
ZWE7Ci0gICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwotCi0gICAgY2xhc3MgU3RvcmFnZU5h
bWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VOYW1lc3BhY2U+IHsKKyAgICBjbGFz
cyBTdG9yYWdlTmFtZXNwYWNlSW1wbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNwYWNlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIH5TdG9yYWdlTmFtZXNwYWNlKCk7Ci0KICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKLSAgICAgICAgUGFzc1JlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAgICAg
dmlydHVhbCB+U3RvcmFnZU5hbWVzcGFjZUltcGwoKTsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0b3JhZ2VOYW1lc3Bh
Y2UoU3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgICAgIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+
LCBTZWN1cml0eU9yaWdpbkhhc2g+IFN0b3JhZ2VBcmVhTWFwOwogICAgICAgICBTdG9yYWdlQXJl
YU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwpAQCAtNzEsNCArNjMsNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNlbmRpZiAvLyBTdG9yYWdl
TmFtZXNwYWNlX2gKKyNlbmRpZiAvLyBTdG9yYWdlTmFtZXNwYWNlSW1wbF9oCg==
</data>
<flag name="review"
          id="16913"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>