<?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>121985</bug_id>
          
          <creation_ts>2013-09-26 14:52:28 -0700</creation_ts>
          <short_desc>[iOS] Upstream disk image cache</short_desc>
          <delta_ts>2013-10-28 04:34:15 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>933724</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-26 14:52:28 -0700</bug_when>
    <thetext>Upstream the iOS-specific disk image cache feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933726</commentid>
    <comment_count>1</comment_count>
      <attachid>212755</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-26 14:59:59 -0700</bug_when>
    <thetext>Created attachment 212755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933728</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-26 15:01:55 -0700</bug_when>
    <thetext>Attachment 212755 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/loader/DiskImageCache.cpp&apos;, u&apos;Source/WebCore/loader/DiskImageCache.h&apos;, u&apos;Source/WebCore/loader/DiskImageCacheClient.h&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.cpp&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.h&apos;, u&apos;Source/WebCore/loader/cache/CachedImage.cpp&apos;, u&apos;Source/WebCore/loader/cache/CachedImage.h&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.cpp&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.h&apos;, u&apos;Source/WebCore/loader/cache/MemoryCache.cpp&apos;, u&apos;Source/WebCore/loader/cache/MemoryCache.h&apos;, u&apos;Source/WebCore/loader/ios/DiskImageCacheIOS.mm&apos;, u&apos;Source/WebCore/platform/Logging.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.cpp&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebDiskImageCacheClientIOS.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebDiskImageCacheClientIOS.mm&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/Misc/WebCache.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebDataSource.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebDataSourcePrivate.h&apos;, u&apos;Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h&apos;, u&apos;Source/WebKit/mac/WebView/WebPreferences.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;]&quot; exit_code: 1
Source/WebCore/loader/DiskImageCache.cpp:116:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/DiskImageCache.cpp:128:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/DiskImageCache.cpp:228:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/DiskImageCache.cpp:231:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/DiskImageCache.cpp:266:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/DiskImageCache.cpp:269:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/loader/DiskImageCache.cpp:269:  Missing space before {  [whitespace/braces] [5]
Total errors found: 7 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933730</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-26 15:06:18 -0700</bug_when>
    <thetext>I am looking to clean up the WebPreference code so as to work for both iOS and Mac. For now, I added an implementation, but didn&apos;t declare the following methods in WebPreferencesPrivate.h: diskImageCacheEnabled, setDiskImageCacheEnabled, diskImageCacheMinimumImageSize, diskImageCacheMaximumCacheSize, setDiskImageCacheMaximumCacheSize, _diskImageCacheSavedCacheDirectory, _setDiskImageCacheSavedCacheDirectory.

Let me know if it would be preferred to omit the implementations as well or if we should look to clean up WebPreferences before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933750</commentid>
    <comment_count>4</comment_count>
      <attachid>212755</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-26 15:44:08 -0700</bug_when>
    <thetext>Comment on attachment 212755
Patch

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

A few drive by comments, but this looks fine to me. Ideally this code will go away eventually; in favor of better shared cache between the lower network layer and WebCore.

&gt; Source/WebCore/loader/DiskImageCache.cpp:29
&gt; +#if ENABLE(DISK_IMAGE_CACHE)

This file openly uses WebThreadRun and includes WebCoreThread* files. So perhaps this should be #if PLATFORM(IOS) &amp;&amp; ENABLE(DISK_IMAGE_CACHE)?

&gt; Source/WebCore/loader/DiskImageCache.cpp:42
&gt; +    DEFINE_STATIC_LOCAL(DiskImageCache, staticCache, ());

Newer code has been moving away from DEFINE_STATIC_LOCAL. It seems NeverDestroyed&lt;&gt; or just using a static (like WebCore::memoryCache()) would be fine.

&gt; Source/WebCore/loader/cache/CachedResource.h:255
&gt; +    virtual bool canUseDiskImageCache() const { return false; }
&gt; +    virtual void useDiskImageCache() { ASSERT(canUseDiskImageCache()); }

These could be OVERRIDE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933783</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-26 16:58:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; [...]
&gt; &gt; Source/WebCore/loader/DiskImageCache.cpp:29
&gt; &gt; +#if ENABLE(DISK_IMAGE_CACHE)
&gt; 
&gt; This file openly uses WebThreadRun and includes WebCoreThread* files. So perhaps this should be #if PLATFORM(IOS) &amp;&amp; ENABLE(DISK_IMAGE_CACHE)?

I can do this. What are your thoughts about moving files Source/WebCore/loader/DiskImageCache.{cpp, h}, and Source/WebCore/loader/DiskImageCacheClient.h to directory Source/WebCore/loader/ios?

&gt; 
&gt; &gt; Source/WebCore/loader/DiskImageCache.cpp:42
&gt; &gt; +    DEFINE_STATIC_LOCAL(DiskImageCache, staticCache, ());
&gt; 
&gt; Newer code has been moving away from DEFINE_STATIC_LOCAL. It seems NeverDestroyed&lt;&gt; or just using a static (like WebCore::memoryCache()) would be fine.

Will use NeverDestroyed&lt;&gt;.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.h:255
&gt; &gt; +    virtual bool canUseDiskImageCache() const { return false; }
&gt; &gt; +    virtual void useDiskImageCache() { ASSERT(canUseDiskImageCache()); }
&gt; 
&gt; These could be OVERRIDE.

These are the base class definitions; =&gt; we can&apos;t mark them OVERRIDE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933813</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-26 18:13:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; [...]
&gt; &gt; &gt; Source/WebCore/loader/DiskImageCache.cpp:29
&gt; &gt; &gt; +#if ENABLE(DISK_IMAGE_CACHE)
&gt; &gt; 
&gt; &gt; This file openly uses WebThreadRun and includes WebCoreThread* files. So perhaps this should be #if PLATFORM(IOS) &amp;&amp; ENABLE(DISK_IMAGE_CACHE)?
&gt; 
&gt; I can do this. What are your thoughts about moving files Source/WebCore/loader/DiskImageCache.{cpp, h}, and Source/WebCore/loader/DiskImageCacheClient.h to directory Source/WebCore/loader/ios?

That sounds fine.

&gt; &gt; &gt; Source/WebCore/loader/cache/CachedResource.h:255
&gt; &gt; &gt; +    virtual bool canUseDiskImageCache() const { return false; }
&gt; &gt; &gt; +    virtual void useDiskImageCache() { ASSERT(canUseDiskImageCache()); }
&gt; &gt; 
&gt; &gt; These could be OVERRIDE.
&gt; 
&gt; These are the base class definitions; =&gt; we can&apos;t mark them OVERRIDE.

Ahh, good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934067</commentid>
    <comment_count>7</comment_count>
      <attachid>212839</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-09-27 13:39:47 -0700</bug_when>
    <thetext>Created attachment 212839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936325</commentid>
    <comment_count>8</comment_count>
      <attachid>212839</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-10-04 13:01:28 -0700</bug_when>
    <thetext>Comment on attachment 212839
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936402</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-10-04 15:39:53 -0700</bug_when>
    <thetext>Committed r156918: &lt;http://trac.webkit.org/changeset/156918&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942772</commentid>
    <comment_count>10</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-10-23 11:59:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; […] Ideally this code will go away eventually; in favor of better shared cache between the lower network layer and WebCore.

Is that really possible? To me it looks like this is being done at the proper level, since it&apos;s actually decoded data that&apos;s being file-backed, rather than the bytes that were downloaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944051</commentid>
    <comment_count>11</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-10-28 04:34:15 -0700</bug_when>
    <thetext>hrm, no, I misunderstood, it&apos;s caching the data it got from the network, so I think your comment makes sense, it would be great to make it integrate with the lower level.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212755</attachid>
            <date>2013-09-26 14:59:59 -0700</date>
            <delta_ts>2013-09-27 13:39:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121985-20130926145958.patch</filename>
            <type>text/plain</type>
            <size>77899</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2NDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY0MDc3MmQzMTkwYWM0
ZjgyNWRhNzJhMTI0ODlmMzMzZDYzYjdjOS4uNTBmZDc3MDJhMWExZTVlMTJmZDA4YjgzYjBlZDAx
NDBmOTM0NDlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEzLTA5LTI2ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBk
aXNrIGltYWdlIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjE5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvRGlza0ltYWdlQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvRGlza0ltYWdlQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICog
bG9hZGVyL0Rpc2tJbWFnZUNhY2hlQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUJ1ZmZlcjo6aXNV
c2luZ0Rpc2tJbWFnZUNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIuaDoK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2U6OmNhblVzZURpc2tJbWFnZUNhY2hlKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6dXNlRGlza0ltYWdlQ2FjaGUpOiBBZGRlZC4KKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmlzU2Fm
ZVRvTWFrZVB1cmdlYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aXNV
c2luZ0Rpc2tJbWFnZUNhY2hlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlRGlz
a0ltYWdlQ2FjaGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp1
c2VEaXNrSW1hZ2VDYWNoZSk6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Zmx1c2hDYWNoZWRJbWFn
ZXNUb0Rpc2spOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpUeXBlU3Rh
dGlzdGljOjphZGRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZHVt
cFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMpOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OlR5cGVTdGF0aXN0aWM6OlR5cGVTdGF0aXN0aWMpOgorICAgICAgICAqIGxv
YWRlci9pb3MvRGlza0ltYWdlQ2FjaGVJT1MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjp+U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6aXNBbGxvd2VkVG9CZU1lbW9yeU1hcHBlZCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyOjphbGxvd1RvQmVNZW1vcnlNYXBwZWQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZmFpbGVkTWVtb3J5TWFwKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6Om1hcmtBc01lbW9yeU1hcHBlZCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjptZW1vcnlNYXBwZWROb3RpZmljYXRpb25D
YWxsYmFja0RhdGEpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6bWVt
b3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6aXNNZW1vcnlNYXBwZWQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OlNoYXJlZEJ1ZmZlcik6CisKIDIwMTMtMDktMjYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIFBhc3NXZWFrCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
YTYwNTkwZTgwOTVhODNjM2Q2N2Q0YTZmNDE0MDgxOTMxMjE0NjUuLjVjZjc2YzVmZmEwYjBmN2Nk
NDcyNWIwMGYwYTZmMWY5NzVjMmFhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMt
MDktMjYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1Nd
IFVwc3RyZWFtIGRpc2sgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmg6
IEFkZGVkLgorICAgICAgICAqIGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1hZ2VDYWNoZUNs
aWVudElPUy5tbTogQWRkZWQuCisKIDIwMTMtMDktMjUgIFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25n
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gVW5yZXZpZXdlZCBCdWlsZCBmaXguCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKaW5kZXggNjU2YzhkM2VjNDBlMmIzNGRlMGYwOTU3ZThkNGFmMGViYzM0NmY4
Zi4uMjFiNzFiYTBjODI3MzU5YTA3NGM4YTlhYTE3Yzc1ODQxYTcyMjE5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTA5LTI2ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVz
QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBkaXNrIGltYWdlIGNhY2hlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5ODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2Vi
Q2FjaGUubW06CisgICAgICAgICgrW1dlYkNhY2hlIHN0YXRpc3RpY3NdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkRhdGFTb3VyY2UubW06CisgICAgICAgIChCdWZmZXJNZW1vcnlNYXBwZWQpOiBB
ZGRlZC4KKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBfc2V0QWxsb3dUb0JlTWVtb3J5TWFwcGVk
XSk6IEFkZGVkLgorICAgICAgICAoLVtXZWJEYXRhU291cmNlIHNldERhdGFTb3VyY2VEZWxlZ2F0
ZTpdKTogQWRkZWQuCisgICAgICAgICgtW1dlYkRhdGFTb3VyY2UgZGF0YVNvdXJjZURlbGVnYXRl
XSk6IEFkZGVkLgorICAgICAgICAoLVtXZWJEYXRhU291cmNlIGRlYWxsb2NdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkRhdGFTb3VyY2VQcml2YXRlLmg6IERlY2xhcmVkIHByaXZhdGUgZGVsZWdh
dGUKKyAgICAgICAgcHJvdG9jb2wsIFdlYkRhdGFTb3VyY2VQcml2YXRlRGVsZWdhdGUuCisgICAg
ICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFs
aXplXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIGRpc2tJbWFnZUNhY2hlRW5hYmxlZF0p
OiBBZGRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0RGlza0ltYWdlQ2FjaGVFbmFi
bGVkOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgZGlza0ltYWdlQ2FjaGVN
aW5pbXVtSW1hZ2VTaXplXSk6IEFkZGVkLgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRE
aXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNpemU6XSk6IEFkZGVkLgorICAgICAgICAoLVtXZWJQ
cmVmZXJlbmNlcyBkaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemVdKTogQWRkZWQuCisgICAg
ICAgICgtW1dlYlByZWZlcmVuY2VzIHNldERpc2tJbWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZTpd
KTogQWRkZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIF9kaXNrSW1hZ2VDYWNoZVNhdmVk
Q2FjaGVEaXJlY3RvcnldKTogQWRkZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIF9zZXRE
aXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3Rvcnk6XSk6IEFkZGVkLgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRp
b25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVy
ZW5jZXNDaGFuZ2VkOl0pOgorCiAyMDEzLTA5LTI1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUGFzcyBhIEpTQzo6Vk0mIHRvIEpTIGJpbmRpbmdzIG9iamVjdCBjcmVh
dGlvbiBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGEgSlNDOjpFeGVjU3RhdGUqCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IDc1ODEwNDE3MDg5MDZmMjQ2OTVkNzgwOWE4NTgwNWZiY2ZlNDBjNzIuLmNm
ZmJiYTYwMDA4NTU0YjllZjE5NjhkODZkNmMxNTNhNzFkMTlkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0yNDY1LDYgKzI0NjUsMTYgQEAgX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTJET01XaW5kb3dDU1NFCiBfX1pOSzdX
ZWJDb3JlOERvY3VtZW50MTZhbm5vdGF0ZWRSZWdpb25zRXYKICNlbmRpZgogCisjaWYgRU5BQkxF
KERJU0tfSU1BR0VfQ0FDSEUpCitfX1pON1dlYkNvcmUxNGRpc2tJbWFnZUNhY2hlRXYKK19fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUyM2ZsdXNoQ2FjaGVkSW1hZ2VzVG9EaXNrRXYKK19fWk5LN1dl
YkNvcmUxMlNoYXJlZEJ1ZmZlcjMybWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2tFdgor
X19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIyMWFsbG93VG9CZU1lbW9yeU1hcHBlZEV2CitfX1pO
N1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjM1c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJh
Y2tFUEZ2TjNXVEYxMFBhc3NSZWZQdHJJUzBfRUVOUzBfMTZDb21wbGV0aW9uU3RhdHVzRVB2RVM1
XworX19aTks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyMjVpc0FsbG93ZWRUb0JlTWVtb3J5TWFwcGVk
RXYKK19fWk5LN1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjM2bWVtb3J5TWFwcGVkTm90aWZpY2F0aW9u
Q2FsbGJhY2tEYXRhRXYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIF9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdkcmFnU291cmNlRW5kZWRBdEVSS05TXzE4UGxhdGZvcm1N
b3VzZUV2ZW50RU5TXzEzRHJhZ09wZXJhdGlvbkUKIF9fWk5LN1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjE3ZXZlbnRNYXlTdGFydERyYWdFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MzQw
YjUxZmE3MTllOWRlNzgxNjFhZGVlYTdiMGUxMzc4Mjg1NTI0Li5lNTk3YWU5MzlkZjM3N2U3ZjI3
MTAwZDg1NzQyYWU1ZTkyNjQ0NDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNTAwLDYgKzM1MDAsMTAgQEAKIAkJQTVBQkI3
ODcxM0I5MDRCQzAwRjE5N0UzIC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVBQkI3ODYxM0I5MDRCQzAw
RjE5N0UzIC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oICovOyB9OwogCQlBNUFGQjM0RjEx
NTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QUZCMzREMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFu
Z2UuY3BwICovOyB9OwogCQlBNUFGQjM1MDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUFGQjM0RTEx
NTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVCMDk1QjkxMjdBMUY2RTAwMTUyMUU1IC8qIERpc2tJ
bWFnZUNhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTVCMDk1QjgxMjdBMUY2RTAwMTUyMUU1IC8qIERpc2tJbWFnZUNhY2hlSU9TLm1tICov
OyB9OworCQlBNUM1NjZBQjEyN0EzQUFEMDBFOEEzRkYgLyogRGlza0ltYWdlQ2FjaGVDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QzU2NkFB
MTI3QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RjlFRjcwMTI2Njc1MEQwMEZD
Q0Y1MiAvKiBEaXNrSW1hZ2VDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNUY5RUY2RTEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdlQ2Fj
aGUuY3BwICovOyB9OworCQlBNUY5RUY3MTEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdlQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RjlF
RjZGMTI2Njc1MEQwMEZDQ0Y1MiAvKiBEaXNrSW1hZ2VDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE2MTQ4QTYyMTJFNDFEM0EwMDQ0QTc4
NCAvKiBET01IVE1MS2V5Z2VuRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjE0OEE2MTEyRTQxRDNBMDA0NEE3ODQgLyogRE9N
SFRNTEtleWdlbkVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlBNjE0OEE2NzEyRTQxRDk0MDA0
NEE3ODQgLyogRE9NSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MTQ4QTY1MTJFNDFEOTQwMDQ0QTc4NCAvKiBET01IVE1M
S2V5Z2VuRWxlbWVudC5oICovOyB9OwogCQlBNjE0OEE2ODEyRTQxRDk0MDA0NEE3ODQgLyogRE9N
SFRNTEtleWdlbkVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNjE0OEE2NjEyRTQxRDk0MDA0NEE3ODQgLyogRE9NSFRNTEtleWdlbkVsZW1l
bnQubW0gKi87IH07CkBAIC0xMDE0NSw4ICsxMDE0OSwxMiBAQAogCQlBNUFCQjc4NjEzQjkwNEJD
MDBGMTk3RTMgLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0ZXBSYW5nZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBT
dGVwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RlcFJhbmdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1QjA5NUI4MTI3QTFGNkUwMDE1MjFFNSAv
KiBEaXNrSW1hZ2VDYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpc2tJbWFnZUNhY2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNUM1NjZBQTEyN0EzQUFEMDBFOEEzRkYgLyogRGlza0ltYWdlQ2FjaGVDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlza0ltYWdlQ2FjaGVDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVDOTc0Q0YxMTQ4NUZGMTAwNjZGMkFCIC8qIEtl
eUV2ZW50Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gS2V5RXZlbnRD
b2NvYS5oOyBwYXRoID0gY29jb2EvS2V5RXZlbnRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNUM5NzREMDExNDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEtleUV2ZW50Q29jb2EubW07
IHBhdGggPSBjb2NvYS9LZXlFdmVudENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNUY5RUY2RTEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdlQ2FjaGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlza0ltYWdlQ2FjaGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUY5RUY2RjEyNjY3NTBEMDBGQ0NGNTIgLyogRGlz
a0ltYWdlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlza0ltYWdl
Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYxNDhBNjExMkU0MUQzQTAw
NDRBNzg0IC8qIERPTUhUTUxLZXlnZW5FbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTEtleWdlbkVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNjE0OEE2NTEyRTQxRDk0MDA0NEE3ODQgLyogRE9NSFRN
TEtleWdlbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRN
TEtleWdlbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYxNDhBNjYx
MkU0MUQ5NDAwNDRBNzg0IC8qIERPTUhUTUxLZXlnZW5FbGVtZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NSFRNTEtleWdlbkVsZW1lbnQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTYyNSw2ICsxOTYzMyw3IEBACiAJCQkJQThEMkIy
NTIxMjg3QTU2MDAwQUY0RERBIC8qIGNhY2hlICovLAogCQkJCTdFRTY4NDczMTJEMjZFNTUwMEU3
OTQxNSAvKiBjZiAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLywK
KwkJCQlDRTc5RDY4NjE3RjIyMEVEMDA4MTVDMDAgLyogaW9zICovLAogCQkJCTkzQTFFQUEyMEE1
NjM0RDgwMDY5NjBBMCAvKiBtYWMgKi8sCiAJCQkJRTE0MjRDOTExNjRCNTJDODAwRjMyRDQwIC8q
IENvb2tpZUphci5jcHAgKi8sCiAJCQkJRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5oICovLApAQCAtMTk2MzIsNiArMTk2NDEsOSBAQAogCQkJCUUxQzQxNjExMEY2NTYyRkQw
MDkyRDJGQiAvKiBDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCAqLywKIAkJCQlFMUM0MTVERDBG
NjU1RDdDMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgKi8s
CiAJCQkJRTFDNDE1RDkwRjY1NUQ2RjAwOTJEMkZCIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuaCAqLywKKwkJCQlBNUY5RUY2RTEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdl
Q2FjaGUuY3BwICovLAorCQkJCUE1RjlFRjZGMTI2Njc1MEQwMEZDQ0Y1MiAvKiBEaXNrSW1hZ2VD
YWNoZS5oICovLAorCQkJCUE1QzU2NkFBMTI3QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNo
ZUNsaWVudC5oICovLAogCQkJCTkzRTIyN0RCMEFGNTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExv
YWRlci5jcHAgKi8sCiAJCQkJNjU2RDM3MUUwQURCQTVERTAwQTQ1NTREIC8qIERvY3VtZW50TG9h
ZGVyLmggKi8sCiAJCQkJODYxQzJFQTMxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRp
bWluZy5jcHAgKi8sCkBAIC0yMDAxMCw2ICsyMDAyMiwxNCBAQAogCQkJbmFtZSA9IEVuY3J5cHRl
ZE1lZGlhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQ0U3OUQ2ODYxN0Yy
MjBFRDAwODE1QzAwIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJQTVCMDk1QjgxMjdBMUY2RTAwMTUyMUU1IC8qIERpc2tJbWFnZUNhY2hlSU9T
Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTkxNSw2ICsyMTkzNSw4IEBACiAJ
CQkJODk4Nzg1NTUxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODkwQUUwRTExMjU2QTA3OTAwRjU5NjhDIC8qIERpcmVjdG9yeVJlYWRlckJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg5M0M0ODAzMTI0OEJEM0EwMDJCM0Q4NiAvKiBEaXJl
Y3RvcnlSZWFkZXJTeW5jLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNUY5RUY3MTEyNjY3NTBEMDBG
Q0NGNTIgLyogRGlza0ltYWdlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1QzU2NkFCMTI3
QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUQ4QzREQzAxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVl
cERpc2FibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA5MTEyQjAyNkY3MDBDMUEzNTkg
LyogRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjUzNzksNiArMjU0MDEsOCBAQAogCQkJ
CTMxMkQ2N0IxMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZEQUYxOTk4MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252b2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODkzQzQ4MDIxMjQ4QkQzQTAwMkIzRDg2IC8qIERpcmVjdG9yeVJl
YWRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTVGOUVGNzAxMjY2NzUwRDAwRkNDRjUy
IC8qIERpc2tJbWFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1QjA5NUI5MTI3QTFG
NkUwMDE1MjFFNSAvKiBEaXNrSW1hZ2VDYWNoZUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5
RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlBRjJENkMxNDQzNUQyMTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNo
TW9uaXRvck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDhDNERCRjE0MjgyMjJDMDAyNkNF
NzIgLyogRGlzcGxheVNsZWVwRGlzYWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRGlza0ltYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Rpc2tJbWFnZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmMyYjAxMDViODA3ZmY2
YWU4MWNmOGQ1NWNkOTJlODNhNjg3M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Rpc2tJbWFnZUNhY2hlLmNwcApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNrSW1hZ2VDYWNoZS5oIgorCisj
aWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiV2ViQ29yZVRocmVhZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Rpc2tJbWFnZUNhY2hlJiBk
aXNrSW1hZ2VDYWNoZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChEaXNrSW1hZ2VDYWNo
ZSwgc3RhdGljQ2FjaGUsICgpKTsKKyAgICByZXR1cm4gc3RhdGljQ2FjaGU7Cit9CisKK0Rpc2tJ
bWFnZUNhY2hlOjpFbnRyeTo6RW50cnkoU2hhcmVkQnVmZmVyKiBidWZmZXIsIERpc2tJbWFnZUNh
Y2hlSWQgaWQpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX2lkKGlkKQorICAgICwg
bV9zaXplKDApCisgICAgLCBtX21hcHBpbmcobnVsbHB0cikKK3sKKyAgICBBU1NFUlQoV2ViVGhy
ZWFkSXNDdXJyZW50KCkpOworICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKyAgICBB
U1NFUlQobV9idWZmZXIpOworICAgIG1fYnVmZmVyLT5yZWYoKTsKK30KKworRGlza0ltYWdlQ2Fj
aGU6OkVudHJ5Ojp+RW50cnkoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7
CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkKCkpOworICAgIEFTU0VSVCghbV9idWZmZXIp
OworICAgIEFTU0VSVCghbV9tYXBwaW5nKTsKK30KKworYm9vbCBEaXNrSW1hZ2VDYWNoZTo6RW50
cnk6Om1hcEludGVybmFsKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQobV9idWZm
ZXIpOworICAgIEFTU0VSVCghbV9tYXBwaW5nKTsKKworICAgIG1fcGF0aCA9IHBhdGg7CisgICAg
bV9zaXplID0gbV9idWZmZXItPnNpemUoKTsKKworICAgIC8vIE9wZW4gdGhlIGZpbGUgZm9yIHJl
YWRpbmcgYW5kIHdyaXRpbmcuCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW4o
bV9wYXRoLnV0ZjgoKS5kYXRhKCksIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX1RSVU5DLCBzdGF0aWNf
Y2FzdDxtb2RlX3Q+KDA2MDApKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIGZpbGUu
CisgICAgaWYgKHdyaXRlVG9GaWxlSW50ZXJuYWwoaGFuZGxlKSA9PSAtMSkgeworICAgICAgICBj
bG9zZUZpbGUoaGFuZGxlKTsKKyAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gU2VlayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcu
CisgICAgaWYgKHNlZWtGaWxlKGhhbmRsZSwgMCwgU2Vla0Zyb21CZWdpbm5pbmcpID09IC0xKSB7
CisgICAgICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgICAgICBkZWxldGVGaWxlKG1fcGF0aCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQZXJmb3JtIG1lbW9yeSBt
YXBwaW5nIGZvciByZWFkaW5nLgorICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBub3QgY29uZmxpY3Qg
d2l0aCB0aGUgb3BlbigpIGFib3ZlLCB3aGljaCBtdXN0IGFsc28gb3BlbiBmb3IgcmVhZGluZy4K
KyAgICBtX21hcHBpbmcgPSBtbWFwKG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hB
UkVELCBoYW5kbGUsIDApOworICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgIGlmIChtX21hcHBp
bmcgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBMT0coRGlza0ltYWdlQ2FjaGUsICJEaXNrSW1h
Z2VDYWNoZTogbWFwcGluZyBmYWlsZWQgKCVkKTogKCVzKSIsIGVycm5vLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICBtX21hcHBpbmcgPSBudWxscHRyOworICAgICAgICBkZWxldGVGaWxlKG1f
cGF0aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6Om1hcChjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICBBU1NFUlQoIW1fbWFwcGluZyk7CisgICAg
RGlza0ltYWdlQ2FjaGU6OkVudHJ5KiB0aGlzRW50cnkgPSB0aGlzOworCisgICAgYm9vbCBmaWxl
TWFwcGVkID0gbWFwSW50ZXJuYWwocGF0aCk7CisgICAgaWYgKCFmaWxlTWFwcGVkKSB7CisgICAg
ICAgIC8vIE5vdGlmeSB0aGUgYnVmZmVyIGluIHRoZSBjYXNlIG9mIGEgZmFpbGVkIG1hcHBpbmcu
CisgICAgICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAgICAgbV9idWZmZXItPmZhaWxlZE1l
bW9yeU1hcCgpOworICAgICAgICAgICAgbV9idWZmZXItPmRlcmVmKCk7CisgICAgICAgICAgICBt
X2J1ZmZlciA9IDA7CisgICAgICAgICAgICB0aGlzRW50cnktPmRlcmVmKCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTm90aWZ5IHRoZSBidWZmZXIgaW4g
dGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIG1hcHBpbmcuCisgICAgLy8gVGhpcyBzaG91bGQgaGFw
cGVuIG9uIHRoZSBXZWJUaHJlYWQgYmVjYXVzZSB0aGlzIGlzIGJlaW5nIHJ1bgorICAgIC8vIGFz
eW5jaHJvbm91c2x5IGluc2lkZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgIFdlYlRocmVhZFJ1bihe
eworICAgICAgICBtX2J1ZmZlci0+bWFya0FzTWVtb3J5TWFwcGVkKCk7CisgICAgICAgIG1fYnVm
ZmVyLT5kZXJlZigpOworICAgICAgICBtX2J1ZmZlciA9IDA7CisgICAgICAgIHRoaXNFbnRyeS0+
ZGVyZWYoKTsKKyAgICB9KTsKK30KKwordm9pZCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6OnVubWFw
KCkKK3sKKyAgICBpZiAoIW1fbWFwcGluZykgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobXVubWFwKG1fbWFwcGluZywgbV9zaXpl
KSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJEaXNrSW1hZ2VDYWNoZTogQ291bGQgbm90IG11
bm1hcCBhIG1lbW9yeSBtYXBwZWQgZmlsZSB3aXRoIGlkICglZCkiLCBtX2lkKTsKKworICAgIG1f
bWFwcGluZyA9IG51bGxwdHI7CisgICAgbV9zaXplID0gMDsKK30KKwordm9pZCBEaXNrSW1hZ2VD
YWNoZTo6RW50cnk6OnJlbW92ZUZpbGUoKQoreworICAgIEFTU0VSVCghbV9tYXBwaW5nKTsKKyAg
ICBBU1NFUlQoIW1fc2l6ZSk7CisKKyAgICBpZiAoIWRlbGV0ZUZpbGUobV9wYXRoKSkKKyAgICAg
ICAgTE9HX0VSUk9SKCJEaXNrSW1hZ2VDYWNoZTogQ291bGQgbm90IGRlbGV0ZSBtZW1vcnkgbWFw
cGVkIGZpbGUgKCVzKSIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBEaXNrSW1h
Z2VDYWNoZTo6RW50cnk6OmNsZWFyRGF0YVdpdGhvdXRNYXBwaW5nKCkKK3sKKyAgICBBU1NFUlQo
IW1fbWFwcGluZyk7CisgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICBtX2J1ZmZlci0+ZGVyZWYo
KTsKKyAgICBtX2J1ZmZlciA9IDA7Cit9CisKK2ludCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6Ondy
aXRlVG9GaWxlSW50ZXJuYWwoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBBU1NF
UlQobV9idWZmZXIpOworICAgIGludCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7CisKKyAgICBjb25z
dCBjaGFyKiBzZWdtZW50ID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Cisg
ICAgd2hpbGUgKHVuc2lnbmVkIGxlbmd0aCA9IG1fYnVmZmVyLT5nZXRTb21lRGF0YShzZWdtZW50
LCBwb3NpdGlvbikpIHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKGhh
bmRsZSwgc2VnbWVudCwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBi
eXRlc1dyaXR0ZW47CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47Cit9CisKKworRGlza0ltYWdlQ2FjaGU6OkRpc2tJbWFn
ZUNhY2hlKCkKKyAgICA6IG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwg
bV9tYXhpbXVtQ2FjaGVTaXplKDEwMCAqIDEwMjQgKiAxMDI0KQorICAgICwgbV9taW5pbXVtSW1h
Z2VTaXplKDEwMCAqIDEwMjQpCisgICAgLCBtX25leHRBdmFpbGFibGVJZChEaXNrSW1hZ2VDYWNo
ZTo6aW52YWxpZERpc2tDYWNoZUlkICsgMSkKK3sKK30KKworRGlza0ltYWdlQ2FjaGVJZCBEaXNr
SW1hZ2VDYWNoZTo6d3JpdGVJdGVtKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBpdGVtKQorewor
ICAgIGlmICghaXNFbmFibGVkKCkgfHwgIWNyZWF0ZURpcmVjdG9yeUlmTmVlZGVkKCkpCisgICAg
ICAgIHJldHVybiBEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkOworCisgICAgLy8g
V2UgYXJlIGFscmVhZHkgZnVsbCwgY2Fubm90IGFkZCBhbnl0aGluZyB1bnRpbCBzb21ldGhpbmcg
aXMgcmVtb3ZlZC4KKyAgICBpZiAoaXNGdWxsKCkpIHsKKyAgICAgICAgTE9HKERpc2tJbWFnZUNh
Y2hlLCAiRGlza0ltYWdlQ2FjaGU6IGNvdWxkIG5vdCBwcm9jZXNzIGFuIGl0ZW0gYmVjYXVzZSB0
aGUgY2FjaGUgd2FzIGZ1bGwgYXQgKCVkKS4gVGhlIFwibWF4XCIgYmVpbmcgKCVkKSIsIG1fc2l6
ZSwgbV9tYXhpbXVtQ2FjaGVTaXplKTsKKyAgICAgICAgcmV0dXJuIERpc2tJbWFnZUNhY2hlOjpp
bnZhbGlkRGlza0NhY2hlSWQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuIGVudHJ5LgorICAg
IERpc2tJbWFnZUNhY2hlSWQgaWQgPSBuZXh0QXZhaWxhYmxlSWQoKTsKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBidWZmZXIgPSBpdGVtOworICAgIFJlZlB0cjxEaXNrSW1hZ2VDYWNoZTo6RW50
cnk+IGVudHJ5ID0gRGlza0ltYWdlQ2FjaGU6OkVudHJ5OjpjcmVhdGUoYnVmZmVyLmdldCgpLCBp
ZCk7CisgICAgbV90YWJsZS5hZGQoaWQsIGVudHJ5KTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBv
cmFyeSBmaWxlIHBhdGguCisgICAgU3RyaW5nIHBhdGggPSB0ZW1wb3JhcnlGaWxlKCk7CisgICAg
TE9HKERpc2tJbWFnZUNhY2hlLCAiRGlza0ltYWdlQ2FjaGU6IGNyZWF0aW5nIGVudHJ5ICglZCkg
YXQgKCVzKSIsIGlkLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChwYXRoLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gRGlza0ltYWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJZDsKKwor
ICAgIC8vIFRoZSBsaWZldGltZSBvZiB0aGUgRW50cnkgaXMgaGFuZGxlZCBvbiB0aGUgV2ViVGhy
ZWFkLgorICAgIC8vIEJlZm9yZSB3ZSBzZW5kIHRvIGEgZGlzcGF0Y2ggcXVldWUgd2UgbmVlZCB0
byByZWYgc28KKyAgICAvLyB0aGF0IHdlIGFyZSBzdXJlIHRoZSBvYmplY3Qgc3RpbGwgZXhpc3Rz
LiBUaGlzIGNhbGwKKyAgICAvLyBpcyBiYWxhbmNlZCBpbiB0aGUgV2ViVGhyZWFkUnVuIGluc2lk
ZSBvZiBFbnRyeTo6bWFwLgorICAgIC8vIG9yIHRoZSBlYXJseSByZXR1cm4gaW4gdGhpcyBkaXNw
YXRjaC4KKyAgICBEaXNrSW1hZ2VDYWNoZTo6RW50cnkqIGxvY2FsRW50cnlGb3JCbG9jayA9IGVu
dHJ5LmdldCgpOworICAgIGxvY2FsRW50cnlGb3JCbG9jay0+cmVmKCk7CisKKyAgICAvLyBNYXAg
dG8gZGlzayBhc3luY2hyb25vdXNseS4KKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
Z2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAg
ICAgICAvLyBUaGUgY2FjaGUgYmVjYW1lIGZ1bGwgc2luY2UgdGhlIHRpbWUgd2Ugd2VyZSBhZGRl
ZCB0byB0aGUgcXVldWUuIERvbid0IG1hcC4KKyAgICAgICAgaWYgKGRpc2tJbWFnZUNhY2hlKCku
aXNGdWxsKCkpIHsKKyAgICAgICAgICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAgICAgICAg
IGxvY2FsRW50cnlGb3JCbG9jay0+Y2xlYXJEYXRhV2l0aG91dE1hcHBpbmcoKTsKKyAgICAgICAg
ICAgICAgICBsb2NhbEVudHJ5Rm9yQmxvY2stPmRlcmVmKCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2FsRW50cnlGb3JCbG9j
ay0+bWFwKHBhdGgpOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2l6ZSBvbiBhIHN1Y2Nlc3Nm
dWwgbWFwcGluZy4KKyAgICAgICAgaWYgKGxvY2FsRW50cnlGb3JCbG9jay0+aXNNYXBwZWQoKSkK
KyAgICAgICAgICAgIGRpc2tJbWFnZUNhY2hlKCkudXBkYXRlU2l6ZShsb2NhbEVudHJ5Rm9yQmxv
Y2stPnNpemUoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgRGlza0lt
YWdlQ2FjaGU6OnVwZGF0ZVNpemUodW5zaWduZWQgZGVsdGEpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX211dGV4KTsKKyAgICBtX3NpemUgKz0gZGVsdGE7Cit9CisKK3ZvaWQgRGlza0ltYWdl
Q2FjaGU6OnJlbW92ZUl0ZW0oRGlza0ltYWdlQ2FjaGVJZCBpZCkKK3sKKyAgICBMT0coRGlza0lt
YWdlQ2FjaGUsICJEaXNrSW1hZ2VDYWNoZTogcmVtb3ZlSXRlbSAoJWQpIiwgaWQpOworICAgIFJl
ZlB0cjxEaXNrSW1hZ2VDYWNoZTo6RW50cnk+IGVudHJ5ID0gbV90YWJsZS5nZXQoaWQpOworICAg
IG1fdGFibGUucmVtb3ZlKGlkKTsKKyAgICBpZiAoIWVudHJ5LT5pc01hcHBlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICB1cGRhdGVTaXplKC0oZW50cnktPnNpemUoKSkpOworCisgICAgRGlz
a0ltYWdlQ2FjaGU6OkVudHJ5ICpsb2NhbEVudHJ5Rm9yQmxvY2sgPSBlbnRyeS5nZXQoKTsKKyAg
ICBsb2NhbEVudHJ5Rm9yQmxvY2stPnJlZigpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57
CisgICAgICAgIGxvY2FsRW50cnlGb3JCbG9jay0+dW5tYXAoKTsKKyAgICAgICAgbG9jYWxFbnRy
eUZvckJsb2NrLT5yZW1vdmVGaWxlKCk7CisgICAgICAgIFdlYlRocmVhZFJ1biheeyBsb2NhbEVu
dHJ5Rm9yQmxvY2stPmRlcmVmKCk7IH0pOworICAgIH0pOworfQorCit2b2lkKiBEaXNrSW1hZ2VD
YWNoZTo6ZGF0YUZvckl0ZW0oRGlza0ltYWdlQ2FjaGVJZCBpZCkKK3sKKyAgICBBU1NFUlQoaWQp
OworCisgICAgUmVmUHRyPERpc2tJbWFnZUNhY2hlOjpFbnRyeT4gZW50cnkgPSBtX3RhYmxlLmdl
dChpZCk7CisgICAgQVNTRVJUKGVudHJ5LT5pc01hcHBlZCgpKTsKKyAgICByZXR1cm4gZW50cnkt
PmRhdGEoKTsKK30KKworYm9vbCBEaXNrSW1hZ2VDYWNoZTo6Y3JlYXRlRGlyZWN0b3J5SWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9jYWNoZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBtX2NhY2hlRGlyZWN0b3J5ID0gdGVtcG9yYXJ5RGlyZWN0b3J5KCk7
CisgICAgTE9HKERpc2tJbWFnZUNhY2hlLCAiRGlza0ltYWdlQ2FjaGU6IENyZWF0ZWQgdGVtcG9y
YXJ5IGRpcmVjdG9yeSAoJXMpIiwgbV9jYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAobV9jYWNoZURpcmVjdG9yeS5pc051bGwoKSkgeworICAgICAgICBMT0dfRVJST1IoIkRp
c2tJbWFnZUNhY2hlOiBjb3VsZCBub3QgY3JlYXRlIGNhY2hlIGRpcmVjdG9yeSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlkQ3JlYXRlRGlza0ltYWdlQ2FjaGVEaXJlY3RvcnkobV9jYWNoZURpcmVjdG9yeSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRGlza0ltYWdlQ2FjaGVJZCBEaXNrSW1hZ2VDYWNo
ZTo6bmV4dEF2YWlsYWJsZUlkKCkKK3sKKyAgICByZXR1cm4gbV9uZXh0QXZhaWxhYmxlSWQrKzsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERJU0tfSU1B
R0VfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRGlza0ltYWdlQ2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9EaXNrSW1hZ2VDYWNoZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM5MzAzMjMwOTA0YTMzODg2MzBkMTJlZmM0YTQwZjQzNTRkYWQ0ZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRGlza0ltYWdlQ2FjaGUuaApAQCAtMCwwICsxLDE0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGlza0ltYWdlQ2FjaGVfaAorI2RlZmluZSBEaXNr
SW1hZ2VDYWNoZV9oCisKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKworI2luY2x1ZGUg
IkRpc2tJbWFnZUNhY2hlQ2xpZW50LmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIERpc2tJbWFnZUNhY2hlSWQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gR2xvYmFsIGRpc2sgaW1hZ2UgY2FjaGUgb2Jq
ZWN0LgorY2xhc3MgRGlza0ltYWdlQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERp
c2tJbWFnZUNhY2hlKTsKK3ByaXZhdGU6CisKKyAgICAvLyBMaWZldGltZSBvZiB0aGlzIEVudHJ5
IGFuZCB0aGUgU2hhcmVkQnVmZmVyIGl0IHdyYXBzIGlzIG1hbmFnZWQgb24gdGhlIFdlYlRocmVh
ZC4KKyAgICBjbGFzcyBFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEVudHJ5PiB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgRW50cnkoU2hhcmVkQnVmZmVyKiwgRGlza0ltYWdlQ2FjaGVJZCk7CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERpc2tJbWFnZUNhY2hlOjpF
bnRyeT4gY3JlYXRlKFNoYXJlZEJ1ZmZlciogYnVmZmVyLCBEaXNrSW1hZ2VDYWNoZUlkIGlkKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpc2tJbWFnZUNhY2hl
OjpFbnRyeShidWZmZXIsIGlkKSk7CisgICAgICAgIH0KKworICAgICAgICB+RW50cnkoKTsKKwor
ICAgICAgICB2b2lkIG1hcChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICB2b2lkIHVubWFw
KCk7CisgICAgICAgIHZvaWQgcmVtb3ZlRmlsZSgpOworICAgICAgICB2b2lkIGNsZWFyRGF0YVdp
dGhvdXRNYXBwaW5nKCk7CisKKyAgICAgICAgRGlza0ltYWdlQ2FjaGVJZCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwaW5nOyB9
CisgICAgICAgIGJvb2wgaXNNYXBwZWQoKSBjb25zdCB7IHJldHVybiBtX21hcHBpbmcgIT0gbnVs
bHB0cjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBtYXBJbnRlcm5hbChjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgICAgICBpbnQgd3JpdGVUb0ZpbGVJbnRlcm5hbChQbGF0Zm9ybUZp
bGVIYW5kbGUpOworCisgICAgICAgIFNoYXJlZEJ1ZmZlciogbV9idWZmZXI7CisgICAgICAgIERp
c2tJbWFnZUNhY2hlSWQgbV9pZDsKKyAgICAgICAgdW5zaWduZWQgbV9zaXplOworICAgICAgICB2
b2lkKiBtX21hcHBpbmc7CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgfTsKKworcHVibGlj
OgorICAgIGZyaWVuZCBEaXNrSW1hZ2VDYWNoZSYgZGlza0ltYWdlQ2FjaGUoKTsKKyAgICBzdGF0
aWMgY29uc3QgRGlza0ltYWdlQ2FjaGVJZCBpbnZhbGlkRGlza0NhY2hlSWQgPSAwOworCisgICAg
Ly8gV3JpdGUgb3V0IGFuIGl0ZW0uCisgICAgRGlza0ltYWdlQ2FjaGVJZCB3cml0ZUl0ZW0oUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworICAgIC8vIFJlbW92ZSBpdGVtLgorICAgIHZvaWQg
cmVtb3ZlSXRlbShEaXNrSW1hZ2VDYWNoZUlkKTsKKworICAgIC8vIE1hcHBpbmcgZm9yIGFuIGl0
ZW0uCisgICAgdm9pZCogZGF0YUZvckl0ZW0oRGlza0ltYWdlQ2FjaGVJZCk7CisKKyAgICAvLyBT
ZXR1cCBhIGNsaWVudCBmb3IgY2FsbGJhY2tzLgorICAgIHZvaWQgc2V0Q2xpZW50KFBhc3NSZWZQ
dHI8RGlza0ltYWdlQ2FjaGVDbGllbnQ+IGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQor
CisgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KKyAgICB2
b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVuYWJsZWQ7IH0KKwor
ICAgIHVuc2lnbmVkIG1heGltdW1DYWNoZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1D
YWNoZVNpemU7IH0KKyAgICB2b2lkIHNldE1heGltdW1DYWNoZVNpemUodW5zaWduZWQgbWF4aW11
bSkgeyBtX21heGltdW1DYWNoZVNpemUgPSBtYXhpbXVtOyB9CisKKyAgICB1bnNpZ25lZCBtaW5p
bXVtSW1hZ2VTaXplKCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtSW1hZ2VTaXplOyB9CisgICAg
dm9pZCBzZXRNaW5pbXVtSW1hZ2VTaXplKHVuc2lnbmVkIG1pbmltdW0pIHsgbV9taW5pbXVtSW1h
Z2VTaXplID0gbWluaW11bTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVEaXJlY3Rvcnk7IH0KKworICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZSA+PSBtX21heGltdW1DYWNoZVNpemU7IH0KKworcHJpdmF0ZToKKyAgICBEaXNr
SW1hZ2VDYWNoZSgpOworICAgIH5EaXNrSW1hZ2VDYWNoZSgpIHsgfQorCisgICAgYm9vbCBjcmVh
dGVEaXJlY3RvcnlJZk5lZWRlZCgpOworICAgIERpc2tJbWFnZUNhY2hlSWQgbmV4dEF2YWlsYWJs
ZUlkKCk7CisKKyAgICBTdHJpbmcgdGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisgICAgU3RyaW5nIHRl
bXBvcmFyeUZpbGUoKTsKKworICAgIHZvaWQgdXBkYXRlU2l6ZSh1bnNpZ25lZCBkZWx0YSk7CisK
KyAgICBib29sIG1fZW5hYmxlZDsKKyAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgdW5zaWduZWQg
bV9tYXhpbXVtQ2FjaGVTaXplOworICAgIHVuc2lnbmVkIG1fbWluaW11bUltYWdlU2l6ZTsKKyAg
ICBEaXNrSW1hZ2VDYWNoZUlkIG1fbmV4dEF2YWlsYWJsZUlkOworICAgIFN0cmluZyBtX2NhY2hl
RGlyZWN0b3J5OworCisgICAgUmVmUHRyPERpc2tJbWFnZUNhY2hlQ2xpZW50PiBtX2NsaWVudDsK
KyAgICBIYXNoTWFwPERpc2tJbWFnZUNhY2hlSWQsIFJlZlB0cjxEaXNrSW1hZ2VDYWNoZTo6RW50
cnk+PiBtX3RhYmxlOworCisgICAgTXV0ZXggbV9tdXRleDsKK307CisKKy8vIEZ1bmN0aW9uIHRv
IG9idGFpbiB0aGUgZ2xvYmFsIGRpc2sgaW1hZ2UgY2FjaGUuCitEaXNrSW1hZ2VDYWNoZSYgZGlz
a0ltYWdlQ2FjaGUoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpCisKKyNlbmRpZiAvLyBEaXNrSW1hZ2VDYWNoZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRGlza0ltYWdlQ2FjaGVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9EaXNrSW1hZ2VDYWNoZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZh
N2EzYTBkYTEyNDhlZmJjYzBiOGNmYjQzMDMxNzkxYjY1NTUzNDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRGlza0ltYWdlQ2FjaGVDbGllbnQuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXNrSW1hZ2VDYWNoZUNsaWVudF9oCisjZGVm
aW5lIERpc2tJbWFnZUNhY2hlQ2xpZW50X2gKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hF
KQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXNrSW1hZ2VDYWNoZUNs
aWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPERpc2tJbWFnZUNhY2hlQ2xpZW50PiB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+RGlza0ltYWdlQ2FjaGVDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ3JlYXRlRGlza0ltYWdlQ2FjaGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnkpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShESVNLX0lNQUdFX0NBQ0hFKQorCisjZW5kaWYgLy8gRGlza0ltYWdlQ2FjaGVDbGllbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKaW5kZXggZGZiMmE0MjM2ODdl
MWIzZWM4NjgwZGYzMGIwOTRjYWUyZWQzNTgwMS4uZGFlMWMyZGU1NWFjYzZkODE3MDFlM2ZhYzZi
YTA3MjY4OTZmNDVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3Bw
CkBAIC0xMzIsNCArMTMyLDEyIEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFJlc291cmNlQnVmZmVy
OjpjcmVhdGVDRkRhdGEoKQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNI
RSkKK2Jvb2wgUmVzb3VyY2VCdWZmZXI6OmlzVXNpbmdEaXNrSW1hZ2VDYWNoZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsKKyAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXIg
JiYgbV9zaGFyZWRCdWZmZXItPmlzQWxsb3dlZFRvQmVNZW1vcnlNYXBwZWQoKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1
ZmZlci5oCmluZGV4IDQ0Mzg5Y2UzMDQxNTZkYTA3OTNmZTVlZDY1Y2UwNGQzMzg1ZTI1ZDQuLjVk
YzJkOTU3MWIzNTNiZjQ5MDVjN2MyZjE0OTQxMzYxYTI3M2U2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUJ1ZmZlci5oCkBAIC04MSw2ICs4MSw5IEBAIHB1YmxpYzoKICNpZiBVU0Uo
Q0YpCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY3JlYXRlQ0ZEYXRhKCk7CiAjZW5kaWYKKyNp
ZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAgICBib29sIGlzVXNpbmdEaXNrSW1hZ2VDYWNo
ZSgpIGNvbnN0OworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBSZXNvdXJjZUJ1ZmZlcigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXggMjliMzEx
ZGZiZjM5NzNlYjI2MTlkYmI2NmIyMWQwNzZmM2JhMTc2NS4uN2Q4YmNjODVlNGZmY2RjMmVhZTg3
NTVhNDkyMTc5OTA0OGExNWY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwCkBAIC01Miw2ICs1MiwxMCBAQAogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorI2luY2x1ZGUgIkRpc2tJbWFn
ZUNhY2hlLmgiCisjZW5kaWYKKwogdXNpbmcgc3RkOjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUzMiw0ICs1MzYsNDEgQEAgYm9vbCBDYWNoZWRJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIGlt
YWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKIH0KIAorI2lmIEVOQUJMRShESVNL
X0lNQUdFX0NBQ0hFKQorYm9vbCBDYWNoZWRJbWFnZTo6Y2FuVXNlRGlza0ltYWdlQ2FjaGUoKSBj
b25zdAoreworICAgIGlmIChpc0xvYWRpbmcoKSB8fCBlcnJvck9jY3VycmVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoaXNQdXJnZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fZGF0YS0+c2l6ZSgpIDwgZGlza0ltYWdlQ2FjaGUoKS5taW5pbXVtSW1hZ2VTaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJDYWNoZS1Db250cm9sOiBuby1zdG9y
ZSIgcmVzb3VyY2VzIG1heSBiZSBtYXJrZWQgYXMgc3VjaCBiZWNhdXNlIHRoZXkgbWF5CisgICAg
Ly8gY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFdlIHNob3VsZCBub3Qgd3JpdGUgdGhl
c2UgcmVzb3VyY2VzIHRvIGRpc2suCisgICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29u
dGFpbnNOb1N0b3JlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRlc3Rpbmcg
c2hvd3MgdGhhdCBQREYgaW1hZ2VzIGRpZCBub3Qgd29yayB3aGVuIG1lbW9yeSBtYXBwZWQuCisg
ICAgLy8gSG93ZXZlciwgU1ZHIGltYWdlcyBhbmQgQml0bWFwIGltYWdlcyB3ZXJlIGZpbmUuIFNl
ZToKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vODU5MTgzND4gRGlzayBJbWFnZSBDYWNoZSBzaG91
bGQgc3VwcG9ydCBQREYgSW1hZ2VzCisgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAi
YXBwbGljYXRpb24vcGRmIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnVzZURpc2tJbWFnZUNhY2hlKCkKK3sKKyAgICBB
U1NFUlQoY2FuVXNlRGlza0ltYWdlQ2FjaGUoKSk7CisgICAgQVNTRVJUKCFpc1VzaW5nRGlza0lt
YWdlQ2FjaGUoKSk7CisgICAgbV9kYXRhLT5zaGFyZWRCdWZmZXIoKS0+YWxsb3dUb0JlTWVtb3J5
TWFwcGVkKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAppbmRleCA0MzFiNzQwNjI2YTg2ZGI3OTll
ZGM5YTY3MjMzNzdkNzM3ODkyODNmLi5lYmNiNGQ5NzdiZjhhMmUwZjk1NzZlMmI3YmNmOTc1ZWIw
YzRkZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaApAQCAt
NzcsNiArNzcsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVzdW1lQW5pbWF0aW5n
SW1hZ2VzRm9yTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKKyNpZiBFTkFCTEUoRElT
S19JTUFHRV9DQUNIRSkKKyAgICB2aXJ0dWFsIGJvb2wgY2FuVXNlRGlza0ltYWdlQ2FjaGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXNlRGlza0ltYWdlQ2FjaGUoKSBPVkVS
UklERTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgT1ZFUlJJREU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4
IGYzNjFhZmYzNGUwOTg4YjMzYTlkMzRhMzRhMGQ4ZTAxNTAwMWQ0NTMuLmEyZTE4YjFmYjY5ZjYx
ZjM2YTQyZTQ3YmQyNTFlMTMwYTIzOTZmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAtODI2LDYgKzgyNiwxNCBAQCBib29sIENhY2hl
ZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZUR1ZVRvQ2FjaGVIZWFkZXJzKENhY2hlUG9saWN5IGNh
Y2hlUG9saWN5KSBjbwogCiBib29sIENhY2hlZFJlc291cmNlOjppc1NhZmVUb01ha2VQdXJnZWFi
bGUoKSBjb25zdAogeyAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAgICAvLyBJdCBk
b2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgYSByZXNvdXJjZSBpbiB0aGUgZGlzayBpbWFnZSBj
YWNoZQorICAgIC8vIChtZW1vcnkgbWFwcGVkIG9uIGRpc2spIGFuZCBwdXJnZWFibGUgKGluIG1l
bW9yeSkuIFNvIGRvIG5vdCBhbGxvdworICAgIC8vIGRpc2sgaW1hZ2UgY2FjaGVkIHJlc291cmNl
cyB0byBiZSBwdXJnZWFibGUuCisgICAgaWYgKGlzVXNpbmdEaXNrSW1hZ2VDYWNoZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIHJldHVybiAhaGFzQ2xpZW50cygpICYm
ICFtX3Byb3h5UmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGU7CiB9CiAKQEAgLTkx
NCw2ICs5MjIsMTMgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2VDYWxsYmFj
azo6dGltZXJGaXJlZChUaW1lcjxDYWNoZWRSZXNvdXJjZUNhbGwKICAgICBtX3Jlc291cmNlLT5k
aWRBZGRDbGllbnQobV9jbGllbnQpOwogfQogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUp
Citib29sIENhY2hlZFJlc291cmNlOjppc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5pc1VzaW5nRGlza0ltYWdlQ2FjaGUoKTsKK30K
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVw
bGFjZUVuY29kZWREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBuZXdCdWZmZXIpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmluZGV4IDhlZmU5
NDkyOGZkYjc1OGY0NWUxNDk2YWMxMTNhYWM1ZWRmZjZmY2EuLjkxNjJhYmYzMWQxMDc2ZjExYWIz
NjIwMzk3NWFkY2ZhOGNjZDM0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCkBAIC0yNDksNiArMjQ5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExvYWRGaW5pc2hUaW1lKGRvdWJsZSBmaW5pc2hUaW1lKSB7IG1fbG9hZEZpbmlzaFRpbWUgPSBm
aW5pc2hUaW1lOyB9CiAgICAgZG91YmxlIGxvYWRGaW5pc2hUaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9sb2FkRmluaXNoVGltZTsgfQogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAg
Ym9vbCBpc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2Fu
VXNlRGlza0ltYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
dm9pZCB1c2VEaXNrSW1hZ2VDYWNoZSgpIHsgQVNTRVJUKGNhblVzZURpc2tJbWFnZUNhY2hlKCkp
OyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9vbCBjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCBiNjcyMzM4NmEy
MThiMTkzOGM3OTY1MzcwYmZlZDQ1MTM4YTc3Mzg4Li5mZjNlZDU2MGMzN2UxNGIyMzMwZjFlNWNl
MzEzMDgyNWYyNTU5YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5jcHAKQEAgLTQ0LDYgKzQ0LDExIEBACiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5n
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVOQUJMRShESVNLX0lN
QUdFX0NBQ0hFKQorI2luY2x1ZGUgIkRpc2tJbWFnZUNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VCdWZmZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zNzgsNiArMzgzLDQ1IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lRGVh
ZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgIH0KIH0KIAorI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKQordm9pZCBNZW1vcnlDYWNoZTo6Zmx1c2hDYWNoZWRJbWFn
ZXNUb0Rpc2soKQoreworICAgIGlmICghZGlza0ltYWdlQ2FjaGUoKS5pc0VuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisjaWZuZGVmIE5ERUJVRworICAgIGRvdWJsZSBzdGFydCA9IFdURjo6
Y3VycmVudFRpbWVNUygpOworICAgIHVuc2lnbmVkIHJlc291cmNlQ291bnQgPSAwOworICAgIHVu
c2lnbmVkIGNhY2hlZFNpemUgPSAwOworI2VuZGlmCisKKyAgICBmb3IgKHNpemVfdCBpID0gbV9h
bGxSZXNvdXJjZXMuc2l6ZSgpOyBpOyApIHsKKyAgICAgICAgLS1pOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ldLm1fdGFpbDsKKyAgICAgICAgd2hp
bGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2aW91cyA9IGN1
cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKKworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LT5pc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSAmJiBjdXJyZW50LT5jYW5Vc2VEaXNrSW1hZ2VD
YWNoZSgpKSB7CisgICAgICAgICAgICAgICAgY3VycmVudC0+dXNlRGlza0ltYWdlQ2FjaGUoKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50LT5kZXN0cm95RGVjb2RlZERhdGEoKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgICAgICAgICAgTE9HKERpc2tJbWFnZUNhY2hlLCAiQ2FjaGU6OmRpc2tD
YWNoZVJlc291cmNlcygpOiBhdHRlbXB0aW5nIHRvIHNhdmUgKCVkKSBieXRlcyIsIGN1cnJlbnQt
PnJlc291cmNlQnVmZmVyKCktPnNoYXJlZEJ1ZmZlcigpLT5zaXplKCkpOworICAgICAgICAgICAg
ICAgICsrcmVzb3VyY2VDb3VudDsKKyAgICAgICAgICAgICAgICBjYWNoZWRTaXplICs9IGN1cnJl
bnQtPnJlc291cmNlQnVmZmVyKCktPnNoYXJlZEJ1ZmZlcigpLT5zaXplKCk7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VycmVudCA9IHByZXZpb3VzOworICAgICAgICB9
CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIGRvdWJsZSBlbmQgPSBXVEY6OmN1cnJlbnRU
aW1lTVMoKTsKKyAgICBMT0coRGlza0ltYWdlQ2FjaGUsICJEaXNrSW1hZ2VDYWNoZTogdG9vayAo
JWYpIG1zIHRvIGNhY2hlICglZCkgYnl0ZXMgZm9yICglZCkgcmVzb3VyY2VzIiwgZW5kIC0gc3Rh
cnQsIGNhY2hlZFNpemUsIHJlc291cmNlQ291bnQpOworI2VuZGlmCit9CisjZW5kaWYgLy8gRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpCisKIHZvaWQgTWVtb3J5Q2FjaGU6OnNldENhcGFjaXRpZXMo
dW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhEZWFkQnl0ZXMsIHVuc2lnbmVkIHRv
dGFsQnl0ZXMpCiB7CiAgICAgQVNTRVJUKG1pbkRlYWRCeXRlcyA8PSBtYXhEZWFkQnl0ZXMpOwpA
QCAtNzQzLDYgKzc4NywxMCBAQCB2b2lkIE1lbW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljOjphZGRS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogbykKICAgICBkZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVk
U2l6ZSgpOwogICAgIHB1cmdlYWJsZVNpemUgKz0gcHVyZ2VhYmxlID8gcGFnZVNpemUgOiAwOwog
ICAgIHB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOworI2lmIEVOQUJMRShESVNL
X0lNQUdFX0NBQ0hFKQorICAgIC8vIE9ubHkgdGhlIGRhdGEgaW5zaWRlIHRoZSByZXNvdXJjZSB3
YXMgbWFwcGVkLCBub3QgdGhlIGVudGlyZSByZXNvdXJjZS4KKyAgICBtYXBwZWRTaXplICs9IG8t
PmlzVXNpbmdEaXNrSW1hZ2VDYWNoZSgpID8gby0+cmVzb3VyY2VCdWZmZXIoKS0+c2hhcmVkQnVm
ZmVyKCktPnNpemUoKSA6IDA7CisjZW5kaWYKIH0KIAogTWVtb3J5Q2FjaGU6OlN0YXRpc3RpY3Mg
TWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQpAQCAtODMyLDkgKzg4MCwxNSBAQCB2b2lkIE1l
bW9yeUNhY2hlOjpwcnVuZVRvUGVyY2VudGFnZShmbG9hdCB0YXJnZXRQZXJjZW50TGl2ZSkKIHZv
aWQgTWVtb3J5Q2FjaGU6OmR1bXBTdGF0cygpCiB7CiAgICAgU3RhdGlzdGljcyBzID0gZ2V0U3Rh
dGlzdGljcygpOworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIHByaW50ZigiJS0x
M3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICIi
LCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIsICJQdXJnZWFibGVT
aXplIiwgIlB1cmdlZFNpemUiLCAiTWFwcGVkIiwgIlwiUmVhbFwiIik7CisgICAgcHJpbnRmKCIl
LTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuIiwg
Ii0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7CisgICAgcHJpbnRmKCIlLTEz
cyAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJJbWFnZXMiLCBz
LmltYWdlcy5jb3VudCwgcy5pbWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMuaW1hZ2Vz
LmRlY29kZWRTaXplLCBzLmltYWdlcy5wdXJnZWFibGVTaXplLCBzLmltYWdlcy5wdXJnZWRTaXpl
LCBzLmltYWdlcy5tYXBwZWRTaXplLCBzLmltYWdlcy5zaXplIC0gcy5pbWFnZXMubWFwcGVkU2l6
ZSk7CisjZWxzZQogICAgIHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0x
M3MgJS0xM3NcbiIsICIiLCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6
ZSIsICJQdXJnZWFibGVTaXplIiwgIlB1cmdlZFNpemUiKTsKICAgICBwcmludGYoIiUtMTNzICUt
MTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG4iLCAiLS0tLS0tLS0tLS0tLSIsICIt
LS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0t
LS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIpOwogICAgIHByaW50Zigi
JS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJJbWFnZXMiLCBzLmltYWdl
cy5jb3VudCwgcy5pbWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMuaW1hZ2VzLmRlY29k
ZWRTaXplLCBzLmltYWdlcy5wdXJnZWFibGVTaXplLCBzLmltYWdlcy5wdXJnZWRTaXplKTsKKyNl
bmRpZgogICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIs
ICJDU1MiLCBzLmNzc1N0eWxlU2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMu
Y3NzU3R5bGVTaGVldHMubGl2ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUsIHMu
Y3NzU3R5bGVTaGVldHMucHVyZ2VhYmxlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXpl
KTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUx
M2QgJTEzZCAlMTNkXG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHls
ZVNoZWV0cy5zaXplLCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRz
LmRlY29kZWRTaXplLCBzLnhzbFN0eWxlU2hlZXRzLnB1cmdlYWJsZVNpemUsIHMueHNsU3R5bGVT
aGVldHMucHVyZ2VkU2l6ZSk7CkBAIC04NDYsNyArOTAwLDExIEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OmR1bXBTdGF0cygpCiAKIHZvaWQgTWVtb3J5Q2FjaGU6OmR1bXBMUlVMaXN0cyhib29sIGluY2x1
ZGVMaXZlKSBjb25zdAogeworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIHByaW50
ZigiTFJVLVNQIGxpc3RzIGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVjb2RlZCwgS2ls
b2J5dGVzIGVuY29kZWQsIEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCwgaXNQdXJnZWFibGUsIHdh
c1B1cmdlZCwgaXNNZW1vcnlNYXBwZWQpOlxuIik7CisjZWxzZQogICAgIHByaW50ZigiTFJVLVNQ
IGxpc3RzIGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVjb2RlZCwgS2lsb2J5dGVzIGVu
Y29kZWQsIEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCwgaXNQdXJnZWFibGUsIHdhc1B1cmdlZCk6
XG4iKTsKKyNlbmRpZgogCiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7CiAg
ICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewpAQCAtODU1LDcgKzkxMywx
MSBAQCB2b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29u
c3QKICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgICAgIENhY2hlZFJlc291cmNl
KiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwogICAgICAgICAgICAg
aWYgKGluY2x1ZGVMaXZlIHx8ICFjdXJyZW50LT5oYXNDbGllbnRzKCkpCisjaWYgRU5BQkxFKERJ
U0tfSU1BR0VfQ0FDSEUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIoJS4xZkssICUuMWZLLCAl
dUEsICVkUiwgJWQsICVkLCAlZCk7ICIsIGN1cnJlbnQtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBm
LCAoY3VycmVudC0+ZW5jb2RlZFNpemUoKSArIGN1cnJlbnQtPm92ZXJoZWFkU2l6ZSgpKSAvIDEw
MjQuMGYsIGN1cnJlbnQtPmFjY2Vzc0NvdW50KCksIGN1cnJlbnQtPmhhc0NsaWVudHMoKSwgY3Vy
cmVudC0+aXNQdXJnZWFibGUoKSwgY3VycmVudC0+d2FzUHVyZ2VkKCksIGN1cnJlbnQtPmlzVXNp
bmdEaXNrSW1hZ2VDYWNoZSgpKTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIoJS4x
ZkssICUuMWZLLCAldUEsICVkUiwgJWQsICVkKTsgIiwgY3VycmVudC0+ZGVjb2RlZFNpemUoKSAv
IDEwMjQuMGYsIChjdXJyZW50LT5lbmNvZGVkU2l6ZSgpICsgY3VycmVudC0+b3ZlcmhlYWRTaXpl
KCkpIC8gMTAyNC4wZiwgY3VycmVudC0+YWNjZXNzQ291bnQoKSwgY3VycmVudC0+aGFzQ2xpZW50
cygpLCBjdXJyZW50LT5pc1B1cmdlYWJsZSgpLCBjdXJyZW50LT53YXNQdXJnZWQoKSk7CisjZW5k
aWYKIAogICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKaW5kZXggMmJhM2FkYmE0NjBlMzRlMDhjOWUw
ZThmMDg3Y2M2MmRjYTk1Njg3YS4uNmMwOTJkZDVhMGI4ODdlZTA4MDc4NDJhZjgyMDViOTk5OTY5
NzM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKQEAgLTEw
MCw3ICsxMDAsMTIgQEAgcHVibGljOgogICAgICAgICBpbnQgZGVjb2RlZFNpemU7CiAgICAgICAg
IGludCBwdXJnZWFibGVTaXplOwogICAgICAgICBpbnQgcHVyZ2VkU2l6ZTsKKyNpZiBFTkFCTEUo
RElTS19JTUFHRV9DQUNIRSkKKyAgICAgICAgaW50IG1hcHBlZFNpemU7CisgICAgICAgIFR5cGVT
dGF0aXN0aWMoKSA6IGNvdW50KDApLCBzaXplKDApLCBsaXZlU2l6ZSgwKSwgZGVjb2RlZFNpemUo
MCksIHB1cmdlYWJsZVNpemUoMCksIHB1cmdlZFNpemUoMCksIG1hcHBlZFNpemUoMCkgeyB9Cisj
ZWxzZQogICAgICAgICBUeXBlU3RhdGlzdGljKCkgOiBjb3VudCgwKSwgc2l6ZSgwKSwgbGl2ZVNp
emUoMCksIGRlY29kZWRTaXplKDApLCBwdXJnZWFibGVTaXplKDApLCBwdXJnZWRTaXplKDApIHsg
fQorI2VuZGlmCiAgICAgICAgIHZvaWQgYWRkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsKICAg
ICB9OwogICAgIApAQCAtMTYwLDYgKzE2NSwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9v
bCBzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKCk7CiAKKyNpZiBFTkFCTEUo
RElTS19JTUFHRV9DQUNIRSkKKyAgICB2b2lkIGZsdXNoQ2FjaGVkSW1hZ2VzVG9EaXNrKCk7IC8v
IEZsdXNoIGVuY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IHdl
YiBwYWdlcy4KKyNlbmRpZgorCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlVXJsRnJvbUNhY2hlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlUmVxdWVzdEZyb21DYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9pb3MvRGlza0ltYWdlQ2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaW9z
L0Rpc2tJbWFnZUNhY2hlSU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMTNjYjk5ZjliN2UxMDg3NjU5ZDAw
Y2RjZmU0YWM1N2YwOWJhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaW9zL0Rpc2tJbWFnZUNhY2hlSU9TLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlza0ltYWdlQ2FjaGUuaCIKKworI2lm
IFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisKKyNpbXBvcnQgIkZp
bGVTeXN0ZW1JT1MuaCIKKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1N0cmluZyBEaXNrSW1hZ2VDYWNoZTo6dGVtcG9yYXJ5RGlyZWN0b3J5
KCkKK3sKKyAgICBOU1N0cmluZyAqdGVtcERpc2tDYWNoZURpcmVjdG9yeSA9IGNyZWF0ZVRlbXBv
cmFyeURpcmVjdG9yeShAIkRpc2tJbWFnZUNhY2hlIik7CisgICAgaWYgKCF0ZW1wRGlza0NhY2hl
RGlyZWN0b3J5KQorICAgICAgICBMT0dfRVJST1IoIkRpc2tJbWFnZUNhY2hlOiBDb3VsZCBub3Qg
Y3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iKTsKKworICAgIHJldHVybiB0ZW1wRGlza0Nh
Y2hlRGlyZWN0b3J5OworfQorCitTdHJpbmcgRGlza0ltYWdlQ2FjaGU6OnRlbXBvcmFyeUZpbGUo
KQoreworICAgIE5TU3RyaW5nICp0ZW1wRmlsZSA9IGNyZWF0ZVRlbXBvcmFyeUZpbGUobV9jYWNo
ZURpcmVjdG9yeSwgQCJ0bXAiKTsKKyAgICBpZiAoIXRlbXBGaWxlKQorICAgICAgICBMT0dfRVJS
T1IoIkRpc2tJbWFnZUNhY2hlOiBDb3VsZCBub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuIik7
CisKKyAgICByZXR1cm4gdGVtcEZpbGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggOWUwNGU1OThlNjE4OTA3NjA1ZmUyMTQ1YzE0YWZl
OTg4ZDA5MDgyNS4uMWJhYWIzMDNhMGUzZmVjNWMyZTI1YmU3MDQ1MjNjZWQzYjVhYjQ0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0oQmFja0ZvcndhcmQpIFwKICAgICBNKENv
bXBvc2l0aW5nKSBcCisgICAgTShEaXNrSW1hZ2VDYWNoZSkgXAogICAgIE0oRWRpdGluZykgXAog
ICAgIE0oRXZlbnRzKSBcCiAgICAgTShGVFApIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCmluZGV4IDMzODQ1MTU5YzA3NmJlM2NiMjFmYmZlYjUzN2RkNTE4NTNjYjM5
ZTAuLjk3YmVjODNkMmQwMmJhN2E3MjMwOTJiMTJkNWNlZDI1YTNjMTViZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5o
PgogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisjaW5jbHVkZSAiRGlza0ltYWdlQ2Fj
aGUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC02MSwxNyArNjUsMzUgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVTZWdtZW50KGNo
YXIqIHApCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKICAgICA6IG1fc2l6ZSgwKQor
I2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgICwgbV9pc01lbW9yeU1hcHBlZChmYWxz
ZSkKKyAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tD
YWNoZUlkKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRyKQorICAg
ICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKKyNlbmRpZgogewog
fQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihzaXplX3Qgc2l6ZSkKICAgICA6IG1fc2l6
ZShzaXplKQogICAgICwgbV9idWZmZXIoc2l6ZSkKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNI
RSkKKyAgICAsIG1faXNNZW1vcnlNYXBwZWQoZmFsc2UpCisgICAgLCBtX2Rpc2tJbWFnZUNhY2hl
SWQoRGlza0ltYWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJZCkKKyAgICAsIG1fbm90aWZ5TWVt
b3J5TWFwcGVkQ2FsbGJhY2sobnVsbHB0cikKKyAgICAsIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2Fs
bGJhY2tEYXRhKG51bGxwdHIpCisjZW5kaWYKIHsKIH0KIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRC
dWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCiAgICAgOiBtX3NpemUoMCkKKyNpZiBF
TkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAgICAsIG1faXNNZW1vcnlNYXBwZWQoZmFsc2UpCisg
ICAgLCBtX2Rpc2tJbWFnZUNhY2hlSWQoRGlza0ltYWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJ
ZCkKKyAgICAsIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2sobnVsbHB0cikKKyAgICAsIG1f
bm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2tEYXRhKG51bGxwdHIpCisjZW5kaWYKIHsKICAgICAv
LyBGSVhNRTogVXNlIHVuc2lnbmVkIGNvbnNpc3RlbnRseSwgYW5kIGNoZWNrIGZvciBpbnZhbGlk
IGNhc3RzIHdoZW4gY2FsbGluZyBpbnRvIFNoYXJlZEJ1ZmZlciBmcm9tIG90aGVyIGNvZGUuCiAg
ICAgaWYgKHNpemUgPCAwKQpAQCAtODIsNiArMTA0LDEyIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQogCiBTaGFyZWRCdWZmZXI6OlNoYXJl
ZEJ1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKICAgICA6IG1fc2l6
ZSgwKQorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgICwgbV9pc01lbW9yeU1hcHBl
ZChmYWxzZSkKKyAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxp
ZERpc2tDYWNoZUlkKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRy
KQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKKyNlbmRp
ZgogewogICAgIC8vIEZJWE1FOiBVc2UgdW5zaWduZWQgY29uc2lzdGVudGx5LCBhbmQgY2hlY2sg
Zm9yIGludmFsaWQgY2FzdHMgd2hlbiBjYWxsaW5nIGludG8gU2hhcmVkQnVmZmVyIGZyb20gb3Ro
ZXIgY29kZS4KICAgICBpZiAoc2l6ZSA8IDApCkBAIC05Miw2ICsxMjAsMTMgQEAgU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgaW50IHNpemUpCiAg
ICAgCiBTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIoKQogeworI2lmIEVOQUJMRShESVNLX0lN
QUdFX0NBQ0hFKQorICAgIGlmIChtX2Rpc2tJbWFnZUNhY2hlSWQpIHsKKyAgICAgICAgZGlza0lt
YWdlQ2FjaGUoKS5yZW1vdmVJdGVtKG1fZGlza0ltYWdlQ2FjaGVJZCk7CisgICAgICAgIG1faXNN
ZW1vcnlNYXBwZWQgPSBmYWxzZTsKKyAgICAgICAgbV9kaXNrSW1hZ2VDYWNoZUlkID0gRGlza0lt
YWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJZDsKKyAgICB9CisjZW5kaWYKICAgICBjbGVhcigp
OwogfQogCkBAIC0xMjIsNiArMTU3LDY2IEBAIHVuc2lnbmVkIFNoYXJlZEJ1ZmZlcjo6c2l6ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NB
Q0hFKQorYm9vbCBTaGFyZWRCdWZmZXI6OmlzQWxsb3dlZFRvQmVNZW1vcnlNYXBwZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2Rpc2tJbWFnZUNhY2hlSWQgIT0gRGlza0ltYWdlQ2FjaGU6Omlu
dmFsaWREaXNrQ2FjaGVJZDsKK30KKworU2hhcmVkQnVmZmVyOjpNZW1vcnlNYXBwaW5nU3RhdGUg
U2hhcmVkQnVmZmVyOjphbGxvd1RvQmVNZW1vcnlNYXBwZWQoKQoreworICAgIGlmIChpc01lbW9y
eU1hcHBlZCgpKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpTdWNjZXNzQWxyZWFkeU1h
cHBlZDsKKworICAgIGlmIChpc0FsbG93ZWRUb0JlTWVtb3J5TWFwcGVkKCkpCisgICAgICAgIHJl
dHVybiBTaGFyZWRCdWZmZXI6OlByZXZpb3VzbHlRdWV1ZWRGb3JNYXBwaW5nOworCisgICAgbV9k
aXNrSW1hZ2VDYWNoZUlkID0gZGlza0ltYWdlQ2FjaGUoKS53cml0ZUl0ZW0odGhpcyk7CisgICAg
aWYgKG1fZGlza0ltYWdlQ2FjaGVJZCA9PSBEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNo
ZUlkKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpGYWlsdXJlQ2FjaGVGdWxsOworCisg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6UXVldWVkRm9yTWFwcGluZzsKK30KKwordm9pZCBTaGFy
ZWRCdWZmZXI6OmZhaWxlZE1lbW9yeU1hcCgpCit7CisgICAgaWYgKG1fbm90aWZ5TWVtb3J5TWFw
cGVkQ2FsbGJhY2spCisgICAgICAgIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2sodGhpcywg
U2hhcmVkQnVmZmVyOjpGYWlsZWQsIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2tEYXRhKTsK
K30KKwordm9pZCBTaGFyZWRCdWZmZXI6Om1hcmtBc01lbW9yeU1hcHBlZCgpCit7CisgICAgQVNT
RVJUKCFpc01lbW9yeU1hcHBlZCgpKTsKKworICAgIG1faXNNZW1vcnlNYXBwZWQgPSB0cnVlOwor
ICAgIHVuc2lnbmVkIHNhdmVkU2l6ZSA9IHNpemUoKTsKKyAgICBjbGVhcigpOworICAgIG1fc2l6
ZSA9IHNhdmVkU2l6ZTsKKworICAgIGlmIChtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrKQor
ICAgICAgICBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6
U3VjY2VlZGVkLCBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrRGF0YSk7Cit9CisKK1NoYXJl
ZEJ1ZmZlcjo6TWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhIFNoYXJlZEJ1ZmZlcjo6bWVt
b3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2tEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGE7Cit9CisKK1NoYXJlZEJ1ZmZlcjo6TWVt
b3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2sgU2hhcmVkQnVmZmVyOjptZW1vcnlNYXBwZWROb3RpZmlj
YXRpb25DYWxsYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm90aWZ5TWVtb3J5TWFwcGVk
Q2FsbGJhY2s7Cit9CisKK3ZvaWQgU2hhcmVkQnVmZmVyOjpzZXRNZW1vcnlNYXBwZWROb3RpZmlj
YXRpb25DYWxsYmFjayhNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFjayBjYWxsYmFjaywgTWVtb3J5
TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhIGRhdGEpCit7CisgICAgQVNTRVJUKCFtX25vdGlmeU1l
bW9yeU1hcHBlZENhbGxiYWNrIHx8ICFjYWxsYmFjayk7CisgICAgQVNTRVJUKCFtX25vdGlmeU1l
bW9yeU1hcHBlZENhbGxiYWNrRGF0YSB8fCAhZGF0YSk7CisKKyAgICBtX25vdGlmeU1lbW9yeU1h
cHBlZENhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFj
a0RhdGEgPSBkYXRhOworfQorI2VuZGlmCisKIHZvaWQgU2hhcmVkQnVmZmVyOjpjcmVhdGVQdXJn
ZWFibGVCdWZmZXIoKSBjb25zdAogewogICAgIGlmIChtX3B1cmdlYWJsZUJ1ZmZlcikKQEAgLTE0
MCw2ICsyMzUsMTEgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcigp
IGNvbnN0CiAKIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiB7CisjaWYg
RU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAgaWYgKGlzTWVtb3J5TWFwcGVkKCkpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGlza0ltYWdlQ2FjaGUoKS5kYXRh
Rm9ySXRlbShtX2Rpc2tJbWFnZUNhY2hlSWQpKTsKKyNlbmRpZgorCiAgICAgaWYgKGhhc1BsYXRm
b3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRhKCk7CiAKQEAgLTE2Nyw2ICsy
NjcsOSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHZv
aWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIEFTU0VSVCghbV9wdXJnZWFibGVCdWZmZXIpOworI2lmIEVOQUJMRShESVNLX0lN
QUdFX0NBQ0hFKQorICAgIEFTU0VSVCghaXNNZW1vcnlNYXBwZWQoKSk7CisjZW5kaWYKICAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjUsNiArMzY4LDkgQEAgUGFzc093
blB0cjxQdXJnZWFibGVCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6cmVsZWFzZVB1cmdlYWJsZUJ1ZmZl
cigpCiAKIGNvbnN0IFZlY3RvcjxjaGFyPiYgU2hhcmVkQnVmZmVyOjpidWZmZXIoKSBjb25zdAog
eworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIEFTU0VSVCghaXNNZW1vcnlNYXBw
ZWQoKSk7CisjZW5kaWYKICAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gbV9idWZmZXIuc2l6ZSgp
OwogICAgIGlmIChtX3NpemUgPiBidWZmZXJTaXplKSB7CiAgICAgICAgIG1fYnVmZmVyLnJlc2l6
ZShtX3NpemUpOwpAQCAtMjk0LDYgKzQwMCwxNSBAQCB1bnNpZ25lZCBTaGFyZWRCdWZmZXI6Omdl
dFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBzb21lRGF0YSwgdW5zaWduZWQgcG9zaXRpb24pIGNvbgog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkK
KyAgICBBU1NFUlQocG9zaXRpb24gPCBzaXplKCkpOworICAgIGlmIChpc01lbW9yeU1hcHBlZCgp
KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGlza0ltYWdlQ2FjaGUoKS5kYXRhRm9ySXRlbShtX2Rpc2tJbWFnZUNhY2hlSWQpKTsKKyAgICAg
ICAgc29tZURhdGEgPSBkYXRhICsgcG9zaXRpb247CisgICAgICAgIHJldHVybiBzaXplKCkgLSBw
b3NpdGlvbjsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChoYXNQbGF0Zm9ybURhdGEoKSB8fCBt
X3B1cmdlYWJsZUJ1ZmZlcikgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihwb3NpdGlvbiA8IHNpemUoKSk7CiAgICAgICAgIHNvbWVEYXRhID0gZGF0YSgpICsgcG9z
aXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDU4NDg1ZDFj
MmNlYjg4ODc3ZGI4MGZhYjQ2NzliY2NkOTFiNTk3M2YuLjAzMjU4Njk4MWRjYjVhZWEzOWExNGRk
OWE2Yjc4YTQ1YWZkNGM0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CkBAIC0xMzAsNiArMTMwLDMwIEBAIHB1YmxpYzoKICAgICAvLyAgICAgIH0KICAgICB1bnNpZ25l
ZCBnZXRTb21lRGF0YShjb25zdCBjaGFyKiYgZGF0YSwgdW5zaWduZWQgcG9zaXRpb24gPSAwKSBj
b25zdDsKIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIGVudW0gTWVtb3J5TWFw
cGluZ1N0YXRlIHsgUXVldWVkRm9yTWFwcGluZywgUHJldmlvdXNseVF1ZXVlZEZvck1hcHBpbmcs
IFN1Y2Nlc3NBbHJlYWR5TWFwcGVkLCBGYWlsdXJlQ2FjaGVGdWxsIH07CisKKyAgICAvLyBDYWxs
aW5nIHRoaXMgd2lsbCBjYXVzZSB0aGlzIGJ1ZmZlciB0byBiZSBtZW1vcnkgbWFwcGVkLgorICAg
IE1lbW9yeU1hcHBpbmdTdGF0ZSBhbGxvd1RvQmVNZW1vcnlNYXBwZWQoKTsKKyAgICBib29sIGlz
QWxsb3dlZFRvQmVNZW1vcnlNYXBwZWQoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgY2FsbGVk
IHRvIGluZGljYXRlIHRoYXQgdGhlIG1lbW9yeSBtYXBwaW5nIGZhaWxlZC4KKyAgICB2b2lkIGZh
aWxlZE1lbW9yeU1hcCgpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgb25seSBvbmNlIHRoZSBi
dWZmZXIgaGFzIGJlZW4gY29tcGxldGVseSBtZW1vcnkgbWFwcGVkLgorICAgIHZvaWQgbWFya0Fz
TWVtb3J5TWFwcGVkKCk7CisgICAgYm9vbCBpc01lbW9yeU1hcHBlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNNZW1vcnlNYXBwZWQ7IH0KKworICAgIC8vIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2ls
bCBiZSBjYWxsZWQgd2hlbiBlaXRoZXIgdGhlIGJ1ZmZlciBoYXMgYmVlbiBtZW1vcnkgbWFwcGVk
IG9yIGZhaWxlZCB0byBiZSBtZW1vcnkgbWFwcGVkLgorICAgIGVudW0gQ29tcGxldGlvblN0YXR1
cyB7IEZhaWxlZCwgU3VjY2VlZGVkIH07CisgICAgdHlwZWRlZiB2b2lkKiBNZW1vcnlNYXBwZWRO
b3RpZnlDYWxsYmFja0RhdGE7CisgICAgdHlwZWRlZiB2b2lkICgqTWVtb3J5TWFwcGVkTm90aWZ5
Q2FsbGJhY2spKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgQ29tcGxldGlvblN0YXR1cywgTWVt
b3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhKTsKKworICAgIE1lbW9yeU1hcHBlZE5vdGlmeUNh
bGxiYWNrRGF0YSBtZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFja0RhdGEoKSBjb25zdDsK
KyAgICBNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFjayBtZW1vcnlNYXBwZWROb3RpZmljYXRpb25D
YWxsYmFjaygpIGNvbnN0OworICAgIHZvaWQgc2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2Fs
bGJhY2soTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2ssIE1lbW9yeU1hcHBlZE5vdGlmeUNhbGxi
YWNrRGF0YSk7CisjZW5kaWYKKwogICAgIHZvaWQgY3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29u
c3Q7CiAKICAgICB2b2lkIHRyeVJlcGxhY2VDb250ZW50c1dpdGhQbGF0Zm9ybUJ1ZmZlcihTaGFy
ZWRCdWZmZXIqKTsKQEAgLTE2Miw2ICsxODYsMTIgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgbXV0
YWJsZSBWZWN0b3I8Y2hhcio+IG1fc2VnbWVudHM7CiAjZW5kaWYKKyNpZiBFTkFCTEUoRElTS19J
TUFHRV9DQUNIRSkKKyAgICBib29sIG1faXNNZW1vcnlNYXBwZWQ7CisgICAgdW5zaWduZWQgbV9k
aXNrSW1hZ2VDYWNoZUlkOyAvLyBEaXNrSW1hZ2VDYWNoZUlkIGlzIHVuc2lnbmVkLgorICAgIE1l
bW9yeU1hcHBlZE5vdGlmeUNhbGxiYWNrIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2s7Cisg
ICAgTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2Fs
bGJhY2tEYXRhOworI2VuZGlmCiAjaWYgVVNFKENGKQogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZl
cihDRkRhdGFSZWYpOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fY2ZEYXRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IGFmZTViYzFj
NTk0MDQzNTZiNjk2YWEzMmRkMTE1ZDA2MTliZjQ5OTEuLjZiZGVmMDNlNzg1NzExNWFmY2RkMDYw
YTYwOTMwM2QyZDFmNTVkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L1NoYXJlZEJ1ZmZlckNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHAKQEAgLTMwLDExICszMCwyMSBAQAogCiAjaW5jbHVkZSAiUHVyZ2VhYmxl
QnVmZmVyLmgiCiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyNpbmNsdWRlICJEaXNr
SW1hZ2VDYWNoZS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGNmRGF0YSkKICAgICA6IG1fc2l6ZSgwKQogICAg
ICwgbV9jZkRhdGEoY2ZEYXRhKQorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgICwg
bV9pc01lbW9yeU1hcHBlZChmYWxzZSkKKyAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1h
Z2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRD
YWxsYmFjayhudWxscHRyKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEo
bnVsbHB0cikKKyNlbmRpZgogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYzk0MzJkZjQxOGEwZDcwM2FmODk1MTkwZWI0YTE2
MzM4MGMzMzgwLi45ZTcxZWRkOWVmYzRlMTNlYmRmZTQ0YzczNDIwYjk0MWEwMjE3NTU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2
NCw2ICszNjQsOCBAQAogCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRDhCRkNFNjE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVy
LmggKi87IH07CiAJCUNEQTYyQUUyMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggKi87
IH07CiAJCUNEQTYyQUUzMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTYy
QUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSAqLzsgfTsK
KwkJQTVDNTY2QkQxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9T
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM1NjZC
QjEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCAqLzsgfTsK
KwkJQTVDNTY2QkUxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDNTY2
QkMxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tICovOyB9
OwogCQlDRURBMTJEQjE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VEQTEy
RDkxNTJDQkU2ODAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5tbSAqLzsgfTsK
IAkJQ0VEQTEyREMxNTJDQkU2ODAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VEQTEyREEx
NTJDQkU2ODAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5oICovOyB9OwogCQlE
RDdDREVFNzBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ3Q0RFRTYwQTIzQkE5RTAwMDY5
OTI4IC8qIFdlYlR5cGVzSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTY5OSw2ICs3MDEsOCBAQAogCQlD
RDhFQUM3MjExQ0FDOUEzMDA3NzQwNzUgLyogSU9LaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5h
bWUgPSBJT0tpdC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9J
T0tpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNEQTYyQUUw
MTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREE2MkFFMTEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTVDNTY2QkIxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50
SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRpc2tJbWFnZUNhY2hl
Q2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1QzU2NkJDMTI3QTNB
RTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRURBMTJEOTE1MkNCRTY4MDBEOUUwOEQg
LyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRURBMTJEQTE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFsdGVy
bmF0aXZlVGV4dENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERDdDREVF
NjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJUeXBlc0ludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03OTksNiArODAzLDcgQEAKIAkJCQkxQzZDQjAzRTBBQTYzOTFEMDBEMjNCRkQg
LyogTWlncmF0ZUhlYWRlcnMubWFrZSAqLywKIAkJCQlGNUY3MzJEMjAyRkY0RDRGMDFBODAxODAg
LyogV2ViS2l0LmV4cCAqLywKIAkJCQlGNUMyODM3MzAyODQ2NzZEMDE4NjM1Q0EgLyogV2ViS2l0
UHJlZml4LmggKi8sCisJCQkJRkVEMTQwMEEwQ0VDQ0Q2ODAwRDg5NDY2IC8qIGlvcyAqLywKIAkJ
CQk2NTA4QTRBNzA5OUIzNzVGMDBCQ0JGNDUgLyogRGVmYXVsdCBEZWxlZ2F0ZXMgKi8sCiAJCQkJ
RjU3RDE5NEEwMzRFNzMyQzAxQTgwMTgwIC8qIERPTSAqLywKIAkJCQkyNUE4MTc2ODAxQjU0NzRC
MEVDQTE0OUUgLyogSGlzdG9yeSAqLywKQEAgLTEyNDMsNiArMTI0OCwyMyBAQAogCQkJdGFiV2lk
dGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQlGRUQxNDAwQTBDRUNDRDY4MDBEODk0
NjYgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk0NEExMUZCRTBFQkE5M0IyMDA5RjY5RUQgLyogV2ViQ29yZVN1cHBvcnQgKi8sCisJCQkpOwor
CQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTQ0QTEx
RkJFMEVCQTkzQjIwMDlGNjlFRCAvKiBXZWJDb3JlU3VwcG9ydCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTVDNTY2QkIxMjdBM0FFNTAwRThBM0ZGIC8q
IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggKi8sCisJCQkJQTVDNTY2QkMxMjdBM0FFNTAw
RThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tICovLAorCQkJKTsKKwkJCXBh
dGggPSBXZWJDb3JlU3VwcG9ydDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CUY1MkNBNkJEMDJERjlEMEYwMTg2MzVDQSAvKiBIVE1MICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE0MjYsNiArMTQ0OCw3IEBACiAJCQkJQjgyOTU4RDMx
MzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE2MDUxOTQxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTgxMDY4MDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBNUM1NjZCRDEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0lt
YWdlQ2FjaGVDbGllbnRJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDY5MDgyNEJGMDEw
MDhERjAzOCAvKiBISVdlYlZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOERFRDUwMEVFODhC
OEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFBRjVDRUEwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1OSw2ICsxOTgyLDcgQEAKIAkJCQkxQTRERjUyMzBF
QzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUM2OEY2NzAwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBNTY4N0JEQjEzNUI3OTFBMDA3NENCQ0IgLyogV2ViTm9kZUhpZ2hs
aWdodGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTVDNTY2QkUxMjdBM0FFNTAwRThBM0ZGIC8q
IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM2OEY2
NzIwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHRWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEyRTJGRTYxNEU0ODE4MjAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTMxQzExQTZGMTQ3NjU1MkUwMDQ5QTRDQyAvKiBXZWJOb3RpZmlj
YXRpb25DbGllbnQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggYi9Tb3VyY2Uv
V2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5ZjE1OWYyMDgwOTBkMzQ5YWMzNzVmNzBhOGQ2MGVhNTcyOGI0ZTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1h
Z2VDYWNoZUNsaWVudElPUy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCA8V2ViQ29y
ZS9EaXNrSW1hZ2VDYWNoZUNsaWVudC5oPgorCitjbGFzcyBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVu
dCBGSU5BTCA6IHB1YmxpYyBXZWJDb3JlOjpEaXNrSW1hZ2VDYWNoZUNsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRGlza0ltYWdlQ2FjaGVDbGllbnQ+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudCgpKTsgfQorcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGlza0ltYWdlQ2FjaGVEaXJlY3Rvcnko
Y29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9yeSkgT1ZFUlJJREU7Cit9OworCit2b2lkIFdlYktp
dEluaXRpYWxpemVXZWJEaXNrSW1hZ2VDYWNoZSgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9T
Lm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRGlza0ltYWdlQ2FjaGVD
bGllbnRJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRiYmVlZTNmMGYyMDEzZWRjYTRmODU0MmRlZTA0MTU1
YmQxYmZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tCkBAIC0wLDAgKzEsMTA4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCIKKworI2lmIEVO
QUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKKyNpbXBvcnQg
PFdlYkNvcmUvRGlza0ltYWdlQ2FjaGUuaD4KKyNpbXBvcnQgPHN5cy9wYXJhbS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudDo6ZGlk
Q3JlYXRlRGlza0ltYWdlQ2FjaGVEaXJlY3RvcnkoY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9y
eSkKK3sKKyAgICAvLyBTZXQgdGhlIE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZSBhdHRyaWJ1dGUg
b24gdGhlIGRpcmVjdG9yeSBzbyB0aGF0IGl0cyBjb250ZW50cyBhcmUgaW5hY2Nlc3NpYmxlIHdo
ZW4gdGhlIGRldmljZSBpcyBsb2NrZWQuCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAg
TlNTdHJpbmcgKmRpcmVjdG9yeVBhdGggPSBkaXJlY3Rvcnk7CisgICAgTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzID0gQHtOU0ZpbGVQcm90ZWN0aW9uS2V5OiBOU0ZpbGVQcm90ZWN0aW9uQ29tcGxl
dGV9OworICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzZXRBdHRyaWJ1
dGVzOmF0dHJpYnV0ZXMgb2ZJdGVtQXRQYXRoOmRpcmVjdG9yeVBhdGggZXJyb3I6JmVycm9yXSkK
KyAgICAgICAgTlNMb2coQCJEaXNrSW1hZ2VDYWNoZTogRmFpbGVkIHRvIHNldCBhdHRyaWJ1dGVz
IG9uIGRpc2sgaW1hZ2UgY2FjaGUgZGlyZWN0b3J5OiAlQCIsIGVycm9yKTsKKworICAgIFdlYlBy
ZWZlcmVuY2VzICpzdGFuZGFyZFByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJk
UHJlZmVyZW5jZXNdOworICAgIEFTU0VSVCghW1tzdGFuZGFyZFByZWZlcmVuY2VzIF9kaXNrSW1h
Z2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3RvcnldIGxlbmd0aF0pOworICAgIFtzdGFuZGFyZFByZWZl
cmVuY2VzIF9zZXREaXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3Rvcnk6ZGlyZWN0b3J5XTsK
K30KKworc3RhdGljIHZvaWQgcmVtb3ZlT2xkRGlza0ltYWdlQ2FjaGVEaXJlY3RvcnkoKQorewor
ICAgIFdlYlByZWZlcmVuY2VzICpzdGFuZGFyZFByZWZlcmVuY2VzID0gW1dlYlByZWZlcmVuY2Vz
IHN0YW5kYXJkUHJlZmVyZW5jZXNdOworICAgIE5TU3RyaW5nICpvbGREaXJlY3RvcnkgPSBbc3Rh
bmRhcmRQcmVmZXJlbmNlcyBfZGlza0ltYWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0b3J5XTsKKyAg
ICBbc3RhbmRhcmRQcmVmZXJlbmNlcyBfc2V0RGlza0ltYWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0
b3J5OkAiIl07CisKKyAgICBpZiAoIVtvbGREaXJlY3RvcnkgbGVuZ3RoXSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgY2hhciogb2xkRGlyZWN0b3J5Q1N0cmluZyA9IFtvbGREaXJlY3Rv
cnkgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXTsKKyAgICBjb25zdCBzaXplX3QgbGVuZ3RoID0g
c3RybGVuKG9sZERpcmVjdG9yeUNTdHJpbmcpICsgMTsgLy8gRm9yIE5VTEwgdGVybWluYXRvci4K
KyAgICBBU1NFUlQobGVuZ3RoIDwgTUFYUEFUSExFTik7CisgICAgaWYgKGxlbmd0aCA+PSBNQVhQ
QVRITEVOKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGRlbGV0ZXMgd2hhdGV2ZXIg
ZGlyZWN0b3J5IHdhcyBuYW1lZCBpbiB0aGUgdXNlciBkZWZhdWx0cyBrZXkuCisgICAgLy8gVG8g
YmUgc2FmZSwgd2UgcmVzb2x2ZSB0aGUgYWJzb2x1dGUgcGF0aCwgYW5kIHZlcmlmeSB0aGF0IHRo
ZQorICAgIC8vIGxhc3QgcGF0aCBjb21wb25lbnQgc3RhcnRzIHdpdGggIkRpc2tJbWFnZUNhY2hl
Ii4KKworICAgIC8vIFJlc29sdmUgdGhlIG9sZCBkaXJlY3RvcnkgcGF0aCB0byBhbiBhYnNvbHV0
ZSBwYXRoLgorICAgIFZlY3RvcjxjaGFyLCBNQVhQQVRITEVOPiBwYXRoKGxlbmd0aCk7CisgICAg
bWVtY3B5KHBhdGguZGF0YSgpLCBvbGREaXJlY3RvcnlDU3RyaW5nLCBsZW5ndGgpOworICAgIGNo
YXIgYWJzb2x1dGVQYXRoW01BWFBBVEhMRU5dOworICAgIGlmICghcmVhbHBhdGgocGF0aC5kYXRh
KCksIGFic29sdXRlUGF0aCkpIHsKKyAgICAgICAgTlNMb2coQCJEaXNrSW1hZ2VDYWNoZTogQ291
bGQgbm90IHJlc29sdmUgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG9sZCBkaXJlY3RvcnkuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBWZXJpZnkgdGhlIGxhc3QgcGF0aCBj
b21wb25lbnQgc3RhcnRzIHdpdGggIkRpc2tJbWFnZUNhY2hlIi4KKyAgICBjb25zdCBzaXplX3Qg
YWJzb2x1dGVMZW5ndGggPSBzdHJsZW4oYWJzb2x1dGVQYXRoKTsKKyAgICBOU1N0cmluZyAqcmVz
b2x2ZWRBYnNvbHV0ZVBhdGggPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmlu
Z1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246YWJzb2x1dGVQYXRoIGxlbmd0aDphYnNvbHV0
ZUxlbmd0aF07CisgICAgTlNTdHJpbmcgKnByZWZpeCA9IEAiRGlza0ltYWdlQ2FjaGUiOworICAg
IGlmICghW1tyZXNvbHZlZEFic29sdXRlUGF0aCBsYXN0UGF0aENvbXBvbmVudF0gaGFzUHJlZml4
OnByZWZpeF0pIHsKKyAgICAgICAgTlNMb2coQCJEaXNrSW1hZ2VDYWNoZTogVGhlIG9sZCBkaXJl
Y3RvcnkgZGlkIG5vdCBzdGFydCB3aXRoIHRoZSBwcm9wZXIgcHJlZml4LiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgTlNFcnJvciAqZXJyb3I7CisgICAgICAgIGlmICghW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRQYXRoOm9sZERpcmVjdG9y
eSBlcnJvcjomZXJyb3JdKQorICAgICAgICAgICAgTlNMb2coQCJEaXNrSW1hZ2VDYWNoZTogRmFp
bGVkIHRvIFJlbW92ZSBPbGQgRGlyZWN0b3J5OiAlQCIsIFtlcnJvciBsb2NhbGl6ZWRGYWlsdXJl
UmVhc29uXSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViS2l0SW5pdGlhbGl6ZVdlYkRpc2tJbWFn
ZUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlm
IChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsK
KworICAgIHJlbW92ZU9sZERpc2tJbWFnZUNhY2hlRGlyZWN0b3J5KCk7CisKKyAgICBSZWZQdHI8
V2ViRGlza0ltYWdlQ2FjaGVDbGllbnQ+IHNoYXJlZENsaWVudCA9IFdlYkRpc2tJbWFnZUNhY2hl
Q2xpZW50OjpjcmVhdGUoKTsKKyAgICBkaXNrSW1hZ2VDYWNoZSgpLnNldENsaWVudChzaGFyZWRD
bGllbnQucmVsZWFzZSgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hF
KSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRleCA1MjYw
ZTdmYTAyYzQwNzgwN2Q0ZGFkY2YwOTM2N2QxMjE4OWNmNjA0Li4wY2JlZDAxMjJmODk2MTJkN2Mw
NDZjN2Q3OTcxMGYxZmI3ZDk1ODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KQEAg
LTExMiw2ICsxMTIsMTggQEAKICNlbmRpZgogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6cy5zY3JpcHRzLnB1cmdlZFNpemVdLCBAIkphdmFTY3JpcHQiLAogICAgICAgICAgICAg
bmlsXSwKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzLmltYWdlcy5tYXBwZWRTaXplXSwgQCJJbWFn
ZXMiLAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6cy5jc3NTdHlsZVNoZWV0
cy5tYXBwZWRTaXplXSAsQCJDU1MiLAorI2lmIEVOQUJMRShYU0xUKQorICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6cy54c2xTdHlsZVNoZWV0cy5tYXBwZWRTaXplXSwgQCJYU0wi
LAorI2Vsc2UKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OjBdLCBAIlhTTCIs
CisjZW5kaWYKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OnMuc2NyaXB0cy5t
YXBwZWRTaXplXSwgQCJKYXZhU2NyaXB0IiwKKyAgICAgICAgICAgIG5pbF0sCisjZW5kaWYgLy8g
RU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKICAgICAgICAgbmlsXTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNl
Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCmluZGV4IGM1
ZjJjMjc0NzBkN2QxMDkwMjM0NDBiMTkzNDY2Y2IyYWQ1NDMyN2YuLmFkZWNmMzZiYzdkODNmYjYw
ZGNjNTBlMDlmNWJiMTlkZjViNDliY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkRhdGFTb3VyY2UubW0KQEAgLTk3LDYgKzk3LDE3IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNv
dXJjZVByaXZhdGUqIHRvUHJpdmF0ZSh2b2lkKiBwcml2YXRlQXR0cmlidXRlKQogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFdlYkRhdGFTb3VyY2VQcml2YXRlKj4ocHJpdmF0ZUF0dHJpYnV0
ZSk7CiB9CiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQor
c3RhdGljIHZvaWQgQnVmZmVyTWVtb3J5TWFwcGVkKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIsIFNoYXJlZEJ1ZmZlcjo6Q29tcGxldGlvblN0YXR1cyBtYXBTdGF0dXMsIFNoYXJlZEJ1
ZmZlcjo6TWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhIGRhdGEpCit7CisgICAgTlNPYmpl
Y3Q8V2ViRGF0YVNvdXJjZVByaXZhdGVEZWxlZ2F0ZT4gKmRlbGVnYXRlID0gWyhXZWJEYXRhU291
cmNlICopZGF0YSBkYXRhU291cmNlRGVsZWdhdGVdOworICAgIGlmIChtYXBTdGF0dXMgPT0gU2hh
cmVkQnVmZmVyOjpTdWNjZWVkZWQpCisgICAgICAgIFtkZWxlZ2F0ZSBkYXRhU291cmNlTWVtb3J5
TWFwcGVkXTsKKyAgICBlbHNlCisgICAgICAgIFtkZWxlZ2F0ZSBkYXRhU291cmNlTWVtb3J5TWFw
RmFpbGVkXTsKK30KKyNlbmRpZgorCiBAaW50ZXJmYWNlIFdlYkRhdGFTb3VyY2UgKFdlYkZpbGVJ
bnRlcm5hbCkKIEBlbmQKIApAQCAtMTk3LDYgKzIwOCw0OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YWRkVHlwZXNGcm9tQ2xhc3MoTlNNdXRhYmxlRGljdGlvbmFyeSAqYWxsVHlwZXMsIENsYXNzIG9i
akNDbAogICAgIHRvUHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+c2V0RGVmZXJNYWluUmVzb3Vy
Y2VEYXRhTG9hZChmbGFnKTsKIH0KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQ
TEFURk9STShJT1MpCistICh2b2lkKV9zZXRBbGxvd1RvQmVNZW1vcnlNYXBwZWQKK3sKKyAgICBS
ZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1haW5SZXNvdXJjZUJ1ZmZlciA9IHRvUHJpdmF0ZShfcHJp
dmF0ZSktPmxvYWRlci0+bWFpblJlc291cmNlRGF0YSgpOworICAgIGlmICghbWFpblJlc291cmNl
QnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtYWlu
UmVzb3VyY2VEYXRhID0gbWFpblJlc291cmNlQnVmZmVyLT5zaGFyZWRCdWZmZXIoKTsKKyAgICBp
ZiAoIW1haW5SZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYWluUmVz
b3VyY2VEYXRhLT5tZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjaygpICE9IEJ1ZmZlck1l
bW9yeU1hcHBlZCkgeworICAgICAgICBBU1NFUlQoIW1haW5SZXNvdXJjZURhdGEtPm1lbW9yeU1h
cHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKCkgJiYgIW1haW5SZXNvdXJjZURhdGEtPm1lbW9yeU1h
cHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrRGF0YSgpKTsKKyAgICAgICAgbWFpblJlc291cmNlRGF0
YS0+c2V0TWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soQnVmZmVyTWVtb3J5TWFwcGVk
LCBzZWxmKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1haW5SZXNvdXJjZURhdGEtPmFsbG93VG9C
ZU1lbW9yeU1hcHBlZCgpKSB7CisgICAgY2FzZSBTaGFyZWRCdWZmZXI6OlN1Y2Nlc3NBbHJlYWR5
TWFwcGVkOgorICAgICAgICBbW3NlbGYgZGF0YVNvdXJjZURlbGVnYXRlXSBkYXRhU291cmNlTWVt
b3J5TWFwcGVkXTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hhcmVkQnVmZmVyOjpQcmV2
aW91c2x5UXVldWVkRm9yTWFwcGluZzoKKyAgICBjYXNlIFNoYXJlZEJ1ZmZlcjo6UXVldWVkRm9y
TWFwcGluZzoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hhcmVkQnVmZmVyOjpGYWlsdXJl
Q2FjaGVGdWxsOgorICAgICAgICBbW3NlbGYgZGF0YVNvdXJjZURlbGVnYXRlXSBkYXRhU291cmNl
TWVtb3J5TWFwRmFpbGVkXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworLSAodm9pZClzZXREYXRhU291cmNlRGVsZWdhdGU6KE5TT2JqZWN0
PFdlYkRhdGFTb3VyY2VQcml2YXRlRGVsZWdhdGU+ICopZGVsZWdhdGUKK3sKKyAgICBBU1NFUlQo
IXRvUHJpdmF0ZShfcHJpdmF0ZSktPl9kYXRhU291cmNlRGVsZWdhdGUpOworICAgIHRvUHJpdmF0
ZShfcHJpdmF0ZSktPl9kYXRhU291cmNlRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoTlNP
YmplY3Q8V2ViRGF0YVNvdXJjZVByaXZhdGVEZWxlZ2F0ZT4gKilkYXRhU291cmNlRGVsZWdhdGUK
K3sKKyAgICByZXR1cm4gdG9Qcml2YXRlKF9wcml2YXRlKS0+X2RhdGFTb3VyY2VEZWxlZ2F0ZTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQor
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJEYXRhU291cmNlIChXZWJJbnRlcm5hbCkKQEAg
LTM4Myw2ICs0MzYsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TXV0YWJsZURpY3Rpb25hcnkgKmFsbFR5cGVzLCBDbGFzcyBvYmpDQ2wKICAgICBpZiAodG9Qcml2
YXRlKF9wcml2YXRlKSAmJiB0b1ByaXZhdGUoX3ByaXZhdGUpLT5pbmNsdWRlZEluV2ViS2l0U3Rh
dGlzdGljcykKICAgICAgICAgLS1XZWJEYXRhU291cmNlQ291bnQ7CiAKKyNpZiBFTkFCTEUoRElT
S19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQorICAgIGlmIChfcHJpdmF0ZSkgeworICAg
ICAgICBSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1haW5SZXNvdXJjZUJ1ZmZlciA9IHRvUHJpdmF0
ZShfcHJpdmF0ZSktPmxvYWRlci0+bWFpblJlc291cmNlRGF0YSgpOworICAgICAgICBpZiAobWFp
blJlc291cmNlQnVmZmVyKSB7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtYWlu
UmVzb3VyY2VEYXRhID0gbWFpblJlc291cmNlQnVmZmVyLT5zaGFyZWRCdWZmZXIoKTsKKyAgICAg
ICAgICAgIGlmIChtYWluUmVzb3VyY2VEYXRhICYmIAorICAgICAgICAgICAgICAgIG1haW5SZXNv
dXJjZURhdGEtPm1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrRGF0YSgpID09IHNlbGYg
JiYKKyAgICAgICAgICAgICAgICBtYWluUmVzb3VyY2VEYXRhLT5tZW1vcnlNYXBwZWROb3RpZmlj
YXRpb25DYWxsYmFjaygpID09IEJ1ZmZlck1lbW9yeU1hcHBlZCkgeworICAgICAgICAgICAgICAg
IG1haW5SZXNvdXJjZURhdGEtPnNldE1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKG51
bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlm
CisKICAgICBkZWxldGUgdG9Qcml2YXRlKF9wcml2YXRlKTsKIAogICAgIFtzdXBlciBkZWFsbG9j
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZVByaXZhdGUu
aAppbmRleCBkZjljNjFlZTliMjAxMmY3YWEwMjc2NjMyNmQ4NDM0YmQ0YzhmMzU0Li5mZjIwZmFl
ZWY0NWQwODM1YTZhZTljNWM2MzJjNGY3NDZhOTk4NWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlUHJpdmF0ZS5oCkBAIC0yOCw2ICsyOCwxNCBAQAog
CiAjaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZS5oPgogCisjaWYgRU5BQkxFKERJU0tfSU1B
R0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKK0Bwcm90b2NvbCBXZWJEYXRhU291cmNlUHJpdmF0
ZURlbGVnYXRlCitAcmVxdWlyZWQKKy0gKHZvaWQpZGF0YVNvdXJjZU1lbW9yeU1hcHBlZDsKKy0g
KHZvaWQpZGF0YVNvdXJjZU1lbW9yeU1hcEZhaWxlZDsKK0BlbmQKKyNlbmRpZgorCiBAaW50ZXJm
YWNlIFdlYkRhdGFTb3VyY2UgKFdlYlByaXZhdGUpCiAKIC0gKE5TRmlsZVdyYXBwZXIgKilfZmls
ZVdyYXBwZXJGb3JVUkw6KE5TVVJMICopVVJMOwpAQCAtMzksNCArNDcsMTAgQEAKIAogLSAodm9p
ZClfc2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZDooQk9PTClmbGFnOwogCisjaWYgRU5BQkxF
KERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKy0gKHZvaWQpX3NldEFsbG93VG9C
ZU1lbW9yeU1hcHBlZDsKKy0gKHZvaWQpc2V0RGF0YVNvdXJjZURlbGVnYXRlOihOU09iamVjdDxX
ZWJEYXRhU291cmNlUHJpdmF0ZURlbGVnYXRlPiAqKWRhdGFTb3VyY2VEZWxlZ2F0ZTsKKy0gKE5T
T2JqZWN0PFdlYkRhdGFTb3VyY2VQcml2YXRlRGVsZWdhdGU+ICopZGF0YVNvdXJjZURlbGVnYXRl
OworI2VuZGlmCisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCmluZGV4IGZlZDgzYmE4YmZlMWE3ODAwYmU0NTRlMDZh
MjViMjNmODVjYzAwODIuLjgwMDNjYmU4ODg1MDdlZWE5ODg2OTZhMDcyZWFhMzMxZTNjMzU5YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaApAQCAtMTYxLDMgKzE2MSw4IEBACiAjZGVmaW5lIFdlYktpdERlYnVnRnVsbFBh
Z2Vab29tUHJlZmVyZW5jZUtleSBAIldlYktpdERlYnVnRnVsbFBhZ2Vab29tUHJlZmVyZW5jZUtl
eSIKIAogI2RlZmluZSBXZWJLaXRNaW5pbXVtWm9vbUZvbnRTaXplUHJlZmVyZW5jZUtleSBAIldl
YktpdE1pbmltdW1ab29tRm9udFNpemVQcmVmZXJlbmNlS2V5IgorCisjZGVmaW5lIFdlYktpdERp
c2tJbWFnZUNhY2hlRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXREaXNrSW1hZ2VDYWNoZUVu
YWJsZWQiCisjZGVmaW5lIFdlYktpdERpc2tJbWFnZUNhY2hlTWluaW11bUltYWdlU2l6ZVByZWZl
cmVuY2VLZXkgQCJXZWJLaXREaXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNpemUiCisjZGVmaW5l
IFdlYktpdERpc2tJbWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJL
aXREaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemUiCisjZGVmaW5lIFdlYktpdERpc2tJbWFn
ZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9yeUtleSBAIldlYktpdERpc2tJbWFnZUNhY2hlU2F2ZWRD
YWNoZURpcmVjdG9yeSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tCmluZGV4IDMxZmI2ZWNlZmViNTU1NjExNTAwYzM4NGQ2NzJiMmY3MTU5MWYwNzkuLjBjNzli
YmVmNWYwYjc4ZGViMzg5M2VlNTI2ZmE4OWJiYzhhOTI1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNDE2LDYgKzQxNiwxMSBAQCBwdWJsaWM6
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRmxvYXQ6V0tHZXRNaW5pbXVtWm9vbUZvbnRTaXplKCldLCBXZWJLaXRNaW5pbXVtWm9v
bUZvbnRTaXplUHJlZmVyZW5jZUtleSwKICNlbmRpZgorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NB
Q0hFKSAmJiBQTEFURk9STShJT1MpCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZ
RVNdLCBXZWJLaXREaXNrSW1hZ2VDYWNoZUVuYWJsZWRQcmVmZXJlbmNlS2V5LAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50OigxMDAgKiAxMDI0KV0sIFdlYktpdERpc2tJ
bWFnZUNhY2hlTWluaW11bUltYWdlU2l6ZVByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6KDEwMCAqIDEwMjQgKiAxMDI0KV0sIFdlYktpdERpc2tJ
bWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZVByZWZlcmVuY2VLZXksCisjZW5kaWYKICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhMb25nTG9uZzpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bm9R
dW90YSgpXSwgV2ViS2l0QXBwbGljYXRpb25DYWNoZVRvdGFsUXVvdGEsCiAgICAgICAgIFtOU051
bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEo
KV0sIFdlYktpdEFwcGxpY2F0aW9uQ2FjaGVEZWZhdWx0T3JpZ2luUXVvdGEsCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0UVRLaXRFbmFibGVkUHJlZmVyZW5j
ZUtleSwKQEAgLTE0ODcsNiArMTQ5Miw0OCBAQCBzdGF0aWMgTlNTdHJpbmcgKmNsYXNzSUJDcmVh
dG9ySUQgPSBuaWw7CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTplbmFibGVkIGZvcktleTpXZWJL
aXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQogCisjaWYgRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKy0gKEJPT0wpZGlza0ltYWdl
Q2FjaGVFbmFibGVkCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0
RGlza0ltYWdlQ2FjaGVFbmFibGVkUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0RGlz
a0ltYWdlQ2FjaGVFbmFibGVkOihCT09MKWVuYWJsZWQKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZh
bHVlOmVuYWJsZWQgZm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlRW5hYmxlZFByZWZlcmVuY2VL
ZXldOworfQorCistICh1bnNpZ25lZClkaXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNpemUKK3sK
KyAgICByZXR1cm4gW3NlbGYgX2ludGVnZXJWYWx1ZUZvcktleTpXZWJLaXREaXNrSW1hZ2VDYWNo
ZU1pbmltdW1JbWFnZVNpemVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXREaXNrSW1h
Z2VDYWNoZU1pbmltdW1JbWFnZVNpemU6KHVuc2lnbmVkKW1pbmltdW1TaXplCit7CisgICAgW3Nl
bGYgX3NldEludGVnZXJWYWx1ZTptaW5pbXVtU2l6ZSBmb3JLZXk6V2ViS2l0RGlza0ltYWdlQ2Fj
aGVNaW5pbXVtSW1hZ2VTaXplUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHVuc2lnbmVkKWRpc2tJ
bWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZQoreworICAgIHJldHVybiBbc2VsZiBfaW50ZWdlclZh
bHVlRm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZVByZWZlcmVuY2VL
ZXldOworfQorCistICh2b2lkKXNldERpc2tJbWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZToodW5z
aWduZWQpbWF4aW11bVNpemUKK3sKKyAgICBbc2VsZiBfc2V0SW50ZWdlclZhbHVlOm1heGltdW1T
aXplIGZvcktleTpXZWJLaXREaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemVQcmVmZXJlbmNl
S2V5XTsKK30KKworLSAoTlNTdHJpbmcgKilfZGlza0ltYWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0
b3J5Cit7CisgICAgcmV0dXJuIFtbc2VsZiBfc3RyaW5nVmFsdWVGb3JLZXk6V2ViS2l0RGlza0lt
YWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0b3J5S2V5XSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRo
XTsKK30KKworLSAodm9pZClfc2V0RGlza0ltYWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0b3J5OihO
U1N0cmluZyAqKXBhdGgKK3sKKyAgICBbc2VsZiBfc2V0U3RyaW5nVmFsdWU6W3BhdGggc3RyaW5n
QnlTdGFuZGFyZGl6aW5nUGF0aF0gZm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlU2F2ZWRDYWNo
ZURpcmVjdG9yeUtleV07Cit9CisjZW5kaWYgLy8gRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpICYm
IFBMQVRGT1JNKElPUykKKwogLSAoQk9PTClpc0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWQKIHsKICAg
ICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRGcmFtZUZsYXR0ZW5pbmdFbmFi
bGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXgg
ZjIzZjZhZTJjYTMwZWFkNWE0ZDhiYjBmNTA3NjhmMTEwY2I2MzdiNC4uNjUyNWM2YWM2N2E1MTBh
ZGE2NzYyMThhYzEzYjdjNDA3NjdkM2UzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQpAQCAtMjA1LDYgKzIwNSwxMSBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkRhc2hib2FyZFJl
Z2lvbi5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZP
Uk0oSU9TKQorI2ltcG9ydCAiV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCIKKyNpbXBvcnQg
PFdlYkNvcmUvRGlza0ltYWdlQ2FjaGUuaD4KKyNlbmRpZgorCiAjaWYgVVNFKEdMSUIpCiAjaW1w
b3J0IDxnbGliLmg+CiAjZW5kaWYKQEAgLTczOCw2ICs3NDMsOSBAQCBzdGF0aWMgYm9vbCBzaG91
bGRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yKCkKIAogICAgICAgICBX
ZWJLaXRJbml0aWFsaXplU3RvcmFnZUlmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFdlYktpdEluaXRp
YWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElmTmVjZXNzYXJ5KCk7CisjaWYgRU5BQkxFKERJU0tf
SU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKyAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVdl
YkRpc2tJbWFnZUNhY2hlKCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIFNldHRpbmdzOjpz
ZXREZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgwLjAwNCk7CiAgICAgICAgIApAQCAtMTYwMCw2
ICsxNjA4LDEzIEBAIHN0YXRpYyBib29sIG5lZWRzU2VsZlJldGFpbldoaWxlTG9hZGluZ1F1aXJr
KCkKICAgICBCT09MIHpvb21zVGV4dE9ubHkgPSBbcHJlZmVyZW5jZXMgem9vbXNUZXh0T25seV07
CiAgICAgaWYgKF9wcml2YXRlLT56b29tc1RleHRPbmx5ICE9IHpvb21zVGV4dE9ubHkpCiAgICAg
ICAgIFtzZWxmIF9zZXRab29tTXVsdGlwbGllcjpfcHJpdmF0ZS0+em9vbU11bHRpcGxpZXIgaXNU
ZXh0T25seTp6b29tc1RleHRPbmx5XTsKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAm
JiBQTEFURk9STShJT1MpCisgICAgRGlza0ltYWdlQ2FjaGUmIGRpc2tJbWFnZUNhY2hlID0gV2Vi
Q29yZTo6ZGlza0ltYWdlQ2FjaGUoKTsKKyAgICBkaXNrSW1hZ2VDYWNoZS5zZXRFbmFibGVkKFtw
cmVmZXJlbmNlcyBkaXNrSW1hZ2VDYWNoZUVuYWJsZWRdKTsKKyAgICBkaXNrSW1hZ2VDYWNoZS5z
ZXRNaW5pbXVtSW1hZ2VTaXplKFtwcmVmZXJlbmNlcyBkaXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFn
ZVNpemVdKTsKKyAgICBkaXNrSW1hZ2VDYWNoZS5zZXRNYXhpbXVtQ2FjaGVTaXplKFtwcmVmZXJl
bmNlcyBkaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemVdKTsKKyNlbmRpZgogfQogCiBzdGF0
aWMgaW5saW5lIElNUCBnZXRNZXRob2QoaWQgbywgU0VMIHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212839</attachid>
            <date>2013-09-27 13:39:47 -0700</date>
            <delta_ts>2013-10-04 13:01:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121985-20130927133946.patch</filename>
            <type>text/plain</type>
            <size>75311</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FjZjUxYjE4ZTBlYWQy
MDZjYTlmZGU3NDk2YzBlNDViZTEwODczMy4uN2ZjNTZjZTJmYzdjYTMxMjYwZjM1ZTdmMGZhNzI1
MzE0ZmVmMjdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEzLTA5LTI3ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBk
aXNrIGltYWdlIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjE5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VCdWZmZXI6OmlzVXNpbmdEaXNrSW1hZ2VDYWNoZSk6Cisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlQnVmZmVyLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjYW5Vc2VE
aXNrSW1hZ2VDYWNoZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnVz
ZURpc2tJbWFnZUNhY2hlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjppc1NhZmVUb01ha2VQdXJnZWFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmlzVXNpbmdEaXNrSW1hZ2VDYWNoZSk6IEFk
ZGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZURpc2tJbWFnZUNhY2hlKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dXNlRGlza0ltYWdlQ2FjaGUpOiBBZGRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVtb3J5Q2FjaGU6OmZsdXNoQ2FjaGVkSW1hZ2VzVG9EaXNrKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6VHlwZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmR1bXBTdGF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpNZW1vcnlDYWNoZTo6ZHVtcExSVUxpc3RzKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpUeXBlU3RhdGlz
dGljOjpUeXBlU3RhdGlzdGljKToKKyAgICAgICAgKiBsb2FkZXIvaW9zL0Rpc2tJbWFnZUNhY2hl
Q2xpZW50SU9TLmg6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9pb3MvRGlza0ltYWdlQ2FjaGVJ
T1MuaDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2lvcy9EaXNrSW1hZ2VDYWNoZUlPUy5tbTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vTG9nZ2luZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJl
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjppc0FsbG93ZWRUb0JlTWVtb3J5TWFw
cGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFsbG93VG9CZU1l
bW9yeU1hcHBlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpmYWls
ZWRNZW1vcnlNYXApOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6bWFy
a0FzTWVtb3J5TWFwcGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
Om1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrRGF0YSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjptZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjayk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpzZXRNZW1vcnlNYXBwZWRO
b3RpZmljYXRpb25DYWxsYmFjayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjppc01lbW9yeU1hcHBlZCk6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKwogMjAxMy0wOS0yNyAg
VGhpYWdvIGRlIEJhcnJvcyBMYWNlcmRhICA8dGhpYWdvLmxhY2VyZGFAb3BlbmJvc3NhLm9yZz4K
IAogICAgICAgICBbTml4XSBVcGRhdGluZyBOaXggdHJ1bmsgZmlsZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGQ2
YzI4ZDVmOTZjNzljMjlkODVjMDY2MGE2N2U0Yjk4ODk3YzUxNy4uOGU0MDg3YjAxOTA2ZGM4ZDI0
NWE3YTJjMmEwN2JhYjVkMDAxMzgxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0w
OS0yNyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10g
VXBzdHJlYW0gZGlzayBpbWFnZSBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIxOTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBpb3MvV2ViQ29yZVN1cHBvcnQvV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaDog
QWRkZWQuCisgICAgICAgICogaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xp
ZW50SU9TLm1tOiBBZGRlZC4KKwogMjAxMy0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgcmVuYW1lIEtVUkwgdG8gVVJMCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXgg
Y2MwN2IyMjkzMzFlZjk2YTFlMjdlMGM3MmFlNTEwNmI2ZmI1ODhmOS4uMjBhMDUwYmMyNWEwN2Y1
YWNlZTdhMjExMmUxN2QxMGE1OTE1NGVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDEzLTA5LTI3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAg
ICAgICBbaU9TXSBVcHN0cmVhbSBkaXNrIGltYWdlIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5ODUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ2FjaGUubW06CisgICAgICAg
ICgrW1dlYkNhY2hlIHN0YXRpc3RpY3NdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRhdGFTb3Vy
Y2UubW06CisgICAgICAgIChCdWZmZXJNZW1vcnlNYXBwZWQpOiBBZGRlZC4KKyAgICAgICAgKC1b
V2ViRGF0YVNvdXJjZSBfc2V0QWxsb3dUb0JlTWVtb3J5TWFwcGVkXSk6IEFkZGVkLgorICAgICAg
ICAoLVtXZWJEYXRhU291cmNlIHNldERhdGFTb3VyY2VEZWxlZ2F0ZTpdKTogQWRkZWQuCisgICAg
ICAgICgtW1dlYkRhdGFTb3VyY2UgZGF0YVNvdXJjZURlbGVnYXRlXSk6IEFkZGVkLgorICAgICAg
ICAoLVtXZWJEYXRhU291cmNlIGRlYWxsb2NdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRhdGFT
b3VyY2VQcml2YXRlLmg6IERlY2xhcmVkIHByaXZhdGUgZGVsZWdhdGUKKyAgICAgICAgcHJvdG9j
b2wsIFdlYkRhdGFTb3VyY2VQcml2YXRlRGVsZWdhdGUuCisgICAgICAgICogV2ViVmlldy9XZWJQ
cmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgt
W1dlYlByZWZlcmVuY2VzIGRpc2tJbWFnZUNhY2hlRW5hYmxlZF0pOiBBZGRlZC4KKyAgICAgICAg
KC1bV2ViUHJlZmVyZW5jZXMgc2V0RGlza0ltYWdlQ2FjaGVFbmFibGVkOl0pOiBBZGRlZC4KKyAg
ICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgZGlza0ltYWdlQ2FjaGVNaW5pbXVtSW1hZ2VTaXplXSk6
IEFkZGVkLgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXREaXNrSW1hZ2VDYWNoZU1pbmlt
dW1JbWFnZVNpemU6XSk6IEFkZGVkLgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBkaXNrSW1h
Z2VDYWNoZU1heGltdW1DYWNoZVNpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVu
Y2VzIHNldERpc2tJbWFnZUNhY2hlTWF4aW11bUNhY2hlU2l6ZTpdKTogQWRkZWQuCisgICAgICAg
ICgtW1dlYlByZWZlcmVuY2VzIF9kaXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3RvcnldKTog
QWRkZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIF9zZXREaXNrSW1hZ2VDYWNoZVNhdmVk
Q2FjaGVEaXJlY3Rvcnk6XSk6IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdy
b3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDEzLTA5LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBy
ZW5hbWUgS1VSTCB0byBVUkwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMmY3YmExODNkNGFiODM4
MzIwNjUyODcxZDkyZmVkZmY2MDcwYTY3NS4uMTVjOTg0N2ZlODBiNTQzYTJiMDlhYjk3Y2Y0ZmQ3
NDUyMTVhY2IyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI0NDYsNiArMjQ0NiwxNiBAQCBf
X1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0
RVBOU18xMkRPTVdpbmRvd0NTU0UKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQxNmFubm90YXRlZFJl
Z2lvbnNFdgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKK19fWk43V2Vi
Q29yZTE0ZGlza0ltYWdlQ2FjaGVFdgorX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIzZmx1c2hD
YWNoZWRJbWFnZXNUb0Rpc2tFdgorX19aTks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyMzJtZW1vcnlN
YXBwZWROb3RpZmljYXRpb25DYWxsYmFja0V2CitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjIx
YWxsb3dUb0JlTWVtb3J5TWFwcGVkRXYKK19fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMzVzZXRN
ZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFja0VQRnZOM1dURjEwUGFzc1JlZlB0cklTMF9F
RU5TMF8xNkNvbXBsZXRpb25TdGF0dXNFUHZFUzVfCitfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZm
ZXIyNWlzQWxsb3dlZFRvQmVNZW1vcnlNYXBwZWRFdgorX19aTks3V2ViQ29yZTEyU2hhcmVkQnVm
ZmVyMzZtZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFja0RhdGFFdgorI2VuZGlmCisKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2RyYWdT
b3VyY2VFbmRlZEF0RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFTlNfMTNEcmFnT3BlcmF0aW9u
RQogX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdldmVudE1heVN0YXJ0RHJhZ0VSS05TXzE4
UGxhdGZvcm1Nb3VzZUV2ZW50RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRjYTI2NDExZjkzNWJmYmZhYTYyN2FkNTU2NGI4MmU0
Y2VjNWRjOGEuLjA5MDAxMmNjZGQ0ZTVjOTE5NTAxZWI3ZjQ1ZjM0NDU3MGIzNDc0ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTM1MTIsNiArMzUxMiw5IEBACiAJCUE1QUJCNzg3MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1QUJCNzg2MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJlYWtJdGVyYXRvclBv
b2xJQ1UuaCAqLzsgfTsKIAkJQTVBRkIzNEYxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUFGQjM0
RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNwcCAqLzsgfTsKIAkJQTVBRkIzNTAxMTUx
NTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTVBRkIzNEUxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1QzU2
NkFCMTI3QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDNTY2QUExMjdBM0FBRDAw
RThBM0ZGIC8qIERpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVGOUVGNzAxMjY2NzUwRDAwRkNDRjUyIC8q
IERpc2tJbWFnZUNhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVGOUVGNkUxMjY2NzUwRDAwRkNDRjUyIC8qIERpc2tJbWFnZUNhY2hlSU9T
Lm1tICovOyB9OworCQlBNUY5RUY3MTEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdlQ2FjaGVJ
T1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RjlF
RjZGMTI2Njc1MEQwMEZDQ0Y1MiAvKiBEaXNrSW1hZ2VDYWNoZUlPUy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE2MTQ4QTYyMTJFNDFEM0EwMDQ0
QTc4NCAvKiBET01IVE1MS2V5Z2VuRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjE0OEE2MTEyRTQxRDNBMDA0NEE3ODQgLyog
RE9NSFRNTEtleWdlbkVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlBNjE0OEE2NzEyRTQxRDk0
MDA0NEE3ODQgLyogRE9NSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MTQ4QTY1MTJFNDFEOTQwMDQ0QTc4NCAvKiBET01I
VE1MS2V5Z2VuRWxlbWVudC5oICovOyB9OwogCQlBNjE0OEE2ODEyRTQxRDk0MDA0NEE3ODQgLyog
RE9NSFRNTEtleWdlbkVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNjE0OEE2NjEyRTQxRDk0MDA0NEE3ODQgLyogRE9NSFRNTEtleWdlbkVs
ZW1lbnQubW0gKi87IH07CkBAIC0xMDE3Nyw4ICsxMDE4MCwxMSBAQAogCQlBNUFCQjc4NjEzQjkw
NEJDMDBGMTk3RTMgLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0ZXBSYW5nZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAv
KiBTdGVwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RlcFJhbmdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1QzU2NkFBMTI3QTNBQUQwMEU4QTNG
RiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNUM5NzRDRjExNDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvY29hLmg7IHBhdGggPSBjb2Nv
YS9LZXlFdmVudENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1Qzk3NEQw
MTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gS2V5RXZlbnRDb2NvYS5tbTsgcGF0aCA9IGNvY29hL0tleUV2
ZW50Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RjlFRjZFMTI2Njc1
MEQwMEZDQ0Y1MiAvKiBEaXNrSW1hZ2VDYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERpc2tJbWFnZUNhY2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBNUY5RUY2RjEyNjY3NTBEMDBGQ0NGNTIgLyogRGlza0ltYWdlQ2FjaGVJ
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlza0ltYWdlQ2FjaGVJT1Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYxNDhBNjExMkU0MUQzQTAwNDRBNzg0
IC8qIERPTUhUTUxLZXlnZW5FbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NSFRNTEtleWdlbkVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNjE0OEE2NTEyRTQxRDk0MDA0NEE3ODQgLyogRE9NSFRNTEtleWdl
bkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTEtleWdl
bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYxNDhBNjYxMkU0MUQ5
NDAwNDRBNzg0IC8qIERPTUhUTUxLZXlnZW5FbGVtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NSFRNTEtleWdlbkVsZW1lbnQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTY4Myw2ICsxOTY4OSw3IEBACiAJCQkJQThEMkIyNTIxMjg3
QTU2MDAwQUY0RERBIC8qIGNhY2hlICovLAogCQkJCTdFRTY4NDczMTJEMjZFNTUwMEU3OTQxNSAv
KiBjZiAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLywKKwkJCQlD
RTc5RDY4NjE3RjIyMEVEMDA4MTVDMDAgLyogaW9zICovLAogCQkJCTkzQTFFQUEyMEE1NjM0RDgw
MDY5NjBBMCAvKiBtYWMgKi8sCiAJCQkJRTE0MjRDOTExNjRCNTJDODAwRjMyRDQwIC8qIENvb2tp
ZUphci5jcHAgKi8sCiAJCQkJRTE0MjRDOTIxNjRCNTJDODAwRjMyRDQwIC8qIENvb2tpZUphci5o
ICovLApAQCAtMjAwOTAsNiArMjAwOTcsMTYgQEAKIAkJCW5hbWUgPSBNZWRpYUNvbnRyb2xzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQ0U3OUQ2ODYxN0YyMjBFRDAwODE1
QzAwIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQTVGOUVGNkUxMjY2NzUwRDAwRkNDRjUyIC8qIERpc2tJbWFnZUNhY2hlSU9TLm1tICovLAor
CQkJCUE1RjlFRjZGMTI2Njc1MEQwMEZDQ0Y1MiAvKiBEaXNrSW1hZ2VDYWNoZUlPUy5oICovLAor
CQkJCUE1QzU2NkFBMTI3QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5o
ICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTk5Nyw2ICsyMjAxNCw4IEBACiAJCQkJ
ODk4Nzg1NTUxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODkwQUUwRTExMjU2QTA3OTAwRjU5NjhDIC8qIERpcmVjdG9yeVJlYWRlckJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg5M0M0ODAzMTI0OEJEM0EwMDJCM0Q4NiAvKiBEaXJlY3Rv
cnlSZWFkZXJTeW5jLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNUY5RUY3MTEyNjY3NTBEMDBGQ0NG
NTIgLyogRGlza0ltYWdlQ2FjaGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1QzU2NkFCMTI3
QTNBQUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ4QzREQzAxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlT
bGVlcERpc2FibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA5MTEyQjAyNkY3MDBDMUEz
NTkgLyogRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjU0NjksNiArMjU0ODgsNyBAQAog
CQkJCTMxMkQ2N0IxMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZEQUYxOTk4MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252b2x2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODkzQzQ4MDIxMjQ4QkQzQTAwMkIzRDg2IC8qIERpcmVjdG9y
eVJlYWRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTVGOUVGNzAxMjY2NzUwRDAwRkND
RjUyIC8qIERpc2tJbWFnZUNhY2hlSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlGQzdBNTAx
NDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0OUFGMkQ2QzE0NDM1RDIxMDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEOEM0REJGMTQyODIyMkMwMDI2Q0U3MiAvKiBE
aXNwbGF5U2xlZXBEaXNhYmxlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VCdWZmZXIuY3BwCmluZGV4IGRmYjJhNDIzNjg3ZTFiM2VjODY4MGRmMzBiMDk0
Y2FlMmVkMzU4MDEuLmRhZTFjMmRlNTVhY2M2ZDgxNzAxZTNmYWM2YmEwNzI2ODk2ZjQ1ZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcApAQCAtMTMyLDQgKzEzMiwx
MiBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBSZXNvdXJjZUJ1ZmZlcjo6Y3JlYXRlQ0ZEYXRhKCkK
IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCitib29sIFJlc291cmNl
QnVmZmVyOjppc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3No
YXJlZEJ1ZmZlcik7CisgICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyICYmIG1fc2hhcmVkQnVmZmVy
LT5pc0FsbG93ZWRUb0JlTWVtb3J5TWFwcGVkKCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuaAppbmRleCA0NDM4
OWNlMzA0MTU2ZGEwNzkzZmU1ZWQ2NWNlMDRkMzM4NWUyNWQ0Li41ZGMyZDk1NzFiMzUzYmY0OTA1
YzdjMmYxNDk0MTM2MWEyNzNlNmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZm
ZXIuaApAQCAtODEsNiArODEsOSBAQCBwdWJsaWM6CiAjaWYgVVNFKENGKQogICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNyZWF0ZUNGRGF0YSgpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0tfSU1B
R0VfQ0FDSEUpCisgICAgYm9vbCBpc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSBjb25zdDsKKyNlbmRp
ZgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVzb3VyY2VCdWZmZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDI5YjMxMWRmYmYzOTczZWIyNjE5ZGJi
NjZiMjFkMDc2ZjNiYTE3NjUuLmYzMTBlNzk0Yjg4OWYwNWQwYTEzYmU0MGM4YjZkYmY2NjFiODMz
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApAQCAt
NTIsNiArNTIsMTAgQEAKICNpbmNsdWRlICJTVkdJbWFnZS5oIgogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoRElTS19JTUFHRV9DQUNIRSkKKyNpbmNsdWRlICJEaXNrSW1hZ2VDYWNoZUlPUy5oIgorI2Vu
ZGlmCisKIHVzaW5nIHN0ZDo6bWF4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MzIsNCAr
NTM2LDQxIEBAIGJvb2wgQ2FjaGVkSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZShj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBpbWFnZS0+Y3VycmVudEZy
YW1lS25vd25Ub0JlT3BhcXVlKCk7CiB9CiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkK
K2Jvb2wgQ2FjaGVkSW1hZ2U6OmNhblVzZURpc2tJbWFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNMb2FkaW5nKCkgfHwgZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlz
UHVyZ2VhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2RhdGEtPnNp
emUoKSA8IGRpc2tJbWFnZUNhY2hlKCkubWluaW11bUltYWdlU2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyAiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUiIHJlc291cmNlcyBt
YXkgYmUgbWFya2VkIGFzIHN1Y2ggYmVjYXVzZSB0aGV5IG1heQorICAgIC8vIGNvbnRhaW4gc2Vu
c2l0aXZlIGluZm9ybWF0aW9uLiBXZSBzaG91bGQgbm90IHdyaXRlIHRoZXNlIHJlc291cmNlcyB0
byBkaXNrLgorICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUZXN0aW5nIHNob3dzIHRoYXQgUERG
IGltYWdlcyBkaWQgbm90IHdvcmsgd2hlbiBtZW1vcnkgbWFwcGVkLgorICAgIC8vIEhvd2V2ZXIs
IFNWRyBpbWFnZXMgYW5kIEJpdG1hcCBpbWFnZXMgd2VyZSBmaW5lLiBTZWU6CisgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzg1OTE4MzQ+IERpc2sgSW1hZ2UgQ2FjaGUgc2hvdWxkIHN1cHBvcnQgUERG
IEltYWdlcworICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3Bk
ZiIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IENhY2hlZEltYWdlOjp1c2VEaXNrSW1hZ2VDYWNoZSgpCit7CisgICAgQVNTRVJUKGNhblVzZURp
c2tJbWFnZUNhY2hlKCkpOworICAgIEFTU0VSVCghaXNVc2luZ0Rpc2tJbWFnZUNhY2hlKCkpOwor
ICAgIG1fZGF0YS0+c2hhcmVkQnVmZmVyKCktPmFsbG93VG9CZU1lbW9yeU1hcHBlZCgpOworfQor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmgKaW5kZXggNDMxYjc0MDYyNmE4NmRiNzk5ZWRjOWE2NzIzMzc3ZDcz
Nzg5MjgzZi4uZWJjYjRkOTc3YmY4YTJlMGY5NTc2ZTJiN2JjZjk3NWViMGM0ZGVhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKQEAgLTc3LDYgKzc3LDExIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHJlc3VtZUFuaW1hdGluZ0ltYWdlc0ZvckxvYWRl
cihDYWNoZWRSZXNvdXJjZUxvYWRlciopOwogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUp
CisgICAgdmlydHVhbCBib29sIGNhblVzZURpc2tJbWFnZUNhY2hlKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHVzZURpc2tJbWFnZUNhY2hlKCkgT1ZFUlJJREU7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIE9WRVJSSURFOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCA4MzlkZDU5OTYwNjdh
ZDBjYzVjODNhMjVhMzJjNzY3NzY3YTRhZmE2Li5lNTNiYWM1ZjZmZTRhZTU4MDc2OGMyYWQ5ZmQw
YWMwZDBkNWQwZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKQEAgLTgyNiw2ICs4MjYsMTQgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6bXVz
dFJldmFsaWRhdGVEdWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkgY28K
IAogYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkgY29uc3QKIHsg
CisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAgLy8gSXQgZG9lcyBub3QgbWFrZSBz
ZW5zZSB0byBoYXZlIGEgcmVzb3VyY2UgaW4gdGhlIGRpc2sgaW1hZ2UgY2FjaGUKKyAgICAvLyAo
bWVtb3J5IG1hcHBlZCBvbiBkaXNrKSBhbmQgcHVyZ2VhYmxlIChpbiBtZW1vcnkpLiBTbyBkbyBu
b3QgYWxsb3cKKyAgICAvLyBkaXNrIGltYWdlIGNhY2hlZCByZXNvdXJjZXMgdG8gYmUgcHVyZ2Vh
YmxlLgorICAgIGlmIChpc1VzaW5nRGlza0ltYWdlQ2FjaGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCisKICAgICByZXR1cm4gIWhhc0NsaWVudHMoKSAmJiAhbV9wcm94eVJlc291
cmNlICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlOwogfQogCkBAIC05MTQsNiArOTIyLDEzIEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZFJlc291cmNlQ2FsbGJhY2s6OnRpbWVyRmlyZWQo
VGltZXI8Q2FjaGVkUmVzb3VyY2VDYWxsCiAgICAgbV9yZXNvdXJjZS0+ZGlkQWRkQ2xpZW50KG1f
Y2xpZW50KTsKIH0KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorYm9vbCBDYWNoZWRS
ZXNvdXJjZTo6aXNVc2luZ0Rpc2tJbWFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhICYmIG1fZGF0YS0+aXNVc2luZ0Rpc2tJbWFnZUNhY2hlKCk7Cit9CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKE1BQykKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnRyeVJlcGxhY2VFbmNvZGVkRGF0
YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbmV3QnVmZmVyKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAppbmRleCAwNjYzMjk2MTI4Y2YyYTI4MTEy
YmJjMGM4MTgyNzcyZTRiNGQwYmQ3Li5mZGE0ZGQ5NjliZDNjMWM0MWRkNzk0OTE2ODA0N2Q5MThh
ZmFmYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aApAQCAtMjQ5LDYgKzI0OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMb2FkRmluaXNoVGlt
ZShkb3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmluaXNoVGltZTsgfQog
ICAgIGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRp
bWU7IH0KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIGJvb2wgaXNVc2luZ0Rp
c2tJbWFnZUNhY2hlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblVzZURpc2tJbWFnZUNh
Y2hlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXNlRGlza0lt
YWdlQ2FjaGUoKSB7IEFTU0VSVChjYW5Vc2VEaXNrSW1hZ2VDYWNoZSgpKTsgfQorI2VuZGlmCisK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXggMzdjNzJjNjQwMWRmNDQ5YmY5ZmM2MDVi
MGU5ZjBiNmVkYzk4MmMxYS4uMTRkMjM2NjA0YmE4ZTc3ODk4YTZiMDc4ZjA4ZDEyMWU1NGUxZjMy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC00
NCw2ICs0NCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyNp
bmNsdWRlICJEaXNrSW1hZ2VDYWNoZUlPUy5oIgorI2luY2x1ZGUgIlJlc291cmNlQnVmZmVyLmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzc4LDYgKzM4Myw0NSBAQCB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNU
b1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoRElTS19J
TUFHRV9DQUNIRSkKK3ZvaWQgTWVtb3J5Q2FjaGU6OmZsdXNoQ2FjaGVkSW1hZ2VzVG9EaXNrKCkK
K3sKKyAgICBpZiAoIWRpc2tJbWFnZUNhY2hlKCkuaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworI2lmbmRlZiBOREVCVUcKKyAgICBkb3VibGUgc3RhcnQgPSBXVEY6OmN1cnJlbnRUaW1l
TVMoKTsKKyAgICB1bnNpZ25lZCByZXNvdXJjZUNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBjYWNo
ZWRTaXplID0gMDsKKyNlbmRpZgorCisgICAgZm9yIChzaXplX3QgaSA9IG1fYWxsUmVzb3VyY2Vz
LnNpemUoKTsgaTsgKSB7CisgICAgICAgIC0taTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1
cnJlbnQgPSBtX2FsbFJlc291cmNlc1tpXS5tX3RhaWw7CisgICAgICAgIHdoaWxlIChjdXJyZW50
KSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldmlvdXMgPSBjdXJyZW50LT5tX3By
ZXZJbkFsbFJlc291cmNlc0xpc3Q7CisKKyAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNVc2lu
Z0Rpc2tJbWFnZUNhY2hlKCkgJiYgY3VycmVudC0+Y2FuVXNlRGlza0ltYWdlQ2FjaGUoKSkgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPnVzZURpc2tJbWFnZUNhY2hlKCk7CisgICAgICAgICAg
ICAgICAgY3VycmVudC0+ZGVzdHJveURlY29kZWREYXRhKCk7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICAgICAgICAgIExPRyhEaXNrSW1hZ2VDYWNoZSwgIkNhY2hlOjpkaXNrQ2FjaGVSZXNvdXJj
ZXMoKTogYXR0ZW1wdGluZyB0byBzYXZlICglZCkgYnl0ZXMiLCBjdXJyZW50LT5yZXNvdXJjZUJ1
ZmZlcigpLT5zaGFyZWRCdWZmZXIoKS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICArK3Jlc291
cmNlQ291bnQ7CisgICAgICAgICAgICAgICAgY2FjaGVkU2l6ZSArPSBjdXJyZW50LT5yZXNvdXJj
ZUJ1ZmZlcigpLT5zaGFyZWRCdWZmZXIoKS0+c2l6ZSgpOworI2VuZGlmCisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91czsKKyAgICAgICAgfQorICAgIH0KKwor
I2lmbmRlZiBOREVCVUcKKyAgICBkb3VibGUgZW5kID0gV1RGOjpjdXJyZW50VGltZU1TKCk7Cisg
ICAgTE9HKERpc2tJbWFnZUNhY2hlLCAiRGlza0ltYWdlQ2FjaGU6IHRvb2sgKCVmKSBtcyB0byBj
YWNoZSAoJWQpIGJ5dGVzIGZvciAoJWQpIHJlc291cmNlcyIsIGVuZCAtIHN0YXJ0LCBjYWNoZWRT
aXplLCByZXNvdXJjZUNvdW50KTsKKyNlbmRpZgorfQorI2VuZGlmIC8vIEVOQUJMRShESVNLX0lN
QUdFX0NBQ0hFKQorCiB2b2lkIE1lbW9yeUNhY2hlOjpzZXRDYXBhY2l0aWVzKHVuc2lnbmVkIG1p
bkRlYWRCeXRlcywgdW5zaWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNpZ25lZCB0b3RhbEJ5dGVzKQog
ewogICAgIEFTU0VSVChtaW5EZWFkQnl0ZXMgPD0gbWF4RGVhZEJ5dGVzKTsKQEAgLTc0Myw2ICs3
ODcsMTAgQEAgdm9pZCBNZW1vcnlDYWNoZTo6VHlwZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIG8pCiAgICAgZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKICAg
ICBwdXJnZWFibGVTaXplICs9IHB1cmdlYWJsZSA/IHBhZ2VTaXplIDogMDsKICAgICBwdXJnZWRT
aXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNI
RSkKKyAgICAvLyBPbmx5IHRoZSBkYXRhIGluc2lkZSB0aGUgcmVzb3VyY2Ugd2FzIG1hcHBlZCwg
bm90IHRoZSBlbnRpcmUgcmVzb3VyY2UuCisgICAgbWFwcGVkU2l6ZSArPSBvLT5pc1VzaW5nRGlz
a0ltYWdlQ2FjaGUoKSA/IG8tPnJlc291cmNlQnVmZmVyKCktPnNoYXJlZEJ1ZmZlcigpLT5zaXpl
KCkgOiAwOworI2VuZGlmCiB9CiAKIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hl
OjpnZXRTdGF0aXN0aWNzKCkKQEAgLTgzMiw5ICs4ODAsMTUgQEAgdm9pZCBNZW1vcnlDYWNoZTo6
cHJ1bmVUb1BlcmNlbnRhZ2UoZmxvYXQgdGFyZ2V0UGVyY2VudExpdmUpCiB2b2lkIE1lbW9yeUNh
Y2hlOjpkdW1wU3RhdHMoKQogewogICAgIFN0YXRpc3RpY3MgcyA9IGdldFN0YXRpc3RpY3MoKTsK
KyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAgICBwcmludGYoIiUtMTNzICUtMTNzICUt
MTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG4iLCAiIiwgIkNvdW50Iiwg
IlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiLCAiUHVyZ2VhYmxlU2l6ZSIsICJQdXJn
ZWRTaXplIiwgIk1hcHBlZCIsICJcIlJlYWxcIiIpOworICAgIHByaW50ZigiJS0xM3MgJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICItLS0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwg
Ii0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIpOworICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNk
ICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291
bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6
ZSwgcy5pbWFnZXMucHVyZ2VhYmxlU2l6ZSwgcy5pbWFnZXMucHVyZ2VkU2l6ZSwgcy5pbWFnZXMu
bWFwcGVkU2l6ZSwgcy5pbWFnZXMuc2l6ZSAtIHMuaW1hZ2VzLm1hcHBlZFNpemUpOworI2Vsc2UK
ICAgICBwcmludGYoIiUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG4i
LCAiIiwgIkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiLCAiUHVyZ2Vh
YmxlU2l6ZSIsICJQdXJnZWRTaXplIik7CiAgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAl
LTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICIt
LS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iKTsKICAgICBwcmludGYoIiUtMTNzICUxM2Qg
JTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMu
aW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSwgcy5p
bWFnZXMucHVyZ2VhYmxlU2l6ZSwgcy5pbWFnZXMucHVyZ2VkU2l6ZSk7CisjZW5kaWYKICAgICBw
cmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiQ1NTIiwgcy5j
c3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hl
ZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRTaXplLCBzLmNzc1N0eWxlU2hl
ZXRzLnB1cmdlYWJsZVNpemUsIHMuY3NzU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSk7CiAjaWYgRU5B
QkxFKFhTTFQpCiAgICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2QgJTEz
ZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVTaGVldHMuY291bnQsIHMueHNsU3R5bGVTaGVldHMuc2l6
ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6
ZSwgcy54c2xTdHlsZVNoZWV0cy5wdXJnZWFibGVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLnB1cmdl
ZFNpemUpOwpAQCAtODQ2LDcgKzkwMCwxMSBAQCB2b2lkIE1lbW9yeUNhY2hlOjpkdW1wU3RhdHMo
KQogCiB2b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29u
c3QKIHsKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAgICBwcmludGYoIkxSVS1TUCBs
aXN0cyBpbiBldmljdGlvbiBvcmRlciAoS2lsb2J5dGVzIGRlY29kZWQsIEtpbG9ieXRlcyBlbmNv
ZGVkLCBBY2Nlc3MgY291bnQsIFJlZmVyZW5jZWQsIGlzUHVyZ2VhYmxlLCB3YXNQdXJnZWQsIGlz
TWVtb3J5TWFwcGVkKTpcbiIpOworI2Vsc2UKICAgICBwcmludGYoIkxSVS1TUCBsaXN0cyBpbiBl
dmljdGlvbiBvcmRlciAoS2lsb2J5dGVzIGRlY29kZWQsIEtpbG9ieXRlcyBlbmNvZGVkLCBBY2Nl
c3MgY291bnQsIFJlZmVyZW5jZWQsIGlzUHVyZ2VhYmxlLCB3YXNQdXJnZWQpOlxuIik7CisjZW5k
aWYKIAogICAgIGludCBzaXplID0gbV9hbGxSZXNvdXJjZXMuc2l6ZSgpOwogICAgIGZvciAoaW50
IGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKQEAgLTg1NSw3ICs5MTMsMTEgQEAgdm9pZCBN
ZW1vcnlDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0CiAgICAgICAg
IHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1
cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKICAgICAgICAgICAgIGlmIChpbmNsdWRl
TGl2ZSB8fCAhY3VycmVudC0+aGFzQ2xpZW50cygpKQorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NB
Q0hFKQorICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFmSywgJXVBLCAlZFIsICVk
LCAlZCwgJWQpOyAiLCBjdXJyZW50LT5kZWNvZGVkU2l6ZSgpIC8gMTAyNC4wZiwgKGN1cnJlbnQt
PmVuY29kZWRTaXplKCkgKyBjdXJyZW50LT5vdmVyaGVhZFNpemUoKSkgLyAxMDI0LjBmLCBjdXJy
ZW50LT5hY2Nlc3NDb3VudCgpLCBjdXJyZW50LT5oYXNDbGllbnRzKCksIGN1cnJlbnQtPmlzUHVy
Z2VhYmxlKCksIGN1cnJlbnQtPndhc1B1cmdlZCgpLCBjdXJyZW50LT5pc1VzaW5nRGlza0ltYWdl
Q2FjaGUoKSk7CisjZWxzZQogICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFmSywg
JXVBLCAlZFIsICVkLCAlZCk7ICIsIGN1cnJlbnQtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBmLCAo
Y3VycmVudC0+ZW5jb2RlZFNpemUoKSArIGN1cnJlbnQtPm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQu
MGYsIGN1cnJlbnQtPmFjY2Vzc0NvdW50KCksIGN1cnJlbnQtPmhhc0NsaWVudHMoKSwgY3VycmVu
dC0+aXNQdXJnZWFibGUoKSwgY3VycmVudC0+d2FzUHVyZ2VkKCkpOworI2VuZGlmCiAKICAgICAg
ICAgICAgIGN1cnJlbnQgPSBwcmV2OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9NZW1vcnlDYWNoZS5oCmluZGV4IDc4NWNkZTIzNWE2MjBlN2U5ZDQxYmQ0Y2YwNzg3MGIx
ZTk0NGUwYTEuLjNkNGQyYTYyNWE2NzBjMzUwZTkxZDdjMjU4YzRhNzE4MjY3ZTdmOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCkBAIC0xMDAsNyArMTAwLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgaW50IGRlY29kZWRTaXplOwogICAgICAgICBpbnQgcHVyZ2Vh
YmxlU2l6ZTsKICAgICAgICAgaW50IHB1cmdlZFNpemU7CisjaWYgRU5BQkxFKERJU0tfSU1BR0Vf
Q0FDSEUpCisgICAgICAgIGludCBtYXBwZWRTaXplOworICAgICAgICBUeXBlU3RhdGlzdGljKCkg
OiBjb3VudCgwKSwgc2l6ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApLCBwdXJnZWFi
bGVTaXplKDApLCBwdXJnZWRTaXplKDApLCBtYXBwZWRTaXplKDApIHsgfQorI2Vsc2UKICAgICAg
ICAgVHlwZVN0YXRpc3RpYygpIDogY291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBkZWNv
ZGVkU2l6ZSgwKSwgcHVyZ2VhYmxlU2l6ZSgwKSwgcHVyZ2VkU2l6ZSgwKSB7IH0KKyNlbmRpZgog
ICAgICAgICB2b2lkIGFkZFJlc291cmNlKENhY2hlZFJlc291cmNlKik7CiAgICAgfTsKICAgICAK
QEAgLTE2MCw2ICsxNjUsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFr
ZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpOwogCisjaWYgRU5BQkxFKERJU0tfSU1BR0Vf
Q0FDSEUpCisgICAgdm9pZCBmbHVzaENhY2hlZEltYWdlc1RvRGlzaygpOyAvLyBGbHVzaCBlbmNv
ZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgc3RpbGwgcmVmZXJlbmNlZCBieSB3ZWIgcGFnZXMuCisj
ZW5kaWYKKwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVybEZyb21DYWNoZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZVJlcXVlc3RGcm9tQ2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaW9zL0Rp
c2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaW9zL0Rpc2tJ
bWFnZUNhY2hlQ2xpZW50SU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmU5MTM2MzVlOWY5ZmY0MTI0NmZlMWIx
MTIwMDUzYjU3YmU5YmQxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pb3MvRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPU19oCisjZGVmaW5lIERpc2tJbWFn
ZUNhY2hlQ2xpZW50SU9TX2gKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFU
Rk9STShJT1MpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpc2tJbWFn
ZUNhY2hlQ2xpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8RGlza0ltYWdlQ2FjaGVDbGllbnQ+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5EaXNrSW1hZ2VDYWNoZUNsaWVudCgpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaWRDcmVhdGVEaXNrSW1hZ2VDYWNoZURpcmVjdG9yeShjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8v
IERpc2tJbWFnZUNhY2hlQ2xpZW50SU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9pb3MvRGlza0ltYWdlQ2FjaGVJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pb3Mv
RGlza0ltYWdlQ2FjaGVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDMxNmI3NjQxM2Y5OTRlNTMzMzJhNGY4
Yzg5MzY2YjQzNDExN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2lvcy9EaXNrSW1hZ2VDYWNoZUlPUy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBEaXNrSW1hZ2VDYWNoZUlPU19oCisjZGVmaW5lIERpc2tJbWFnZUNhY2hlSU9TX2gK
KworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1MpCisKKyNpbmNs
dWRlICJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBEaXNrSW1hZ2VD
YWNoZUlkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEdsb2JhbCBkaXNrIGltYWdlIGNh
Y2hlIG9iamVjdC4KK2NsYXNzIERpc2tJbWFnZUNhY2hlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEaXNrSW1hZ2VDYWNoZSk7Citwcml2YXRlOgorCisgICAgLy8gTGlmZXRpbWUgb2YgdGhp
cyBFbnRyeSBhbmQgdGhlIFNoYXJlZEJ1ZmZlciBpdCB3cmFwcyBpcyBtYW5hZ2VkIG9uIHRoZSBX
ZWJUaHJlYWQuCisgICAgY2xhc3MgRW50cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxFbnRyeT4gewor
ICAgIHByaXZhdGU6CisgICAgICAgIEVudHJ5KFNoYXJlZEJ1ZmZlciosIERpc2tJbWFnZUNhY2hl
SWQpOworCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXNrSW1hZ2VD
YWNoZTo6RW50cnk+IGNyZWF0ZShTaGFyZWRCdWZmZXIqIGJ1ZmZlciwgRGlza0ltYWdlQ2FjaGVJ
ZCBpZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXNrSW1h
Z2VDYWNoZTo6RW50cnkoYnVmZmVyLCBpZCkpOworICAgICAgICB9CisKKyAgICAgICAgfkVudHJ5
KCk7CisKKyAgICAgICAgdm9pZCBtYXAoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICAgICAgdm9p
ZCB1bm1hcCgpOworICAgICAgICB2b2lkIHJlbW92ZUZpbGUoKTsKKyAgICAgICAgdm9pZCBjbGVh
ckRhdGFXaXRob3V0TWFwcGluZygpOworCisgICAgICAgIERpc2tJbWFnZUNhY2hlSWQgaWQoKSBj
b25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKyAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
cGluZzsgfQorICAgICAgICBib29sIGlzTWFwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwaW5n
ICE9IG51bGxwdHI7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbWFwSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICAgICAgaW50IHdyaXRlVG9GaWxlSW50ZXJuYWwoUGxh
dGZvcm1GaWxlSGFuZGxlKTsKKworICAgICAgICBTaGFyZWRCdWZmZXIqIG1fYnVmZmVyOworICAg
ICAgICBEaXNrSW1hZ2VDYWNoZUlkIG1faWQ7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAg
ICAgICAgdm9pZCogbV9tYXBwaW5nOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgIH07CisK
K3B1YmxpYzoKKyAgICBmcmllbmQgRGlza0ltYWdlQ2FjaGUmIGRpc2tJbWFnZUNhY2hlKCk7Cisg
ICAgc3RhdGljIGNvbnN0IERpc2tJbWFnZUNhY2hlSWQgaW52YWxpZERpc2tDYWNoZUlkID0gMDsK
KworICAgIC8vIFdyaXRlIG91dCBhbiBpdGVtLgorICAgIERpc2tJbWFnZUNhY2hlSWQgd3JpdGVJ
dGVtKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKKyAgICAvLyBSZW1vdmUgaXRlbS4KKyAg
ICB2b2lkIHJlbW92ZUl0ZW0oRGlza0ltYWdlQ2FjaGVJZCk7CisKKyAgICAvLyBNYXBwaW5nIGZv
ciBhbiBpdGVtLgorICAgIHZvaWQqIGRhdGFGb3JJdGVtKERpc2tJbWFnZUNhY2hlSWQpOworCisg
ICAgLy8gU2V0dXAgYSBjbGllbnQgZm9yIGNhbGxiYWNrcy4KKyAgICB2b2lkIHNldENsaWVudChQ
YXNzUmVmUHRyPERpc2tJbWFnZUNhY2hlQ2xpZW50PiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGll
bnQ7IH0KKworICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9
CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZWQgPSBlbmFibGVk
OyB9CisKKyAgICB1bnNpZ25lZCBtYXhpbXVtQ2FjaGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhpbXVtQ2FjaGVTaXplOyB9CisgICAgdm9pZCBzZXRNYXhpbXVtQ2FjaGVTaXplKHVuc2lnbmVk
IG1heGltdW0pIHsgbV9tYXhpbXVtQ2FjaGVTaXplID0gbWF4aW11bTsgfQorCisgICAgdW5zaWdu
ZWQgbWluaW11bUltYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bUltYWdlU2l6ZTsg
fQorICAgIHZvaWQgc2V0TWluaW11bUltYWdlU2l6ZSh1bnNpZ25lZCBtaW5pbXVtKSB7IG1fbWlu
aW11bUltYWdlU2l6ZSA9IG1pbmltdW07IH0KKworICAgIGNvbnN0IFN0cmluZyYgY2FjaGVEaXJl
Y3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlRGlyZWN0b3J5OyB9CisKKyAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0Z1bGwoKSBjb25z
dCB7IHJldHVybiBtX3NpemUgPj0gbV9tYXhpbXVtQ2FjaGVTaXplOyB9CisKK3ByaXZhdGU6Cisg
ICAgRGlza0ltYWdlQ2FjaGUoKTsKKyAgICB+RGlza0ltYWdlQ2FjaGUoKSB7IH0KKworICAgIGJv
b2wgY3JlYXRlRGlyZWN0b3J5SWZOZWVkZWQoKTsKKyAgICBEaXNrSW1hZ2VDYWNoZUlkIG5leHRB
dmFpbGFibGVJZCgpOworCisgICAgU3RyaW5nIHRlbXBvcmFyeURpcmVjdG9yeSgpOworICAgIFN0
cmluZyB0ZW1wb3JhcnlGaWxlKCk7CisKKyAgICB2b2lkIHVwZGF0ZVNpemUodW5zaWduZWQgZGVs
dGEpOworCisgICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgdW5zaWduZWQgbV9zaXplOworICAgIHVu
c2lnbmVkIG1fbWF4aW11bUNhY2hlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX21pbmltdW1JbWFnZVNp
emU7CisgICAgRGlza0ltYWdlQ2FjaGVJZCBtX25leHRBdmFpbGFibGVJZDsKKyAgICBTdHJpbmcg
bV9jYWNoZURpcmVjdG9yeTsKKworICAgIFJlZlB0cjxEaXNrSW1hZ2VDYWNoZUNsaWVudD4gbV9j
bGllbnQ7CisgICAgSGFzaE1hcDxEaXNrSW1hZ2VDYWNoZUlkLCBSZWZQdHI8RGlza0ltYWdlQ2Fj
aGU6OkVudHJ5Pj4gbV90YWJsZTsKKworICAgIE11dGV4IG1fbXV0ZXg7Cit9OworCisvLyBGdW5j
dGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbCBkaXNrIGltYWdlIGNhY2hlLgorRGlza0ltYWdlQ2Fj
aGUmIGRpc2tJbWFnZUNhY2hlKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1MpCisKKyNlbmRpZiAv
LyBEaXNrSW1hZ2VDYWNoZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aW9zL0Rpc2tJbWFnZUNhY2hlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lvcy9EaXNr
SW1hZ2VDYWNoZUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOThkYTY2NzU5YTM3ZWM1ZDFlZDIwZjk5YThm
YTJlMWY5NWU0YmFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lv
cy9EaXNrSW1hZ2VDYWNoZUlPUy5tbQpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNrSW1hZ2VDYWNoZUlPUy5oIgorCisjaWYg
RU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkZp
bGVTeXN0ZW1JT1MuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRo
cmVhZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Rpc2tJbWFnZUNhY2hlJiBkaXNrSW1h
Z2VDYWNoZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc2tJbWFnZUNhY2hlPiBj
YWNoZTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK0Rpc2tJbWFnZUNhY2hlOjpFbnRyeTo6RW50
cnkoU2hhcmVkQnVmZmVyKiBidWZmZXIsIERpc2tJbWFnZUNhY2hlSWQgaWQpCisgICAgOiBtX2J1
ZmZlcihidWZmZXIpCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX21h
cHBpbmcobnVsbHB0cikKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAg
IEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKyAgICBBU1NFUlQobV9idWZmZXIpOworICAg
IG1fYnVmZmVyLT5yZWYoKTsKK30KKworRGlza0ltYWdlQ2FjaGU6OkVudHJ5Ojp+RW50cnkoKQor
eworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgQVNTRVJUKFdlYlRocmVh
ZElzTG9ja2VkKCkpOworICAgIEFTU0VSVCghbV9idWZmZXIpOworICAgIEFTU0VSVCghbV9tYXBw
aW5nKTsKK30KKworYm9vbCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6Om1hcEludGVybmFsKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQobV9idWZmZXIpOworICAgIEFTU0VSVCghbV9t
YXBwaW5nKTsKKworICAgIG1fcGF0aCA9IHBhdGg7CisgICAgbV9zaXplID0gbV9idWZmZXItPnNp
emUoKTsKKworICAgIC8vIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisg
ICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCks
IE9fQ1JFQVQgfCBPX1JEV1IgfCBPX1RSVU5DLCBzdGF0aWNfY2FzdDxtb2RlX3Q+KDA2MDApKTsK
KyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIGZpbGUuCisgICAgaWYgKHdyaXRlVG9GaWxl
SW50ZXJuYWwoaGFuZGxlKSA9PSAtMSkgeworICAgICAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAg
ICAgICAgZGVsZXRlRmlsZShtX3BhdGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gU2VlayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuCisgICAgaWYgKHNlZWtGaWxlKGhh
bmRsZSwgMCwgU2Vla0Zyb21CZWdpbm5pbmcpID09IC0xKSB7CisgICAgICAgIGNsb3NlRmlsZSho
YW5kbGUpOworICAgICAgICBkZWxldGVGaWxlKG1fcGF0aCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBQZXJmb3JtIG1lbW9yeSBtYXBwaW5nIGZvciByZWFkaW5nLgor
ICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgb3BlbigpIGFib3Zl
LCB3aGljaCBtdXN0IGFsc28gb3BlbiBmb3IgcmVhZGluZy4KKyAgICBtX21hcHBpbmcgPSBtbWFw
KG51bGxwdHIsIG1fc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBoYW5kbGUsIDApOworICAg
IGNsb3NlRmlsZShoYW5kbGUpOworICAgIGlmIChtX21hcHBpbmcgPT0gTUFQX0ZBSUxFRCkgewor
ICAgICAgICBMT0coRGlza0ltYWdlQ2FjaGUsICJEaXNrSW1hZ2VDYWNoZTogbWFwcGluZyBmYWls
ZWQgKCVkKTogKCVzKSIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBtX21hcHBp
bmcgPSBudWxscHRyOworICAgICAgICBkZWxldGVGaWxlKG1fcGF0aCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEaXNrSW1hZ2VD
YWNoZTo6RW50cnk6Om1hcChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQVNTRVJUKG1fYnVm
ZmVyKTsKKyAgICBBU1NFUlQoIW1fbWFwcGluZyk7CisgICAgRGlza0ltYWdlQ2FjaGU6OkVudHJ5
KiB0aGlzRW50cnkgPSB0aGlzOworCisgICAgYm9vbCBmaWxlTWFwcGVkID0gbWFwSW50ZXJuYWwo
cGF0aCk7CisgICAgaWYgKCFmaWxlTWFwcGVkKSB7CisgICAgICAgIC8vIE5vdGlmeSB0aGUgYnVm
ZmVyIGluIHRoZSBjYXNlIG9mIGEgZmFpbGVkIG1hcHBpbmcuCisgICAgICAgIFdlYlRocmVhZFJ1
biheeworICAgICAgICAgICAgbV9idWZmZXItPmZhaWxlZE1lbW9yeU1hcCgpOworICAgICAgICAg
ICAgbV9idWZmZXItPmRlcmVmKCk7CisgICAgICAgICAgICBtX2J1ZmZlciA9IDA7CisgICAgICAg
ICAgICB0aGlzRW50cnktPmRlcmVmKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gTm90aWZ5IHRoZSBidWZmZXIgaW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNz
ZnVsIG1hcHBpbmcuCisgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIG9uIHRoZSBXZWJUaHJlYWQg
YmVjYXVzZSB0aGlzIGlzIGJlaW5nIHJ1bgorICAgIC8vIGFzeW5jaHJvbm91c2x5IGluc2lkZSBh
IGRpc3BhdGNoIHF1ZXVlLgorICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBtX2J1ZmZlci0+
bWFya0FzTWVtb3J5TWFwcGVkKCk7CisgICAgICAgIG1fYnVmZmVyLT5kZXJlZigpOworICAgICAg
ICBtX2J1ZmZlciA9IDA7CisgICAgICAgIHRoaXNFbnRyeS0+ZGVyZWYoKTsKKyAgICB9KTsKK30K
Kwordm9pZCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6OnVubWFwKCkKK3sKKyAgICBpZiAoIW1fbWFw
cGluZykgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobXVubWFwKG1fbWFwcGluZywgbV9zaXplKSA9PSAtMSkKKyAgICAgICAgTE9H
X0VSUk9SKCJEaXNrSW1hZ2VDYWNoZTogQ291bGQgbm90IG11bm1hcCBhIG1lbW9yeSBtYXBwZWQg
ZmlsZSB3aXRoIGlkICglZCkiLCBtX2lkKTsKKworICAgIG1fbWFwcGluZyA9IG51bGxwdHI7Cisg
ICAgbV9zaXplID0gMDsKK30KKwordm9pZCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6OnJlbW92ZUZp
bGUoKQoreworICAgIEFTU0VSVCghbV9tYXBwaW5nKTsKKyAgICBBU1NFUlQoIW1fc2l6ZSk7CisK
KyAgICBpZiAoIWRlbGV0ZUZpbGUobV9wYXRoKSkKKyAgICAgICAgTE9HX0VSUk9SKCJEaXNrSW1h
Z2VDYWNoZTogQ291bGQgbm90IGRlbGV0ZSBtZW1vcnkgbWFwcGVkIGZpbGUgKCVzKSIsIG1fcGF0
aC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6OmNsZWFy
RGF0YVdpdGhvdXRNYXBwaW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fbWFwcGluZyk7CisgICAgQVNT
RVJUKG1fYnVmZmVyKTsKKyAgICBtX2J1ZmZlci0+ZGVyZWYoKTsKKyAgICBtX2J1ZmZlciA9IDA7
Cit9CisKK2ludCBEaXNrSW1hZ2VDYWNoZTo6RW50cnk6OndyaXRlVG9GaWxlSW50ZXJuYWwoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQobV9idWZmZXIpOworICAgIGlu
dCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7CisKKyAgICBjb25zdCBjaGFyKiBzZWdtZW50ID0gbnVs
bHB0cjsKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHVuc2lnbmVkIGxl
bmd0aCA9IG1fYnVmZmVyLT5nZXRTb21lRGF0YShzZWdtZW50LCBwb3NpdGlvbikpIHsKKyAgICAg
ICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKGhhbmRsZSwgc2VnbWVudCwgbGVuZ3Ro
KTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKworICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CisgICAgICAg
IHBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0
ZW47Cit9CisKKworRGlza0ltYWdlQ2FjaGU6OkRpc2tJbWFnZUNhY2hlKCkKKyAgICA6IG1fZW5h
YmxlZChmYWxzZSkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9tYXhpbXVtQ2FjaGVTaXplKDEw
MCAqIDEwMjQgKiAxMDI0KQorICAgICwgbV9taW5pbXVtSW1hZ2VTaXplKDEwMCAqIDEwMjQpCisg
ICAgLCBtX25leHRBdmFpbGFibGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlk
ICsgMSkKK3sKK30KKworRGlza0ltYWdlQ2FjaGVJZCBEaXNrSW1hZ2VDYWNoZTo6d3JpdGVJdGVt
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBpdGVtKQoreworICAgIGlmICghaXNFbmFibGVkKCkg
fHwgIWNyZWF0ZURpcmVjdG9yeUlmTmVlZGVkKCkpCisgICAgICAgIHJldHVybiBEaXNrSW1hZ2VD
YWNoZTo6aW52YWxpZERpc2tDYWNoZUlkOworCisgICAgLy8gV2UgYXJlIGFscmVhZHkgZnVsbCwg
Y2Fubm90IGFkZCBhbnl0aGluZyB1bnRpbCBzb21ldGhpbmcgaXMgcmVtb3ZlZC4KKyAgICBpZiAo
aXNGdWxsKCkpIHsKKyAgICAgICAgTE9HKERpc2tJbWFnZUNhY2hlLCAiRGlza0ltYWdlQ2FjaGU6
IGNvdWxkIG5vdCBwcm9jZXNzIGFuIGl0ZW0gYmVjYXVzZSB0aGUgY2FjaGUgd2FzIGZ1bGwgYXQg
KCVkKS4gVGhlIFwibWF4XCIgYmVpbmcgKCVkKSIsIG1fc2l6ZSwgbV9tYXhpbXVtQ2FjaGVTaXpl
KTsKKyAgICAgICAgcmV0dXJuIERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQ7Cisg
ICAgfQorCisgICAgLy8gQ3JlYXRlIGFuIGVudHJ5LgorICAgIERpc2tJbWFnZUNhY2hlSWQgaWQg
PSBuZXh0QXZhaWxhYmxlSWQoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBp
dGVtOworICAgIFJlZlB0cjxEaXNrSW1hZ2VDYWNoZTo6RW50cnk+IGVudHJ5ID0gRGlza0ltYWdl
Q2FjaGU6OkVudHJ5OjpjcmVhdGUoYnVmZmVyLmdldCgpLCBpZCk7CisgICAgbV90YWJsZS5hZGQo
aWQsIGVudHJ5KTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGguCisgICAg
U3RyaW5nIHBhdGggPSB0ZW1wb3JhcnlGaWxlKCk7CisgICAgTE9HKERpc2tJbWFnZUNhY2hlLCAi
RGlza0ltYWdlQ2FjaGU6IGNyZWF0aW5nIGVudHJ5ICglZCkgYXQgKCVzKSIsIGlkLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgIGlmIChwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRGlz
a0ltYWdlQ2FjaGU6OmludmFsaWREaXNrQ2FjaGVJZDsKKworICAgIC8vIFRoZSBsaWZldGltZSBv
ZiB0aGUgRW50cnkgaXMgaGFuZGxlZCBvbiB0aGUgV2ViVGhyZWFkLgorICAgIC8vIEJlZm9yZSB3
ZSBzZW5kIHRvIGEgZGlzcGF0Y2ggcXVldWUgd2UgbmVlZCB0byByZWYgc28KKyAgICAvLyB0aGF0
IHdlIGFyZSBzdXJlIHRoZSBvYmplY3Qgc3RpbGwgZXhpc3RzLiBUaGlzIGNhbGwKKyAgICAvLyBp
cyBiYWxhbmNlZCBpbiB0aGUgV2ViVGhyZWFkUnVuIGluc2lkZSBvZiBFbnRyeTo6bWFwLgorICAg
IC8vIG9yIHRoZSBlYXJseSByZXR1cm4gaW4gdGhpcyBkaXNwYXRjaC4KKyAgICBEaXNrSW1hZ2VD
YWNoZTo6RW50cnkqIGxvY2FsRW50cnlGb3JCbG9jayA9IGVudHJ5LmdldCgpOworICAgIGxvY2Fs
RW50cnlGb3JCbG9jay0+cmVmKCk7CisKKyAgICAvLyBNYXAgdG8gZGlzayBhc3luY2hyb25vdXNs
eS4KKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENI
X1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICAvLyBUaGUgY2FjaGUgYmVj
YW1lIGZ1bGwgc2luY2UgdGhlIHRpbWUgd2Ugd2VyZSBhZGRlZCB0byB0aGUgcXVldWUuIERvbid0
IG1hcC4KKyAgICAgICAgaWYgKGRpc2tJbWFnZUNhY2hlKCkuaXNGdWxsKCkpIHsKKyAgICAgICAg
ICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICAgICAgICAgIGxvY2FsRW50cnlGb3JCbG9jay0+
Y2xlYXJEYXRhV2l0aG91dE1hcHBpbmcoKTsKKyAgICAgICAgICAgICAgICBsb2NhbEVudHJ5Rm9y
QmxvY2stPmRlcmVmKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGxvY2FsRW50cnlGb3JCbG9jay0+bWFwKHBhdGgpOworCisgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgc2l6ZSBvbiBhIHN1Y2Nlc3NmdWwgbWFwcGluZy4KKyAgICAgICAg
aWYgKGxvY2FsRW50cnlGb3JCbG9jay0+aXNNYXBwZWQoKSkKKyAgICAgICAgICAgIGRpc2tJbWFn
ZUNhY2hlKCkudXBkYXRlU2l6ZShsb2NhbEVudHJ5Rm9yQmxvY2stPnNpemUoKSk7CisgICAgfSk7
CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgRGlza0ltYWdlQ2FjaGU6OnVwZGF0ZVNpemUo
dW5zaWduZWQgZGVsdGEpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBt
X3NpemUgKz0gZGVsdGE7Cit9CisKK3ZvaWQgRGlza0ltYWdlQ2FjaGU6OnJlbW92ZUl0ZW0oRGlz
a0ltYWdlQ2FjaGVJZCBpZCkKK3sKKyAgICBMT0coRGlza0ltYWdlQ2FjaGUsICJEaXNrSW1hZ2VD
YWNoZTogcmVtb3ZlSXRlbSAoJWQpIiwgaWQpOworICAgIFJlZlB0cjxEaXNrSW1hZ2VDYWNoZTo6
RW50cnk+IGVudHJ5ID0gbV90YWJsZS5nZXQoaWQpOworICAgIG1fdGFibGUucmVtb3ZlKGlkKTsK
KyAgICBpZiAoIWVudHJ5LT5pc01hcHBlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1cGRh
dGVTaXplKC0oZW50cnktPnNpemUoKSkpOworCisgICAgRGlza0ltYWdlQ2FjaGU6OkVudHJ5ICps
b2NhbEVudHJ5Rm9yQmxvY2sgPSBlbnRyeS5nZXQoKTsKKyAgICBsb2NhbEVudHJ5Rm9yQmxvY2st
PnJlZigpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElT
UEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CisgICAgICAgIGxvY2FsRW50cnlG
b3JCbG9jay0+dW5tYXAoKTsKKyAgICAgICAgbG9jYWxFbnRyeUZvckJsb2NrLT5yZW1vdmVGaWxl
KCk7CisgICAgICAgIFdlYlRocmVhZFJ1biheeyBsb2NhbEVudHJ5Rm9yQmxvY2stPmRlcmVmKCk7
IH0pOworICAgIH0pOworfQorCit2b2lkKiBEaXNrSW1hZ2VDYWNoZTo6ZGF0YUZvckl0ZW0oRGlz
a0ltYWdlQ2FjaGVJZCBpZCkKK3sKKyAgICBBU1NFUlQoaWQpOworCisgICAgUmVmUHRyPERpc2tJ
bWFnZUNhY2hlOjpFbnRyeT4gZW50cnkgPSBtX3RhYmxlLmdldChpZCk7CisgICAgQVNTRVJUKGVu
dHJ5LT5pc01hcHBlZCgpKTsKKyAgICByZXR1cm4gZW50cnktPmRhdGEoKTsKK30KKworYm9vbCBE
aXNrSW1hZ2VDYWNoZTo6Y3JlYXRlRGlyZWN0b3J5SWZOZWVkZWQoKQoreworICAgIGlmICghbV9j
YWNoZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2Nh
Y2hlRGlyZWN0b3J5ID0gdGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisgICAgTE9HKERpc2tJbWFnZUNh
Y2hlLCAiRGlza0ltYWdlQ2FjaGU6IENyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoJXMpIiwg
bV9jYWNoZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jYWNoZURpcmVjdG9y
eS5pc051bGwoKSkgeworICAgICAgICBMT0dfRVJST1IoIkRpc2tJbWFnZUNhY2hlOiBjb3VsZCBu
b3QgY3JlYXRlIGNhY2hlIGRpcmVjdG9yeSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ3JlYXRlRGlza0lt
YWdlQ2FjaGVEaXJlY3RvcnkobV9jYWNoZURpcmVjdG9yeSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworRGlza0ltYWdlQ2FjaGVJZCBEaXNrSW1hZ2VDYWNoZTo6bmV4dEF2YWlsYWJsZUlkKCkK
K3sKKyAgICByZXR1cm4gbV9uZXh0QXZhaWxhYmxlSWQrKzsKK30KKworU3RyaW5nIERpc2tJbWFn
ZUNhY2hlOjp0ZW1wb3JhcnlEaXJlY3RvcnkoKQoreworICAgIE5TU3RyaW5nICp0ZW1wRGlza0Nh
Y2hlRGlyZWN0b3J5ID0gY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KEAiRGlza0ltYWdlQ2FjaGUi
KTsKKyAgICBpZiAoIXRlbXBEaXNrQ2FjaGVEaXJlY3RvcnkpCisgICAgICAgIExPR19FUlJPUigi
RGlza0ltYWdlQ2FjaGU6IENvdWxkIG5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIp
OworCisgICAgcmV0dXJuIHRlbXBEaXNrQ2FjaGVEaXJlY3Rvcnk7Cit9CisKK1N0cmluZyBEaXNr
SW1hZ2VDYWNoZTo6dGVtcG9yYXJ5RmlsZSgpCit7CisgICAgTlNTdHJpbmcgKnRlbXBGaWxlID0g
Y3JlYXRlVGVtcG9yYXJ5RmlsZShtX2NhY2hlRGlyZWN0b3J5LCBAInRtcCIpOworICAgIGlmICgh
dGVtcEZpbGUpCisgICAgICAgIExPR19FUlJPUigiRGlza0ltYWdlQ2FjaGU6IENvdWxkIG5vdCBj
cmVhdGUgYSB0ZW1wb3JhcnkgZmlsZS4iKTsKKworICAgIHJldHVybiB0ZW1wRmlsZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERJU0tfSU1BR0VfQ0FD
SEUpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCA5ZTA0
ZTU5OGU2MTg5MDc2MDVmZTIxNDVjMTRhZmU5ODhkMDkwODI1Li4xYmFhYjMwM2EwZTNmZWM1YzJl
MjViZTcwNDUyM2NlZDNiNWFiNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCkBAIC00
Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKEFyY2hpdmVzKSBcCiAgICAg
TShCYWNrRm9yd2FyZCkgXAogICAgIE0oQ29tcG9zaXRpbmcpIFwKKyAgICBNKERpc2tJbWFnZUNh
Y2hlKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVudHMpIFwKICAgICBNKEZUUCkgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMzM4NDUxNTljMDc2
YmUzY2IyMWZiZmViNTM3ZGQ1MTg1M2NiMzllMC4uZWIxMWYwY2YyMjE1Mzg2ODM2NzA4NDhlNjE1
YWNiYzJlMWE1MmIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNI
RSkKKyNpbmNsdWRlICJEaXNrSW1hZ2VDYWNoZUlPUy5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDE3ICs2NSwzNSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZnJlZVNlZ21lbnQoY2hhciogcCkKIAogU2hhcmVkQnVmZmVyOjpTaGFy
ZWRCdWZmZXIoKQogICAgIDogbV9zaXplKDApCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUp
CisgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQorICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlk
KERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCisgICAgLCBtX25vdGlmeU1lbW9y
eU1hcHBlZENhbGxiYWNrKG51bGxwdHIpCisgICAgLCBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxi
YWNrRGF0YShudWxscHRyKQorI2VuZGlmCiB7CiB9CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKHNpemVfdCBzaXplKQogICAgIDogbV9zaXplKHNpemUpCiAgICAgLCBtX2J1ZmZlcihzaXpl
KQorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgICwgbV9pc01lbW9yeU1hcHBlZChm
YWxzZSkKKyAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERp
c2tDYWNoZUlkKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjayhudWxscHRyKQor
ICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEobnVsbHB0cikKKyNlbmRpZgog
ewogfQogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQg
c2l6ZSkKICAgICA6IG1fc2l6ZSgwKQorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAg
ICwgbV9pc01lbW9yeU1hcHBlZChmYWxzZSkKKyAgICAsIG1fZGlza0ltYWdlQ2FjaGVJZChEaXNr
SW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBw
ZWRDYWxsYmFjayhudWxscHRyKQorICAgICwgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0Rh
dGEobnVsbHB0cikKKyNlbmRpZgogewogICAgIC8vIEZJWE1FOiBVc2UgdW5zaWduZWQgY29uc2lz
dGVudGx5LCBhbmQgY2hlY2sgZm9yIGludmFsaWQgY2FzdHMgd2hlbiBjYWxsaW5nIGludG8gU2hh
cmVkQnVmZmVyIGZyb20gb3RoZXIgY29kZS4KICAgICBpZiAoc2l6ZSA8IDApCkBAIC04Miw2ICsx
MDQsMTIgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50
IHNpemUpCiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGRhdGEsIGludCBzaXplKQogICAgIDogbV9zaXplKDApCisjaWYgRU5BQkxFKERJU0tfSU1BR0Vf
Q0FDSEUpCisgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQorICAgICwgbV9kaXNrSW1hZ2VD
YWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCisgICAgLCBtX25vdGlm
eU1lbW9yeU1hcHBlZENhbGxiYWNrKG51bGxwdHIpCisgICAgLCBtX25vdGlmeU1lbW9yeU1hcHBl
ZENhbGxiYWNrRGF0YShudWxscHRyKQorI2VuZGlmCiB7CiAgICAgLy8gRklYTUU6IFVzZSB1bnNp
Z25lZCBjb25zaXN0ZW50bHksIGFuZCBjaGVjayBmb3IgaW52YWxpZCBjYXN0cyB3aGVuIGNhbGxp
bmcgaW50byBTaGFyZWRCdWZmZXIgZnJvbSBvdGhlciBjb2RlLgogICAgIGlmIChzaXplIDwgMCkK
QEAgLTkyLDYgKzEyMCwxMyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihjb25zdCB1bnNp
Z25lZCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKICAgICAKIFNoYXJlZEJ1ZmZlcjo6flNoYXJlZEJ1
ZmZlcigpCiB7CisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAgaWYgKG1fZGlza0lt
YWdlQ2FjaGVJZCkgeworICAgICAgICBkaXNrSW1hZ2VDYWNoZSgpLnJlbW92ZUl0ZW0obV9kaXNr
SW1hZ2VDYWNoZUlkKTsKKyAgICAgICAgbV9pc01lbW9yeU1hcHBlZCA9IGZhbHNlOworICAgICAg
ICBtX2Rpc2tJbWFnZUNhY2hlSWQgPSBEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlk
OworICAgIH0KKyNlbmRpZgogICAgIGNsZWFyKCk7CiB9CiAKQEAgLTEyMiw2ICsxNTcsNjYgQEAg
dW5zaWduZWQgU2hhcmVkQnVmZmVyOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplOwog
fQogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCitib29sIFNoYXJlZEJ1ZmZlcjo6aXNB
bGxvd2VkVG9CZU1lbW9yeU1hcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlza0ltYWdl
Q2FjaGVJZCAhPSBEaXNrSW1hZ2VDYWNoZTo6aW52YWxpZERpc2tDYWNoZUlkOworfQorCitTaGFy
ZWRCdWZmZXI6Ok1lbW9yeU1hcHBpbmdTdGF0ZSBTaGFyZWRCdWZmZXI6OmFsbG93VG9CZU1lbW9y
eU1hcHBlZCgpCit7CisgICAgaWYgKGlzTWVtb3J5TWFwcGVkKCkpCisgICAgICAgIHJldHVybiBT
aGFyZWRCdWZmZXI6OlN1Y2Nlc3NBbHJlYWR5TWFwcGVkOworCisgICAgaWYgKGlzQWxsb3dlZFRv
QmVNZW1vcnlNYXBwZWQoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6UHJldmlvdXNs
eVF1ZXVlZEZvck1hcHBpbmc7CisKKyAgICBtX2Rpc2tJbWFnZUNhY2hlSWQgPSBkaXNrSW1hZ2VD
YWNoZSgpLndyaXRlSXRlbSh0aGlzKTsKKyAgICBpZiAobV9kaXNrSW1hZ2VDYWNoZUlkID09IERp
c2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hlSWQpCisgICAgICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OkZhaWx1cmVDYWNoZUZ1bGw7CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpRdWV1
ZWRGb3JNYXBwaW5nOworfQorCit2b2lkIFNoYXJlZEJ1ZmZlcjo6ZmFpbGVkTWVtb3J5TWFwKCkK
K3sKKyAgICBpZiAobV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjaykKKyAgICAgICAgbV9ub3Rp
ZnlNZW1vcnlNYXBwZWRDYWxsYmFjayh0aGlzLCBTaGFyZWRCdWZmZXI6OkZhaWxlZCwgbV9ub3Rp
ZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGEpOworfQorCit2b2lkIFNoYXJlZEJ1ZmZlcjo6bWFy
a0FzTWVtb3J5TWFwcGVkKCkKK3sKKyAgICBBU1NFUlQoIWlzTWVtb3J5TWFwcGVkKCkpOworCisg
ICAgbV9pc01lbW9yeU1hcHBlZCA9IHRydWU7CisgICAgdW5zaWduZWQgc2F2ZWRTaXplID0gc2l6
ZSgpOworICAgIGNsZWFyKCk7CisgICAgbV9zaXplID0gc2F2ZWRTaXplOworCisgICAgaWYgKG1f
bm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2spCisgICAgICAgIG1fbm90aWZ5TWVtb3J5TWFwcGVk
Q2FsbGJhY2sodGhpcywgU2hhcmVkQnVmZmVyOjpTdWNjZWVkZWQsIG1fbm90aWZ5TWVtb3J5TWFw
cGVkQ2FsbGJhY2tEYXRhKTsKK30KKworU2hhcmVkQnVmZmVyOjpNZW1vcnlNYXBwZWROb3RpZnlD
YWxsYmFja0RhdGEgU2hhcmVkQnVmZmVyOjptZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFj
a0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNr
RGF0YTsKK30KKworU2hhcmVkQnVmZmVyOjpNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFjayBTaGFy
ZWRCdWZmZXI6Om1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjazsKK30KKwordm9pZCBTaGFyZWRC
dWZmZXI6OnNldE1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKE1lbW9yeU1hcHBlZE5v
dGlmeUNhbGxiYWNrIGNhbGxiYWNrLCBNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFja0RhdGEgZGF0
YSkKK3sKKyAgICBBU1NFUlQoIW1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2sgfHwgIWNhbGxi
YWNrKTsKKyAgICBBU1NFUlQoIW1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2tEYXRhIHx8ICFk
YXRhKTsKKworICAgIG1fbm90aWZ5TWVtb3J5TWFwcGVkQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAg
ICBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrRGF0YSA9IGRhdGE7Cit9CisjZW5kaWYKKwog
dm9pZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZVB1cmdlYWJsZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
aWYgKG1fcHVyZ2VhYmxlQnVmZmVyKQpAQCAtMTQwLDYgKzIzNSwxMSBAQCB2b2lkIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3QKIAogY29uc3QgY2hhciogU2hhcmVk
QnVmZmVyOjpkYXRhKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKKyAg
ICBpZiAoaXNNZW1vcnlNYXBwZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihkaXNrSW1hZ2VDYWNoZSgpLmRhdGFGb3JJdGVtKG1fZGlza0ltYWdlQ2FjaGVJZCkp
OworI2VuZGlmCisKICAgICBpZiAoaGFzUGxhdGZvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBw
bGF0Zm9ybURhdGEoKTsKIApAQCAtMTY3LDYgKzI2Nyw5IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoU2hhcmVkQnVmZmVyKiBkYXRhKQogdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFtX3B1cmdlYWJs
ZUJ1ZmZlcik7CisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAgQVNTRVJUKCFpc01l
bW9yeU1hcHBlZCgpKTsKKyNlbmRpZgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm47
CiAKQEAgLTI2NSw2ICszNjgsOSBAQCBQYXNzT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpyZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCkKIAogY29uc3QgVmVjdG9yPGNoYXI+JiBT
aGFyZWRCdWZmZXI6OmJ1ZmZlcigpIGNvbnN0CiB7CisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FD
SEUpCisgICAgQVNTRVJUKCFpc01lbW9yeU1hcHBlZCgpKTsKKyNlbmRpZgogICAgIHVuc2lnbmVk
IGJ1ZmZlclNpemUgPSBtX2J1ZmZlci5zaXplKCk7CiAgICAgaWYgKG1fc2l6ZSA+IGJ1ZmZlclNp
emUpIHsKICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fc2l6ZSk7CkBAIC0yOTQsNiArNDAwLDE1
IEBAIHVuc2lnbmVkIFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoY29uc3QgY2hhciomIHNvbWVE
YXRhLCB1bnNpZ25lZCBwb3NpdGlvbikgY29uCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAor
I2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIEFTU0VSVChwb3NpdGlvbiA8IHNpemUo
KSk7CisgICAgaWYgKGlzTWVtb3J5TWFwcGVkKCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogZGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkaXNrSW1hZ2VDYWNoZSgpLmRhdGFGb3JJdGVt
KG1fZGlza0ltYWdlQ2FjaGVJZCkpOworICAgICAgICBzb21lRGF0YSA9IGRhdGEgKyBwb3NpdGlv
bjsKKyAgICAgICAgcmV0dXJuIHNpemUoKSAtIHBvc2l0aW9uOworICAgIH0KKyNlbmRpZgorCiAg
ICAgaWYgKGhhc1BsYXRmb3JtRGF0YSgpIHx8IG1fcHVyZ2VhYmxlQnVmZmVyKSB7CiAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDwgc2l6ZSgpKTsKICAg
ICAgICAgc29tZURhdGEgPSBkYXRhKCkgKyBwb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmgKaW5kZXggNTg0ODVkMWMyY2ViODg4NzdkYjgwZmFiNDY3OWJjY2Q5MWI1
OTczZi4uMDMyNTg2OTgxZGNiNWFlYTM5YTE0ZGQ5YTZiNzhhNDVhZmQ0YzRjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAgLTEzMCw2ICsxMzAsMzAgQEAgcHVibGlj
OgogICAgIC8vICAgICAgfQogICAgIHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBk
YXRhLCB1bnNpZ25lZCBwb3NpdGlvbiA9IDApIGNvbnN0OwogCisjaWYgRU5BQkxFKERJU0tfSU1B
R0VfQ0FDSEUpCisgICAgZW51bSBNZW1vcnlNYXBwaW5nU3RhdGUgeyBRdWV1ZWRGb3JNYXBwaW5n
LCBQcmV2aW91c2x5UXVldWVkRm9yTWFwcGluZywgU3VjY2Vzc0FscmVhZHlNYXBwZWQsIEZhaWx1
cmVDYWNoZUZ1bGwgfTsKKworICAgIC8vIENhbGxpbmcgdGhpcyB3aWxsIGNhdXNlIHRoaXMgYnVm
ZmVyIHRvIGJlIG1lbW9yeSBtYXBwZWQuCisgICAgTWVtb3J5TWFwcGluZ1N0YXRlIGFsbG93VG9C
ZU1lbW9yeU1hcHBlZCgpOworICAgIGJvb2wgaXNBbGxvd2VkVG9CZU1lbW9yeU1hcHBlZCgpIGNv
bnN0OworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWVtb3J5
IG1hcHBpbmcgZmFpbGVkLgorICAgIHZvaWQgZmFpbGVkTWVtb3J5TWFwKCk7CisKKyAgICAvLyBU
aGlzIGlzIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBoYXMgYmVlbiBjb21wbGV0ZWx5IG1l
bW9yeSBtYXBwZWQuCisgICAgdm9pZCBtYXJrQXNNZW1vcnlNYXBwZWQoKTsKKyAgICBib29sIGlz
TWVtb3J5TWFwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc01lbW9yeU1hcHBlZDsgfQorCisgICAg
Ly8gVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIGVpdGhlciB0aGUg
YnVmZmVyIGhhcyBiZWVuIG1lbW9yeSBtYXBwZWQgb3IgZmFpbGVkIHRvIGJlIG1lbW9yeSBtYXBw
ZWQuCisgICAgZW51bSBDb21wbGV0aW9uU3RhdHVzIHsgRmFpbGVkLCBTdWNjZWVkZWQgfTsKKyAg
ICB0eXBlZGVmIHZvaWQqIE1lbW9yeU1hcHBlZE5vdGlmeUNhbGxiYWNrRGF0YTsKKyAgICB0eXBl
ZGVmIHZvaWQgKCpNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFjaykoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+LCBDb21wbGV0aW9uU3RhdHVzLCBNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFja0RhdGEp
OworCisgICAgTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhIG1lbW9yeU1hcHBlZE5vdGlm
aWNhdGlvbkNhbGxiYWNrRGF0YSgpIGNvbnN0OworICAgIE1lbW9yeU1hcHBlZE5vdGlmeUNhbGxi
YWNrIG1lbW9yeU1hcHBlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRNZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjayhNZW1vcnlNYXBwZWROb3RpZnlDYWxs
YmFjaywgTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2tEYXRhKTsKKyNlbmRpZgorCiAgICAgdm9p
ZCBjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25zdDsKIAogICAgIHZvaWQgdHJ5UmVwbGFjZUNv
bnRlbnRzV2l0aFBsYXRmb3JtQnVmZmVyKFNoYXJlZEJ1ZmZlciopOwpAQCAtMTYyLDYgKzE4Niwx
MiBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBtdXRhYmxlIFZlY3RvcjxjaGFyKj4gbV9zZWdtZW50
czsKICNlbmRpZgorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIGJvb2wgbV9pc01l
bW9yeU1hcHBlZDsKKyAgICB1bnNpZ25lZCBtX2Rpc2tJbWFnZUNhY2hlSWQ7IC8vIERpc2tJbWFn
ZUNhY2hlSWQgaXMgdW5zaWduZWQuCisgICAgTWVtb3J5TWFwcGVkTm90aWZ5Q2FsbGJhY2sgbV9u
b3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFjazsKKyAgICBNZW1vcnlNYXBwZWROb3RpZnlDYWxsYmFj
a0RhdGEgbV9ub3RpZnlNZW1vcnlNYXBwZWRDYWxsYmFja0RhdGE7CisjZW5kaWYKICNpZiBVU0Uo
Q0YpCiAgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKENGRGF0YVJlZik7CiAgICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gbV9jZkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFy
ZWRCdWZmZXJDRi5jcHAKaW5kZXggYWZlNWJjMWM1OTQwNDM1NmI2OTZhYTMyZGQxMTVkMDYxOWJm
NDk5MS4uNzk3MTA1NzhlYTMxZWZmZWU4YzMxNmJkOTk4YzkxZmRlNjYyNjZlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcApAQCAtMzAsMTEgKzMw
LDIxIEBACiAKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKIAorI2lmIEVOQUJMRShESVNL
X0lNQUdFX0NBQ0hFKQorI2luY2x1ZGUgIkRpc2tJbWFnZUNhY2hlSU9TLmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFS
ZWYgY2ZEYXRhKQogICAgIDogbV9zaXplKDApCiAgICAgLCBtX2NmRGF0YShjZkRhdGEpCisjaWYg
RU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpCisgICAgLCBtX2lzTWVtb3J5TWFwcGVkKGZhbHNlKQor
ICAgICwgbV9kaXNrSW1hZ2VDYWNoZUlkKERpc2tJbWFnZUNhY2hlOjppbnZhbGlkRGlza0NhY2hl
SWQpCisgICAgLCBtX25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrKG51bGxwdHIpCisgICAgLCBt
X25vdGlmeU1lbW9yeU1hcHBlZENhbGxiYWNrRGF0YShudWxscHRyKQorI2VuZGlmCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDE4OGU3ODc3MDA2MWQ0NDQ3MGYwNTZhNWJjY2ZmNzM5OWY2ODAxNDguLjIwMjA4ZDJlMWVlMzYw
NmMxYjYxYjQ4ZjU4YzZiOGNlZTFmNjVkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY2LDYgKzM2Niw4IEBACiAJCUNEOEJGQ0U4
MTU1MzEyMjQwMDVBRkIyNSAvKiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEJGQ0U2MTU1MzEyMjQwMDVB
RkIyNSAvKiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIuaCAqLzsgfTsKIAkJQ0RBNjJBRTIxMjVG
ODdDMjAwN0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE2MkFFMDEyNUY4N0MyMDA3RkQxMTgg
LyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RBNjJBRTMxMjVGODdDMjAw
N0ZEMTE4IC8qIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBNjJBRTExMjVGODdDMjAwN0ZEMTE4IC8qIFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tICovOyB9OworCQlBNUM1NjZCRDEyN0EzQUU1MDBFOEEz
RkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QzU2NkJCMTI3QTNBRTUwMEU4QTNGRiAvKiBXZWJE
aXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oICovOyB9OworCQlBNUM1NjZCRTEyN0EzQUU1MDBFOEEz
RkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM1NjZCQzEyN0EzQUU1MDBFOEEzRkYgLyogV2Vi
RGlza0ltYWdlQ2FjaGVDbGllbnRJT1MubW0gKi87IH07CiAJCUNFREExMkRCMTUyQ0JFNjgwMEQ5
RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRURBMTJEOTE1MkNCRTY4MDBEOUUwOEQgLyogV2Vi
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tICovOyB9OwogCQlDRURBMTJEQzE1MkNCRTY4MDBEOUUw
OEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRURBMTJEQTE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi87IH07CiAJCUREN0NERUU3MEEyM0JBOUUwMDA2OTkyOCAv
KiBXZWJUeXBlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBERDdDREVFNjBBMjNCQTlFMDAwNjk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5o
ICovOyB9OwpAQCAtNzAzLDYgKzcwNSw4IEBACiAJCUNEOEVBQzcyMTFDQUM5QTMwMDc3NDA3NSAv
KiBJT0tpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29yazsgcGF0
aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291cmNlVHJl
ZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RBNjJBRTAxMjVGODdDMjAwN0ZEMTE4IC8qIFdlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
QTYyQUUxMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUM1NjZCQjEyN0EzQUU1MDBF
OEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTVDNTY2QkMxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFn
ZUNhY2hlQ2xpZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFREExMkQ5MTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGll
bnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBbHRlcm5h
dGl2ZVRleHRDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFREExMkRB
MTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUREN0NERUU2MEEyM0JBOUUwMDA2OTkyOCAvKiBXZWJU
eXBlc0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlR5cGVz
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwMyw2ICs4MDcsNyBA
QAogCQkJCTFDNkNCMDNFMEFBNjM5MUQwMEQyM0JGRCAvKiBNaWdyYXRlSGVhZGVycy5tYWtlICov
LAogCQkJCUY1RjczMkQyMDJGRjRENEYwMUE4MDE4MCAvKiBXZWJLaXQuZXhwICovLAogCQkJCUY1
QzI4MzczMDI4NDY3NkQwMTg2MzVDQSAvKiBXZWJLaXRQcmVmaXguaCAqLywKKwkJCQlGRUQxNDAw
QTBDRUNDRDY4MDBEODk0NjYgLyogaW9zICovLAogCQkJCTY1MDhBNEE3MDk5QjM3NUYwMEJDQkY0
NSAvKiBEZWZhdWx0IERlbGVnYXRlcyAqLywKIAkJCQlGNTdEMTk0QTAzNEU3MzJDMDFBODAxODAg
LyogRE9NICovLAogCQkJCTI1QTgxNzY4MDFCNTQ3NEIwRUNBMTQ5RSAvKiBIaXN0b3J5ICovLApA
QCAtMTI0Nyw2ICsxMjUyLDIzIEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7
CiAJCX07CisJCUZFRDE0MDBBMENFQ0NENjgwMEQ4OTQ2NiAvKiBpb3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTQ0QTExRkJFMEVCQTkzQjIwMDlGNjlF
RCAvKiBXZWJDb3JlU3VwcG9ydCAqLywKKwkJCSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNDRBMTFGQkUwRUJBOTNCMjAwOUY2OUVEIC8qIFdl
YkNvcmVTdXBwb3J0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQlBNUM1NjZCQjEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJ
T1MuaCAqLywKKwkJCQlBNUM1NjZCQzEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2Fj
aGVDbGllbnRJT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IFdlYkNvcmVTdXBwb3J0OworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRjUyQ0E2QkQwMkRGOUQwRjAxODYzNUNB
IC8qIEhUTUwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MTQzMiw2ICsxNDU0LDcgQEAKIAkJCQlCODI5NThEMzEzMjcwN0QwMDAwRDBFNzkgLyogQ29ycmVj
dGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTYwNTE5NDE3NTAyQTVEMDBCQzYyRjUg
LyogSGlzdG9yeVByb3BlcnR5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNjgwODI0
QkYwMTAwOERGMDM4IC8qIEhJVmlld0FkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1QzU2
NkJEMTI3QTNBRTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDcwRjU0OUIxN0YxRTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNjkwODI0QkYwMTAwOERGMDM4IC8qIEhJ
V2ViVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4REVENTAwRUU4OEI4QTAwRjI1MDIyIC8q
IEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLywKQEAgLTE5NjcsNiAr
MTk5MCw3IEBACiAJCQkJMUE0REY1MjMwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDNjhGNjcwMDk1QjVGQzEwMEMyOTg0RSAv
KiBXZWJOb2RlSGlnaGxpZ2h0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU2ODdCREIxMzVCNzkx
QTAwNzRDQkNCIC8qIFdlYk5vZGVIaWdobGlnaHRlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE1
QzU2NkJFMTI3QTNBRTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFDNjhGNjcyMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGln
aGxpZ2h0Vmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMkUyRkU2MTRFNDgxODIwMDdDQ0Ex
OCAvKiBXZWJOb3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUMxMUE2RjE0NzY1
NTJFMDA0OUE0Q0MgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1hZ2VD
YWNoZUNsaWVudElPUy5oIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRGlz
a0ltYWdlQ2FjaGVDbGllbnRJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTM1OTU0OGI5ODMxZDBhYzMxNzZm
MjdiZDhlMGUyY2U2MGM3MjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaApAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9S
TShJT1MpCisKKyNpbXBvcnQgPFdlYkNvcmUvRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaD4KKwor
Y2xhc3MgV2ViRGlza0ltYWdlQ2FjaGVDbGllbnQgRklOQUwgOiBwdWJsaWMgV2ViQ29yZTo6RGlz
a0ltYWdlQ2FjaGVDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkRp
c2tJbWFnZUNhY2hlQ2xpZW50PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2ViRGlz
a0ltYWdlQ2FjaGVDbGllbnQoKSk7IH0KK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRpZENy
ZWF0ZURpc2tJbWFnZUNhY2hlRGlyZWN0b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3Rvcnkp
IE9WRVJSSURFOworfTsKKwordm9pZCBXZWJLaXRJbml0aWFsaXplV2ViRGlza0ltYWdlQ2FjaGUo
KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNWQy
OGU2YjI0MDM4ZjA3ZjRhZDlkZGU5MGVjYWIzODYwNmJlODUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElP
Uy5tbQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYkRpc2tJbWFn
ZUNhY2hlQ2xpZW50SU9TLmgiCisKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExB
VEZPUk0oSU9TKQorCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Rpc2tJbWFnZUNhY2hlSU9TLmg+
CisjaW1wb3J0IDxzeXMvcGFyYW0uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3Zv
aWQgV2ViRGlza0ltYWdlQ2FjaGVDbGllbnQ6OmRpZENyZWF0ZURpc2tJbWFnZUNhY2hlRGlyZWN0
b3J5KGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgLy8gU2V0IHRoZSBOU0Zp
bGVQcm90ZWN0aW9uQ29tcGxldGUgYXR0cmlidXRlIG9uIHRoZSBkaXJlY3Rvcnkgc28gdGhhdCBp
dHMgY29udGVudHMgYXJlIGluYWNjZXNzaWJsZSB3aGVuIHRoZSBkZXZpY2UgaXMgbG9ja2VkLgor
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIE5TU3RyaW5nICpkaXJlY3RvcnlQYXRoID0g
ZGlyZWN0b3J5OworICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IEB7TlNGaWxlUHJvdGVj
dGlvbktleTogTlNGaWxlUHJvdGVjdGlvbkNvbXBsZXRlfTsKKyAgICBpZiAoIVtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gc2V0QXR0cmlidXRlczphdHRyaWJ1dGVzIG9mSXRlbUF0UGF0
aDpkaXJlY3RvcnlQYXRoIGVycm9yOiZlcnJvcl0pCisgICAgICAgIE5TTG9nKEAiRGlza0ltYWdl
Q2FjaGU6IEZhaWxlZCB0byBzZXQgYXR0cmlidXRlcyBvbiBkaXNrIGltYWdlIGNhY2hlIGRpcmVj
dG9yeTogJUAiLCBlcnJvcik7CisKKyAgICBXZWJQcmVmZXJlbmNlcyAqc3RhbmRhcmRQcmVmZXJl
bmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKKyAgICBBU1NFUlQo
IVtbc3RhbmRhcmRQcmVmZXJlbmNlcyBfZGlza0ltYWdlQ2FjaGVTYXZlZENhY2hlRGlyZWN0b3J5
XSBsZW5ndGhdKTsKKyAgICBbc3RhbmRhcmRQcmVmZXJlbmNlcyBfc2V0RGlza0ltYWdlQ2FjaGVT
YXZlZENhY2hlRGlyZWN0b3J5OmRpcmVjdG9yeV07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZU9s
ZERpc2tJbWFnZUNhY2hlRGlyZWN0b3J5KCkKK3sKKyAgICBXZWJQcmVmZXJlbmNlcyAqc3RhbmRh
cmRQcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKKyAg
ICBOU1N0cmluZyAqb2xkRGlyZWN0b3J5ID0gW3N0YW5kYXJkUHJlZmVyZW5jZXMgX2Rpc2tJbWFn
ZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9yeV07CisgICAgW3N0YW5kYXJkUHJlZmVyZW5jZXMgX3Nl
dERpc2tJbWFnZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9yeTpAIiJdOworCisgICAgaWYgKCFbb2xk
RGlyZWN0b3J5IGxlbmd0aF0pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIG9s
ZERpcmVjdG9yeUNTdHJpbmcgPSBbb2xkRGlyZWN0b3J5IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bl07CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihvbGREaXJlY3RvcnlDU3RyaW5n
KSArIDE7IC8vIEZvciBOVUxMIHRlcm1pbmF0b3IuCisgICAgQVNTRVJUKGxlbmd0aCA8IE1BWFBB
VEhMRU4pOworICAgIGlmIChsZW5ndGggPj0gTUFYUEFUSExFTikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhpcyBkZWxldGVzIHdoYXRldmVyIGRpcmVjdG9yeSB3YXMgbmFtZWQgaW4gdGhl
IHVzZXIgZGVmYXVsdHMga2V5LgorICAgIC8vIFRvIGJlIHNhZmUsIHdlIHJlc29sdmUgdGhlIGFi
c29sdXRlIHBhdGgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUKKyAgICAvLyBsYXN0IHBhdGggY29tcG9u
ZW50IHN0YXJ0cyB3aXRoICJEaXNrSW1hZ2VDYWNoZSIuCisKKyAgICAvLyBSZXNvbHZlIHRoZSBv
bGQgZGlyZWN0b3J5IHBhdGggdG8gYW4gYWJzb2x1dGUgcGF0aC4KKyAgICBWZWN0b3I8Y2hhciwg
TUFYUEFUSExFTj4gcGF0aChsZW5ndGgpOworICAgIG1lbWNweShwYXRoLmRhdGEoKSwgb2xkRGly
ZWN0b3J5Q1N0cmluZywgbGVuZ3RoKTsKKyAgICBjaGFyIGFic29sdXRlUGF0aFtNQVhQQVRITEVO
XTsKKyAgICBpZiAoIXJlYWxwYXRoKHBhdGguZGF0YSgpLCBhYnNvbHV0ZVBhdGgpKSB7CisgICAg
ICAgIE5TTG9nKEAiRGlza0ltYWdlQ2FjaGU6IENvdWxkIG5vdCByZXNvbHZlIHRoZSBhYnNvbHV0
ZSBwYXRoIG9mIHRoZSBvbGQgZGlyZWN0b3J5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVmVyaWZ5IHRoZSBsYXN0IHBhdGggY29tcG9uZW50IHN0YXJ0cyB3aXRoICJEaXNr
SW1hZ2VDYWNoZSIuCisgICAgY29uc3Qgc2l6ZV90IGFic29sdXRlTGVuZ3RoID0gc3RybGVuKGFi
c29sdXRlUGF0aCk7CisgICAgTlNTdHJpbmcgKnJlc29sdmVkQWJzb2x1dGVQYXRoID0gW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uOmFic29sdXRlUGF0aCBsZW5ndGg6YWJzb2x1dGVMZW5ndGhdOworICAgIE5TU3RyaW5nICpw
cmVmaXggPSBAIkRpc2tJbWFnZUNhY2hlIjsKKyAgICBpZiAoIVtbcmVzb2x2ZWRBYnNvbHV0ZVBh
dGggbGFzdFBhdGhDb21wb25lbnRdIGhhc1ByZWZpeDpwcmVmaXhdKSB7CisgICAgICAgIE5TTG9n
KEAiRGlza0ltYWdlQ2FjaGU6IFRoZSBvbGQgZGlyZWN0b3J5IGRpZCBub3Qgc3RhcnQgd2l0aCB0
aGUgcHJvcGVyIHByZWZpeC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgIE5T
RXJyb3IgKmVycm9yOworICAgICAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gcmVtb3ZlSXRlbUF0UGF0aDpvbGREaXJlY3RvcnkgZXJyb3I6JmVycm9yXSkKKyAgICAgICAg
ICAgIE5TTG9nKEAiRGlza0ltYWdlQ2FjaGU6IEZhaWxlZCB0byBSZW1vdmUgT2xkIERpcmVjdG9y
eTogJUAiLCBbZXJyb3IgbG9jYWxpemVkRmFpbHVyZVJlYXNvbl0pOworICAgIH0pOworfQorCit2
b2lkIFdlYktpdEluaXRpYWxpemVXZWJEaXNrSW1hZ2VDYWNoZSgpCit7CisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICByZW1vdmVPbGREaXNrSW1hZ2VD
YWNoZURpcmVjdG9yeSgpOworCisgICAgUmVmUHRyPFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50PiBz
aGFyZWRDbGllbnQgPSBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudDo6Y3JlYXRlKCk7CisgICAgZGlz
a0ltYWdlQ2FjaGUoKS5zZXRDbGllbnQoc2hhcmVkQ2xpZW50LnJlbGVhc2UoKSk7Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggNTI2MGU3ZmEwMmM0MDc4MDdkNGRhZGNmMDkzNjdk
MTIxODljZjYwNC4uMGNiZWQwMTIyZjg5NjEyZDdjMDQ2YzdkNzk3MTBmMWZiN2Q5NTg4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBAIC0xMTIsNiArMTEyLDE4IEBACiAjZW5kaWYK
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OnMuc2NyaXB0cy5wdXJnZWRTaXpl
XSwgQCJKYXZhU2NyaXB0IiwKICAgICAgICAgICAgIG5pbF0sCisjaWYgRU5BQkxFKERJU0tfSU1B
R0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKyAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6cy5pbWFnZXMubWFwcGVkU2l6ZV0sIEAiSW1hZ2VzIiwKKyAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoSW50OnMuY3NzU3R5bGVTaGVldHMubWFwcGVkU2l6ZV0gLEAiQ1NTIiwKKyNp
ZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OnMueHNs
U3R5bGVTaGVldHMubWFwcGVkU2l6ZV0sIEAiWFNMIiwKKyNlbHNlCisgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDowXSwgQCJYU0wiLAorI2VuZGlmCisgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpzLnNjcmlwdHMubWFwcGVkU2l6ZV0sIEAiSmF2YVNjcmlwdCIs
CisgICAgICAgICAgICBuaWxdLAorI2VuZGlmIC8vIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAm
JiBQTEFURk9STShJT1MpCiAgICAgICAgIG5pbF07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRGF0YVNvdXJjZS5tbQppbmRleCA4NGZhYTI0MWM5NjQxOGU0OWFkZGQ2ZjNlYzY1
Nzc1MTEzYzkyZTAxLi4zMjliZThkMWE2YzRiOGRiOGI4MGMxYmMzZDg2MTU2NzM3NzEwNmVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCkBAIC05Nyw2ICs5
NywxNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2VQcml2YXRlKiB0b1ByaXZhdGUodm9p
ZCogcHJpdmF0ZUF0dHJpYnV0ZSkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWJEYXRh
U291cmNlUHJpdmF0ZSo+KHByaXZhdGVBdHRyaWJ1dGUpOwogfQogCisjaWYgRU5BQkxFKERJU0tf
SU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKK3N0YXRpYyB2b2lkIEJ1ZmZlck1lbW9yeU1h
cHBlZChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBTaGFyZWRCdWZmZXI6OkNvbXBs
ZXRpb25TdGF0dXMgbWFwU3RhdHVzLCBTaGFyZWRCdWZmZXI6Ok1lbW9yeU1hcHBlZE5vdGlmeUNh
bGxiYWNrRGF0YSBkYXRhKQoreworICAgIE5TT2JqZWN0PFdlYkRhdGFTb3VyY2VQcml2YXRlRGVs
ZWdhdGU+ICpkZWxlZ2F0ZSA9IFsoV2ViRGF0YVNvdXJjZSAqKWRhdGEgZGF0YVNvdXJjZURlbGVn
YXRlXTsKKyAgICBpZiAobWFwU3RhdHVzID09IFNoYXJlZEJ1ZmZlcjo6U3VjY2VlZGVkKQorICAg
ICAgICBbZGVsZWdhdGUgZGF0YVNvdXJjZU1lbW9yeU1hcHBlZF07CisgICAgZWxzZQorICAgICAg
ICBbZGVsZWdhdGUgZGF0YVNvdXJjZU1lbW9yeU1hcEZhaWxlZF07Cit9CisjZW5kaWYKKwogQGlu
dGVyZmFjZSBXZWJEYXRhU291cmNlIChXZWJGaWxlSW50ZXJuYWwpCiBAZW5kCiAKQEAgLTE5Nyw2
ICsyMDgsNDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTXV0YWJs
ZURpY3Rpb25hcnkgKmFsbFR5cGVzLCBDbGFzcyBvYmpDQ2wKICAgICB0b1ByaXZhdGUoX3ByaXZh
dGUpLT5sb2FkZXItPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmxhZyk7CiB9CiAKKyNp
ZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQorLSAodm9pZClfc2V0
QWxsb3dUb0JlTWVtb3J5TWFwcGVkCit7CisgICAgUmVmUHRyPFJlc291cmNlQnVmZmVyPiBtYWlu
UmVzb3VyY2VCdWZmZXIgPSB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPm1haW5SZXNvdXJj
ZURhdGEoKTsKKyAgICBpZiAoIW1haW5SZXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWFpblJlc291cmNlRGF0YSA9IG1haW5SZXNvdXJj
ZUJ1ZmZlci0+c2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKCFtYWluUmVzb3VyY2VEYXRhKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobWFpblJlc291cmNlRGF0YS0+bWVtb3J5TWFwcGVkTm90
aWZpY2F0aW9uQ2FsbGJhY2soKSAhPSBCdWZmZXJNZW1vcnlNYXBwZWQpIHsKKyAgICAgICAgQVNT
RVJUKCFtYWluUmVzb3VyY2VEYXRhLT5tZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjaygp
ICYmICFtYWluUmVzb3VyY2VEYXRhLT5tZW1vcnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFja0Rh
dGEoKSk7CisgICAgICAgIG1haW5SZXNvdXJjZURhdGEtPnNldE1lbW9yeU1hcHBlZE5vdGlmaWNh
dGlvbkNhbGxiYWNrKEJ1ZmZlck1lbW9yeU1hcHBlZCwgc2VsZik7CisgICAgfQorCisgICAgc3dp
dGNoIChtYWluUmVzb3VyY2VEYXRhLT5hbGxvd1RvQmVNZW1vcnlNYXBwZWQoKSkgeworICAgIGNh
c2UgU2hhcmVkQnVmZmVyOjpTdWNjZXNzQWxyZWFkeU1hcHBlZDoKKyAgICAgICAgW1tzZWxmIGRh
dGFTb3VyY2VEZWxlZ2F0ZV0gZGF0YVNvdXJjZU1lbW9yeU1hcHBlZF07CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNoYXJlZEJ1ZmZlcjo6UHJldmlvdXNseVF1ZXVlZEZvck1hcHBpbmc6Cisg
ICAgY2FzZSBTaGFyZWRCdWZmZXI6OlF1ZXVlZEZvck1hcHBpbmc6CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNoYXJlZEJ1ZmZlcjo6RmFpbHVyZUNhY2hlRnVsbDoKKyAgICAgICAgW1tzZWxm
IGRhdGFTb3VyY2VEZWxlZ2F0ZV0gZGF0YVNvdXJjZU1lbW9yeU1hcEZhaWxlZF07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKy0gKHZvaWQp
c2V0RGF0YVNvdXJjZURlbGVnYXRlOihOU09iamVjdDxXZWJEYXRhU291cmNlUHJpdmF0ZURlbGVn
YXRlPiAqKWRlbGVnYXRlCit7CisgICAgQVNTRVJUKCF0b1ByaXZhdGUoX3ByaXZhdGUpLT5fZGF0
YVNvdXJjZURlbGVnYXRlKTsKKyAgICB0b1ByaXZhdGUoX3ByaXZhdGUpLT5fZGF0YVNvdXJjZURl
bGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKE5TT2JqZWN0PFdlYkRhdGFTb3VyY2VQcml2YXRl
RGVsZWdhdGU+ICopZGF0YVNvdXJjZURlbGVnYXRlCit7CisgICAgcmV0dXJuIHRvUHJpdmF0ZShf
cHJpdmF0ZSktPl9kYXRhU291cmNlRGVsZWdhdGU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERJU0tf
SU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V2ViRGF0YVNvdXJjZSAoV2ViSW50ZXJuYWwpCkBAIC0zODMsNiArNDM2LDIwIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU011dGFibGVEaWN0aW9uYXJ5ICphbGxUeXBl
cywgQ2xhc3Mgb2JqQ0NsCiAgICAgaWYgKHRvUHJpdmF0ZShfcHJpdmF0ZSkgJiYgdG9Qcml2YXRl
KF9wcml2YXRlKS0+aW5jbHVkZWRJbldlYktpdFN0YXRpc3RpY3MpCiAgICAgICAgIC0tV2ViRGF0
YVNvdXJjZUNvdW50OwogCisjaWYgRU5BQkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JN
KElPUykKKyAgICBpZiAoX3ByaXZhdGUpIHsKKyAgICAgICAgUmVmUHRyPFJlc291cmNlQnVmZmVy
PiBtYWluUmVzb3VyY2VCdWZmZXIgPSB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPm1haW5S
ZXNvdXJjZURhdGEoKTsKKyAgICAgICAgaWYgKG1haW5SZXNvdXJjZUJ1ZmZlcikgeworICAgICAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWFpblJlc291cmNlRGF0YSA9IG1haW5SZXNvdXJj
ZUJ1ZmZlci0+c2hhcmVkQnVmZmVyKCk7CisgICAgICAgICAgICBpZiAobWFpblJlc291cmNlRGF0
YSAmJiAKKyAgICAgICAgICAgICAgICBtYWluUmVzb3VyY2VEYXRhLT5tZW1vcnlNYXBwZWROb3Rp
ZmljYXRpb25DYWxsYmFja0RhdGEoKSA9PSBzZWxmICYmCisgICAgICAgICAgICAgICAgbWFpblJl
c291cmNlRGF0YS0+bWVtb3J5TWFwcGVkTm90aWZpY2F0aW9uQ2FsbGJhY2soKSA9PSBCdWZmZXJN
ZW1vcnlNYXBwZWQpIHsKKyAgICAgICAgICAgICAgICBtYWluUmVzb3VyY2VEYXRhLT5zZXRNZW1v
cnlNYXBwZWROb3RpZmljYXRpb25DYWxsYmFjayhudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgZGVsZXRlIHRvUHJpdmF0ZShf
cHJpdmF0ZSk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VQcml2YXRlLmgKaW5kZXggZGY5YzYxZWU5YjIwMTJmN2Fh
MDI3NjYzMjZkODQzNGJkNGM4ZjM1NC4uZmYyMGZhZWVmNDVkMDgzNWE2YWU5YzVjNjMyYzRmNzQ2
YTk5ODViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291
cmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJj
ZVByaXZhdGUuaApAQCAtMjgsNiArMjgsMTQgQEAKIAogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFT
b3VyY2UuaD4KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1Mp
CitAcHJvdG9jb2wgV2ViRGF0YVNvdXJjZVByaXZhdGVEZWxlZ2F0ZQorQHJlcXVpcmVkCistICh2
b2lkKWRhdGFTb3VyY2VNZW1vcnlNYXBwZWQ7CistICh2b2lkKWRhdGFTb3VyY2VNZW1vcnlNYXBG
YWlsZWQ7CitAZW5kCisjZW5kaWYKKwogQGludGVyZmFjZSBXZWJEYXRhU291cmNlIChXZWJQcml2
YXRlKQogCiAtIChOU0ZpbGVXcmFwcGVyICopX2ZpbGVXcmFwcGVyRm9yVVJMOihOU1VSTCAqKVVS
TDsKQEAgLTM5LDQgKzQ3LDEwIEBACiAKIC0gKHZvaWQpX3NldERlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQ6KEJPT0wpZmxhZzsKIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFU
Rk9STShJT1MpCistICh2b2lkKV9zZXRBbGxvd1RvQmVNZW1vcnlNYXBwZWQ7CistICh2b2lkKXNl
dERhdGFTb3VyY2VEZWxlZ2F0ZTooTlNPYmplY3Q8V2ViRGF0YVNvdXJjZVByaXZhdGVEZWxlZ2F0
ZT4gKilkYXRhU291cmNlRGVsZWdhdGU7CistIChOU09iamVjdDxXZWJEYXRhU291cmNlUHJpdmF0
ZURlbGVnYXRlPiAqKWRhdGFTb3VyY2VEZWxlZ2F0ZTsKKyNlbmRpZgorCiBAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApp
bmRleCBmZWQ4M2JhOGJmZTFhNzgwMGJlNDU0ZTA2YTI1YjIzZjg1Y2MwMDgyLi44MDAzY2JlODg4
NTA3ZWVhOTg4Njk2YTA3MmVhYTMzMWUzYzM1OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTE2MSwzICsxNjEs
OCBAQAogI2RlZmluZSBXZWJLaXREZWJ1Z0Z1bGxQYWdlWm9vbVByZWZlcmVuY2VLZXkgQCJXZWJL
aXREZWJ1Z0Z1bGxQYWdlWm9vbVByZWZlcmVuY2VLZXkiCiAKICNkZWZpbmUgV2ViS2l0TWluaW11
bVpvb21Gb250U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJLaXRNaW5pbXVtWm9vbUZvbnRTaXplUHJl
ZmVyZW5jZUtleSIKKworI2RlZmluZSBXZWJLaXREaXNrSW1hZ2VDYWNoZUVuYWJsZWRQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0RGlza0ltYWdlQ2FjaGVFbmFibGVkIgorI2RlZmluZSBXZWJLaXREaXNr
SW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGlza0ltYWdl
Q2FjaGVNaW5pbXVtSW1hZ2VTaXplIgorI2RlZmluZSBXZWJLaXREaXNrSW1hZ2VDYWNoZU1heGlt
dW1DYWNoZVNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGlza0ltYWdlQ2FjaGVNYXhpbXVtQ2Fj
aGVTaXplIgorI2RlZmluZSBXZWJLaXREaXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3RvcnlL
ZXkgQCJXZWJLaXREaXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3RvcnkiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCAzMWZiNmVjZWZlYjU1NTYx
MTUwMGMzODRkNjcyYjJmNzE1OTFmMDc5Li4wYzc5YmJlZjVmMGI3OGRlYjM4OTNlZTUyNmZhODli
YmM4YTkyNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMu
bW0KQEAgLTQxNiw2ICs0MTYsMTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OldLR2V0TWluaW11bVpv
b21Gb250U2l6ZSgpXSwgV2ViS2l0TWluaW11bVpvb21Gb250U2l6ZVByZWZlcmVuY2VLZXksCiAj
ZW5kaWYKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQorICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgV2ViS2l0RGlza0ltYWdlQ2FjaGVF
bmFibGVkUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25l
ZEludDooMTAwICogMTAyNCldLCBXZWJLaXREaXNrSW1hZ2VDYWNoZU1pbmltdW1JbWFnZVNpemVQ
cmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Oigx
MDAgKiAxMDI0ICogMTAyNCldLCBXZWJLaXREaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemVQ
cmVmZXJlbmNlS2V5LAorI2VuZGlmCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoTG9uZ0xv
bmc6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKV0sIFdlYktpdEFwcGxpY2F0aW9u
Q2FjaGVUb3RhbFF1b3RhLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aExvbmdMb25nOkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCldLCBXZWJLaXRBcHBsaWNhdGlvbkNhY2hl
RGVmYXVsdE9yaWdpblF1b3RhLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVT
XSwgIFdlYktpdFFUS2l0RW5hYmxlZFByZWZlcmVuY2VLZXksCkBAIC0xNDg3LDYgKzE0OTIsNDgg
QEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogICAgIFtzZWxmIF9z
ZXRCb29sVmFsdWU6ZW5hYmxlZCBmb3JLZXk6V2ViS2l0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAorI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQ
TEFURk9STShJT1MpCistIChCT09MKWRpc2tJbWFnZUNhY2hlRW5hYmxlZAoreworICAgIHJldHVy
biBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlRW5hYmxlZFByZWZl
cmVuY2VLZXldOworfQorCistICh2b2lkKXNldERpc2tJbWFnZUNhY2hlRW5hYmxlZDooQk9PTCll
bmFibGVkCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTplbmFibGVkIGZvcktleTpXZWJLaXRE
aXNrSW1hZ2VDYWNoZUVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodW5zaWduZWQpZGlz
a0ltYWdlQ2FjaGVNaW5pbXVtSW1hZ2VTaXplCit7CisgICAgcmV0dXJuIFtzZWxmIF9pbnRlZ2Vy
VmFsdWVGb3JLZXk6V2ViS2l0RGlza0ltYWdlQ2FjaGVNaW5pbXVtSW1hZ2VTaXplUHJlZmVyZW5j
ZUtleV07Cit9CisKKy0gKHZvaWQpc2V0RGlza0ltYWdlQ2FjaGVNaW5pbXVtSW1hZ2VTaXplOih1
bnNpZ25lZCltaW5pbXVtU2l6ZQoreworICAgIFtzZWxmIF9zZXRJbnRlZ2VyVmFsdWU6bWluaW11
bVNpemUgZm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlTWluaW11bUltYWdlU2l6ZVByZWZlcmVu
Y2VLZXldOworfQorCistICh1bnNpZ25lZClkaXNrSW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemUK
K3sKKyAgICByZXR1cm4gW3NlbGYgX2ludGVnZXJWYWx1ZUZvcktleTpXZWJLaXREaXNrSW1hZ2VD
YWNoZU1heGltdW1DYWNoZVNpemVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXREaXNr
SW1hZ2VDYWNoZU1heGltdW1DYWNoZVNpemU6KHVuc2lnbmVkKW1heGltdW1TaXplCit7CisgICAg
W3NlbGYgX3NldEludGVnZXJWYWx1ZTptYXhpbXVtU2l6ZSBmb3JLZXk6V2ViS2l0RGlza0ltYWdl
Q2FjaGVNYXhpbXVtQ2FjaGVTaXplUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKE5TU3RyaW5nICop
X2Rpc2tJbWFnZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9yeQoreworICAgIHJldHVybiBbW3NlbGYg
X3N0cmluZ1ZhbHVlRm9yS2V5OldlYktpdERpc2tJbWFnZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9y
eUtleV0gc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF07Cit9CisKKy0gKHZvaWQpX3NldERpc2tJ
bWFnZUNhY2hlU2F2ZWRDYWNoZURpcmVjdG9yeTooTlNTdHJpbmcgKilwYXRoCit7CisgICAgW3Nl
bGYgX3NldFN0cmluZ1ZhbHVlOltwYXRoIHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdIGZvcktl
eTpXZWJLaXREaXNrSW1hZ2VDYWNoZVNhdmVkQ2FjaGVEaXJlY3RvcnlLZXldOworfQorI2VuZGlm
IC8vIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9STShJT1MpCisKIC0gKEJPT0wp
aXNGcmFtZUZsYXR0ZW5pbmdFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVG
b3JLZXk6V2ViS2l0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDBlMDYzZjcwYTQzYzMzNGQxNzBkNmM1MGUy
MzIyNzkzOGJkNmNkOGUuLjkzN2MyNTNhNDVjODlhYThhYzI5M2I3MWU5OWU3YTY3MjA3YjJhYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTIwNiw2ICsyMDYsMTEgQEAK
ICNpbXBvcnQgPFdlYktpdC9XZWJEYXNoYm9hcmRSZWdpb24uaD4KICNlbmRpZgogCisjaWYgRU5B
QkxFKERJU0tfSU1BR0VfQ0FDSEUpICYmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldlYkRpc2tJ
bWFnZUNhY2hlQ2xpZW50SU9TLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Rpc2tJbWFnZUNhY2hlSU9T
Lmg+CisjZW5kaWYKKwogI2lmIFVTRShHTElCKQogI2ltcG9ydCA8Z2xpYi5oPgogI2VuZGlmCkBA
IC03MzksNiArNzQ0LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlTGVnYWN5QmFja2dyb3VuZFNp
emVTaG9ydGhhbmRCZWhhdmlvcigpCiAKICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeSgpOwogICAgICAgICBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBh
dGhJZk5lY2Vzc2FyeSgpOworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKSAmJiBQTEFURk9S
TShJT1MpCisgICAgICAgIFdlYktpdEluaXRpYWxpemVXZWJEaXNrSW1hZ2VDYWNoZSgpOworI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBTZXR0aW5nczo6c2V0RGVmYXVsdE1pbkRPTVRpbWVySW50
ZXJ2YWwoMC4wMDQpOwogICAgICAgICAKQEAgLTE2MDQsNiArMTYxMiwxMyBAQCBzdGF0aWMgYm9v
bCBuZWVkc1NlbGZSZXRhaW5XaGlsZUxvYWRpbmdRdWlyaygpCiAgICAgQk9PTCB6b29tc1RleHRP
bmx5ID0gW3ByZWZlcmVuY2VzIHpvb21zVGV4dE9ubHldOwogICAgIGlmIChfcHJpdmF0ZS0+em9v
bXNUZXh0T25seSAhPSB6b29tc1RleHRPbmx5KQogICAgICAgICBbc2VsZiBfc2V0Wm9vbU11bHRp
cGxpZXI6X3ByaXZhdGUtPnpvb21NdWx0aXBsaWVyIGlzVGV4dE9ubHk6em9vbXNUZXh0T25seV07
CisKKyNpZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkgJiYgUExBVEZPUk0oSU9TKQorICAgIERp
c2tJbWFnZUNhY2hlJiBkaXNrSW1hZ2VDYWNoZSA9IFdlYkNvcmU6OmRpc2tJbWFnZUNhY2hlKCk7
CisgICAgZGlza0ltYWdlQ2FjaGUuc2V0RW5hYmxlZChbcHJlZmVyZW5jZXMgZGlza0ltYWdlQ2Fj
aGVFbmFibGVkXSk7CisgICAgZGlza0ltYWdlQ2FjaGUuc2V0TWluaW11bUltYWdlU2l6ZShbcHJl
ZmVyZW5jZXMgZGlza0ltYWdlQ2FjaGVNaW5pbXVtSW1hZ2VTaXplXSk7CisgICAgZGlza0ltYWdl
Q2FjaGUuc2V0TWF4aW11bUNhY2hlU2l6ZShbcHJlZmVyZW5jZXMgZGlza0ltYWdlQ2FjaGVNYXhp
bXVtQ2FjaGVTaXplXSk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBJTVAgZ2V0TWV0aG9k
KGlkIG8sIFNFTCBzKQo=
</data>
<flag name="review"
          id="235106"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>