<?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>145800</bug_id>
          
          <creation_ts>2015-06-09 07:07:15 -0700</creation_ts>
          <short_desc>NetworkCache: Delete old cache versions</short_desc>
          <delta_ts>2015-06-10 06:04:29 -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>Page Loading</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1100646</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-09 07:07:15 -0700</bug_when>
    <thetext>We should wipe out any leftover data when incrementing cache version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100647</commentid>
    <comment_count>1</comment_count>
      <attachid>254567</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-09 07:22:04 -0700</bug_when>
    <thetext>Created attachment 254567
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100648</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-09 07:24:11 -0700</bug_when>
    <thetext>Attachment 254567 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:162:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:26:  #ifndef header guard has wrong style, please use: NetworkCacheFileSystem_h  [build/header_guard] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 10 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>1100650</commentid>
    <comment_count>3</comment_count>
      <attachid>254568</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-09 07:35:01 -0700</bug_when>
    <thetext>Created attachment 254568
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100651</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-09 07:37:24 -0700</bug_when>
    <thetext>Attachment 254568 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:162:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:26:  #ifndef header guard has wrong style, please use: NetworkCacheFileSystem_h  [build/header_guard] [5]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:57:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 11 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>1100675</commentid>
    <comment_count>5</comment_count>
      <attachid>254568</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 09:56:48 -0700</bug_when>
    <thetext>Comment on attachment 254568
patch

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

Looks like this does not build on GTK yet.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:69
&gt; +        function(String(name), directoryEntryType(dp-&gt;d_type));

Doing String(name) here interprets the filename as Latin-1. That’s not right. This needs to be the reverse of WebCore::fileSystemRepresentation. I see some code using String::fromUTF8 for this; openTemporaryFile on the Mac for example. This only works because we are lucky enough to not have any non-ASCII filenames in the directory. Of course, decoding UTF-8 has the inverse problem if there are some file names that we can’t represent as String. I suppose we have to just skip those files. This can’t happen in normal circumstances on OS X, but might happen in other cases on other platforms perhaps.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:57
&gt; +        function(String(name));

Same String(name) issue here.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:123
&gt; +        auto partitionPath = WebCore::pathByAppendingComponent(recordsPath, subdirName);
&gt; +        WebCore::deleteEmptyDirectory(partitionPath);

Not sure the local variable makes this easier to read

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:878
&gt; +            String versionString = subdirName.substring(strlen(versionDirectoryPrefix));
&gt; +            bool success;
&gt; +            unsigned directoryVersion = versionString.toUIntStrict(&amp;success);

Should do this with a StringView. No need to copy out a new string just to convert to integer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100677</commentid>
    <comment_count>6</comment_count>
      <attachid>254568</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-06-09 09:57:17 -0700</bug_when>
    <thetext>Comment on attachment 254568
patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:62
&gt; +    struct dirent* dp;

I think the &quot;struct&quot; is superfluous in C++.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:69
&gt; +        function(String(name), directoryEntryType(dp-&gt;d_type));

Probably not a big deal for what you&apos;re using it for but this likely only works if the name only include latin1 characters. I think String::fromUTF8(name) would be more correct.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:94
&gt; +    struct stat fileInfo;

struct is superfluous I believe.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:121
&gt; +    utimes(WebCore::fileSystemRepresentation(path).data(), 0);

nullptr

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

Not commenting on this file as it seems it is the diff being confused.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:876
&gt; +            String versionString = subdirName.substring(strlen(versionDirectoryPrefix));

We could use sizeof(versionDirectoryPrefix)-1 to resolve this at compile time instead of iterating over the string at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100681</commentid>
    <comment_count>7</comment_count>
      <attachid>254568</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-09 09:59:57 -0700</bug_when>
    <thetext>Comment on attachment 254568
patch

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

Setting review+ again.

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:876
&gt;&gt; +            String versionString = subdirName.substring(strlen(versionDirectoryPrefix));
&gt; 
&gt; We could use sizeof(versionDirectoryPrefix)-1 to resolve this at compile time instead of iterating over the string at runtime.

Modern compilers like clang constant fold calls to strlen, so this is resolved at compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100685</commentid>
    <comment_count>8</comment_count>
      <attachid>254568</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-06-09 10:07:38 -0700</bug_when>
    <thetext>Comment on attachment 254568
patch

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

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:876
&gt;&gt;&gt; +            String versionString = subdirName.substring(strlen(versionDirectoryPrefix));
&gt;&gt; 
&gt;&gt; We could use sizeof(versionDirectoryPrefix)-1 to resolve this at compile time instead of iterating over the string at runtime.
&gt; 
&gt; Modern compilers like clang constant fold calls to strlen, so this is resolved at compile time.

Ah, I did not know that. This is good to know. Please disregard my comment then, strlen() is a lot more readable :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100991</commentid>
    <comment_count>9</comment_count>
      <attachid>254646</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-10 05:24:32 -0700</bug_when>
    <thetext>Created attachment 254646
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100992</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-10 05:31:51 -0700</bug_when>
    <thetext>Attachment 254646 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:162:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystem.cpp:57:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 12 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>1100999</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-10 06:02:30 -0700</bug_when>
    <thetext>https://trac.webkit.org/r185412 

(KaL promised to look into the gtk build issue)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101001</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-06-10 06:04:29 -0700</bug_when>
    <thetext>&gt; Should do this with a StringView. No need to copy out a new string just to
&gt; convert to integer.

Didn&apos;t do this. It looked too ugly for a meaningless performance optimization (or maybe I just don&apos;t know how to use StringView correctly).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254567</attachid>
            <date>2015-06-09 07:22:04 -0700</date>
            <delta_ts>2015-06-09 07:35:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-version-delete-2.patch</filename>
            <type>text/plain</type>
            <size>35411</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTM2MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTA2LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrQ2FjaGU6IERlbGV0
ZSBvbGQgY2FjaGUgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkJsb2JTdG9yYWdlOjpzeW5jaHJvbml6ZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjp0cmF2ZXJzZURpcmVjdG9yeSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VDYWNoZUZpbGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxlVGltZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnVwZGF0ZUZpbGVNb2RpZmlj
YXRpb25UaW1lSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOiBSZW1vdmVkLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3
b3JrQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VCbG9iRGlyZWN0
b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VSZWNvcmRz
RmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlbGV0ZUVtcHR5UmVjb3Jk
c0RpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpT
dG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzeW5jaHJv
bml6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6dHJhdmVyc2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmNsZWFyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpzaHJpbmspOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAg
KiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUtMDYtMDkgIERhdmlk
IEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTg1
MzU3KTogRml4IGJ1aWxkIGZvciBpT1MgOC54CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTg1MzE0KQorKysgU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MSw2ICsxNzEsNyBAQCBzZXQoTmV0d29ya1Byb2Nlc3NfQ09NTU9OX1NPVVJD
RVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCiAgICAgTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCisgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcAkocmV2aXNpb24g
MTg1MzE0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlQmxvYlN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8
ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTU4LDcgKzU5LDkgQEAgdm9pZCBCbG9iU3Rv
cmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgbV9hcHByb3hpbWF0ZVNpemUgPSAwOwogICAgIGF1
dG8gYmxvYkRpcmVjdG9yeSA9IGJsb2JEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdHJhdmVyc2VEaXJl
Y3RvcnkoYmxvYkRpcmVjdG9yeSwgRFRfUkVHLCBbdGhpcywgJmJsb2JEaXJlY3RvcnldKGNvbnN0
IFN0cmluZyYgbmFtZSkgeworICAgIHRyYXZlcnNlRGlyZWN0b3J5KGJsb2JEaXJlY3RvcnksIFt0
aGlzLCAmYmxvYkRpcmVjdG9yeV0oY29uc3QgU3RyaW5nJiBuYW1lLCBEaXJlY3RvcnlFbnRyeVR5
cGUgdHlwZSkgeworICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGUp
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8gcGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChibG9iRGlyZWN0b3J5LCBuYW1lKTsKICAgICAgICAgYXV0byBm
aWxlUGF0aCA9IFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKICAgICAg
ICAgc3RydWN0IHN0YXQgc3RhdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgJKHJldmlz
aW9uIDE4NTMxNCkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmg6MTg1MzE0KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtUG9zaXhfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgVVNFKFNP
VVApCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KK3N0YXRpYyB2b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgRElS
KiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5k
YXRhKCkpOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm47CisgICAgc3RydWN0IGRpcmVu
dCogZHA7CisgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkpIHsKKyAgICAgICAgaWYgKGRw
LT5kX3R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCBj
aGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIi4iKSB8
fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZ1
bmN0aW9uKFN0cmluZyhuYW1lKSk7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcik7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIHRyYXZlcnNlQ2FjaGVGaWxl
cyhjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQorewor
ICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aCwgJmZ1
bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKKyAgICAgICAgU3RyaW5nIHBhcnRp
dGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBz
dWJkaXJOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgRFRf
UkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkg
eworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKworc3RydWN0IEZpbGVUaW1lcyB7CisgICAgc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBjcmVhdGlvbjsKKyAgICBzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWNhdGlvbjsKK307CisKK2lubGluZSBGaWxlVGlt
ZXMgZmlsZVRpbWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyNpZiBIQVZFKFNUQVRfQklSVEhU
SU1FKQorICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChzdGF0KFdlYkNvcmU6OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZmaWxlSW5mbykpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJv
bV90aW1lX3QoZmlsZUluZm8uc3RfYmlydGh0aW1lKSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6ZnJvbV90aW1lX3QoZmlsZUluZm8uc3RfbXRpbWUpIH07CisjZWxpZiBVU0UoU09VUCkKKyAg
ICAvLyBUaGVyZSdzIG5vIHN0X2JpcnRodGltZSBpbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGxp
a2UgTGludXgsIHNvIHdlIHVzZSB4YXR0cnMgdG8gc2V0L2dldCB0aGUgY3JlYXRpb24gdGltZS4K
KyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
V2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIEdS
ZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhm
aWxlLmdldCgpLCAieGF0dHI6OmJpcnRodGltZSx0aW1lOjptb2RpZmllZCIsIEdfRklMRV9RVUVS
WV9JTkZPX05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBpZiAoIWZpbGVJbmZvKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIGNvbnN0IGNoYXIqIGJpcnRodGltZVN0cmluZyA9IGdfZmls
ZV9pbmZvX2dldF9hdHRyaWJ1dGVfc3RyaW5nKGZpbGVJbmZvLmdldCgpLCAieGF0dHI6OmJpcnRo
dGltZSIpOworICAgIGlmICghYmlydGh0aW1lU3RyaW5nKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGdfYXNj
aWlfc3RydG91bGwoYmlydGh0aW1lU3RyaW5nLCBudWxscHRyLCAxMCkpLAorICAgICAgICBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChnX2ZpbGVfaW5mb19nZXRfYXR0cmli
dXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgInRpbWU6Om1vZGlmaWVkIikpIH07CisjZW5kaWYK
K30KKworaW5saW5lIHZvaWQgdXBkYXRlRmlsZU1vZGlmaWNhdGlvblRpbWVJZk5lZWRlZChjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byB0aW1lcyA9IGZpbGVUaW1lcyhwYXRoKTsKKyAg
ICBpZiAodGltZXMuY3JlYXRpb24gIT0gdGltZXMubW9kaWZpY2F0aW9uKSB7CisgICAgICAgIC8v
IERvbid0IHVwZGF0ZSBtb3JlIHRoYW4gb25jZSBwZXIgaG91ci4KKyAgICAgICAgaWYgKHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gdGltZXMubW9kaWZpY2F0aW9uIDwgc3RkOjpj
aHJvbm86OmhvdXJzKDEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUaGlz
IHJlYWxseSB1cGRhdGVzIGJvdGggdGhlIGFjY2VzcyB0aW1lIGFuZCB0aGUgbW9kaWZpY2F0aW9u
IHRpbWUuCisgICAgdXRpbWVzKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCksIDApOworfQorCit9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNI
RSkKKworI2VuZGlmIC8vIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMjksODQgKzI5LDIzIEBACiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKICNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRl
IDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgVVNFKFNPVVApCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgotI2VuZGlmCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGljIHZvaWQgdHJhdmVyc2VE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9u
JiBmdW5jdGlvbikKLXsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihk
aXIpKSkgewotICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBp
ZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0gICAg
Y2xvc2VkaXIoZGlyKTsKLX0KK2VudW0gY2xhc3MgRGlyZWN0b3J5RW50cnlUeXBlIHsgRGlyZWN0
b3J5LCBGaWxlIH07Cit2b2lkIHRyYXZlcnNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBEaXJlY3Rv
cnlFbnRyeVR5cGUpPiYpOwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUg
dm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGNvbnN0IEZ1
bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERU
X0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7
Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgIHRyYXZlcnNlRGlyZWN0
b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBw
YXJ0aXRpb25QYXRoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Cit2b2lkIGRlbGV0ZURpcmVj
dG9yeVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIHN0cnVjdCBGaWxlVGltZXMg
ewogICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgY3JlYXRpb247CiAg
ICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmljYXRpb247CiB9
OwotCi1pbmxpbmUgRmlsZVRpbWVzIGZpbGVUaW1lcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0j
aWYgSEFWRShTVEFUX0JJUlRIVElNRSkKLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKLSAgICBp
ZiAoc3RhdChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAm
ZmlsZUluZm8pKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiB7IHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGZpbGVJbmZvLnN0X2JpcnRodGltZSksIHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGZpbGVJbmZvLnN0X210aW1lKSB9Owot
I2VsaWYgVVNFKFNPVVApCi0gICAgLy8gVGhlcmUncyBubyBzdF9iaXJ0aHRpbWUgaW4gc29tZSBv
cGVyYXRpbmcgc3lzdGVtcyBsaWtlIExpbnV4LCBzbyB3ZSB1c2UgeGF0dHJzIHRvIHNldC9nZXQg
dGhlIGNyZWF0aW9uIHRpbWUuCi0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYo
Z19maWxlX3F1ZXJ5X2luZm8oZmlsZS5nZXQoKSwgInhhdHRyOjpiaXJ0aHRpbWUsdGltZTo6bW9k
aWZpZWQiLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAg
aWYgKCFmaWxlSW5mbykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBjb25zdCBjaGFyKiBiaXJ0
aHRpbWVTdHJpbmcgPSBnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3N0cmluZyhmaWxlSW5mby5n
ZXQoKSwgInhhdHRyOjpiaXJ0aHRpbWUiKTsKLSAgICBpZiAoIWJpcnRodGltZVN0cmluZykKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4geyBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojpmcm9tX3RpbWVfdChnX2FzY2lpX3N0cnRvdWxsKGJpcnRodGltZVN0cmluZywgbnVsbHB0ciwg
MTApKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZ19m
aWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksICJ0aW1lOjptb2Rp
ZmllZCIpKSB9OwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHVwZGF0ZUZpbGVNb2RpZmljYXRp
b25UaW1lSWZOZWVkZWQoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gdGltZXMgPSBm
aWxlVGltZXMocGF0aCk7Ci0gICAgaWYgKHRpbWVzLmNyZWF0aW9uICE9IHRpbWVzLm1vZGlmaWNh
dGlvbikgewotICAgICAgICAvLyBEb24ndCB1cGRhdGUgbW9yZSB0aGFuIG9uY2UgcGVyIGhvdXIu
Ci0gICAgICAgIGlmIChzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHRpbWVzLm1v
ZGlmaWNhdGlvbiA8IHN0ZDo6Y2hyb25vOjpob3VycygxKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gVGhpcyByZWFsbHkgdXBkYXRlcyBib3RoIHRoZSBhY2Nlc3MgdGltZSBh
bmQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lLgotICAgIHV0aW1lcyhXZWJDb3JlOjpmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAwKTsKLX0KK0ZpbGVUaW1lcyBmaWxlVGltZXMo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKK3ZvaWQgdXBkYXRlRmlsZU1vZGlmaWNhdGlvblRpbWVJZk5l
ZWRlZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtUG9zaXguaAkocmV2aXNpb24gMTg1MzE0KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeF9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9o
Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5
c3RlbS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j
bHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBV
U0UoU09VUCkKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0aW9uPgotc3RhdGljIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAg
ICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSk7Ci0gICAgaWYgKCFkaXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzdHJ1Y3Qg
ZGlyZW50KiBkcDsKLSAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICBp
ZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNv
bnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAi
LiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZGlyKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQgdHJhdmVyc2VDYWNo
ZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24p
Ci17Ci0gICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRo
LCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewotICAgICAgICBTdHJpbmcg
cGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBh
dGgsIHN1YmRpck5hbWUpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRo
LCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi1zdHJ1Y3QgRmlsZVRpbWVzIHsKLSAgICBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IGNyZWF0aW9uOwotICAgIHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpY2F0aW9uOwotfTsKLQotaW5saW5lIEZp
bGVUaW1lcyBmaWxlVGltZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotI2lmIEhBVkUoU1RBVF9C
SVJUSFRJTUUpCi0gICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0gICAgaWYgKHN0YXQoV2ViQ29y
ZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgJmZpbGVJbmZvKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4geyBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9iaXJ0aHRpbWUpLCBzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9tdGltZSkgfTsKLSNlbGlmIFVTRShTT1VQ
KQotICAgIC8vIFRoZXJlJ3Mgbm8gc3RfYmlydGh0aW1lIGluIHNvbWUgb3BlcmF0aW5nIHN5c3Rl
bXMgbGlrZSBMaW51eCwgc28gd2UgdXNlIHhhdHRycyB0byBzZXQvZ2V0IHRoZSBjcmVhdGlvbiB0
aW1lLgotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKSk7Ci0g
ICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9p
bmZvKGZpbGUuZ2V0KCksICJ4YXR0cjo6YmlydGh0aW1lLHRpbWU6Om1vZGlmaWVkIiwgR19GSUxF
X1FVRVJZX0lORk9fTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIGlmICghZmlsZUluZm8p
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgY29uc3QgY2hhciogYmlydGh0aW1lU3RyaW5nID0g
Z19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV9zdHJpbmcoZmlsZUluZm8uZ2V0KCksICJ4YXR0cjo6
YmlydGh0aW1lIik7Ci0gICAgaWYgKCFiaXJ0aHRpbWVTdHJpbmcpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3Qo
Z19hc2NpaV9zdHJ0b3VsbChiaXJ0aHRpbWVTdHJpbmcsIG51bGxwdHIsIDEwKSksCi0gICAgICAg
IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGdfZmlsZV9pbmZvX2dldF9h
dHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCAidGltZTo6bW9kaWZpZWQiKSkgfTsKLSNl
bmRpZgotfQotCi1pbmxpbmUgdm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVk
KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBhdXRvIHRpbWVzID0gZmlsZVRpbWVzKHBhdGgp
OwotICAgIGlmICh0aW1lcy5jcmVhdGlvbiAhPSB0aW1lcy5tb2RpZmljYXRpb24pIHsKLSAgICAg
ICAgLy8gRG9uJ3QgdXBkYXRlIG1vcmUgdGhhbiBvbmNlIHBlciBob3VyLgotICAgICAgICBpZiAo
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSB0aW1lcy5tb2RpZmljYXRpb24gPCBz
dGQ6OmNocm9ubzo6aG91cnMoMSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8v
IFRoaXMgcmVhbGx5IHVwZGF0ZXMgYm90aCB0aGUgYWNjZXNzIHRpbWUgYW5kIHRoZSBtb2RpZmlj
YXRpb24gdGltZS4KLSAgICB1dGltZXMoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSwgMCk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotCi0jZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKLQpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFu
bmVsQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0JKHJldmlzaW9uIDE4NTMxNCkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlIDxkaXNwYXRj
aC9kaXNwYXRjaC5oPgogI2luY2x1ZGUgPG1hY2gvdm1fcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMv
bW1hbi5oPgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE4NTMx
NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCi0jaW5jbHVkZSAiTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFn
bm9zdGljTG9nZ2luZ0tleXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5n
UmVzdWx0VHlwZS5oPgpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgU3RhdGlzdGljczo6Ym9vdHN0
cmFwRnJvbU5ldHdvcmtDYWMKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNz
KSBCb290c3RyYXBwaW5nIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgZnJv
bSB0aGUgbmV0d29yayBjYWNoZS4uLiIpOwogCiAgICAgVmVjdG9yPFN0cmluZ0NhcHR1cmU+IGhh
c2hlczsKLSAgICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNd
KGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJikgeworICAgIHRyYXZlcnNl
UmVjb3Jkc0ZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIFsmaGFzaGVzXShjb25zdCBTdHJpbmcmIGhh
c2hTdHJpbmcsIGNvbnN0IFN0cmluZyYpIHsKICAgICAgICAgS2V5OjpIYXNoVHlwZSBoYXNoOwog
ICAgICAgICBpZiAoIUtleTo6c3RyaW5nVG9IYXNoKGhhc2hTdHJpbmcsIGhhc2gpKQogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE4NTMx
NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCi0jaW5jbHVkZSAiTmV0
d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0
Zi9QYWdlQmxvY2suaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CkBAIC05OSw2ICs5
OSwzMSBAQCBzdGF0aWMgU3RyaW5nIG1ha2VCbG9iRGlyZWN0b3J5UGF0aChjb25zCiAgICAgcmV0
dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtYWtlVmVyc2lvbmVkRGlyZWN0
b3J5UGF0aChiYXNlRGlyZWN0b3J5UGF0aCksIGJsb2JzRGlyZWN0b3J5TmFtZSk7CiB9CiAKK3Zv
aWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKT4mIGZ1bmN0
aW9uKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBbJnJlY29yZHNQYXRo
LCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBl
IHR5cGUpIHsKKyAgICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rv
cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0g
V2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoLCBzdWJkaXJOYW1l
KTsKKyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgWyZmdW5jdGlvbiwg
JnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIERpcmVjdG9yeUVudHJ5VHlw
ZSB0eXBlKSB7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZp
bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5h
bWUsIHBhcnRpdGlvblBhdGgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworc3RhdGljIHZv
aWQgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0
aCkKK3sKKyAgICAvLyBMZXQgc3lzdGVtIGZpZ3VyZSBvdXQgaWYgdGhleSBhcmUgcmVhbGx5IGVt
cHR5LgorICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBbJnJlY29yZHNQYXRoXShj
b25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7CisgICAg
ICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICBXZWJD
b3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXJ0aXRpb25QYXRoKTsKKyAgICB9KTsKK30KKwog
U3RvcmFnZTo6U3RvcmFnZShjb25zdCBTdHJpbmcmIGJhc2VEaXJlY3RvcnlQYXRoKQogICAgIDog
bV9iYXNlUGF0aChiYXNlRGlyZWN0b3J5UGF0aCkKICAgICAsIG1fcmVjb3Jkc1BhdGgobWFrZVJl
Y29yZHNEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSkKQEAgLTE1MCw3ICsxNzUsNyBA
QCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKICAgICAgICAgYXV0byBib2R5RmlsdGVyID0g
c3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsKICAgICAgICAgc2l6ZV90IHJlY29y
ZHNTaXplID0gMDsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgICAgICB0cmF2ZXJz
ZUNhY2hlRmlsZXMocmVjb3Jkc1BhdGgoKSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5RmlsdGVyLCAm
cmVjb3Jkc1NpemUsICZjb3VudF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQ
YXRoKCksIFsmcmVjb3JkRmlsdGVyLCAmYm9keUZpbHRlciwgJnJlY29yZHNTaXplLCAmY291bnRd
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewog
ICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CiAKICAgICAgICAgICAgIGJvb2wgaXNCb2R5
ID0gZmlsZU5hbWUuZW5kc1dpdGgoYm9keVBvc3RmaXgpOwpAQCAtNjY0LDcgKzY4OSw3IEBAIHZv
aWQgU3RvcmFnZTo6dHJhdmVyc2UoVHJhdmVyc2VGbGFncyBmbGEKICAgICAKICAgICBpb1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIGZsYWdzLCB0cmF2ZXJzZUhhbmRsZXJQdHJdIHsKICAgICAgICAg
YXV0byYgdHJhdmVyc2VIYW5kbGVyID0gKnRyYXZlcnNlSGFuZGxlclB0cjsKLSAgICAgICAgdHJh
dmVyc2VDYWNoZUZpbGVzKHJlY29yZHNQYXRoKCksIFt0aGlzLCBmbGFncywgJnRyYXZlcnNlSGFu
ZGxlcl0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRo
KSB7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFt0aGlzLCBm
bGFncywgJnRyYXZlcnNlSGFuZGxlcl0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAgICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkg
IT0gS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKQEAgLTcyOSwyMCArNzU0LDE4IEBAIHZvaWQg
U3RvcmFnZTo6Y2xlYXIoc3RkOjpjaHJvbm86OnN5c3RlbV8KIAogICAgIGlvUXVldWUoKS5kaXNw
YXRjaChbdGhpcywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyUHRyXSB7CiAg
ICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRzUGF0aCgpOwotICAgICAgICB0
cmF2ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0aCwgRFRfRElSLCBbJnJlY29yZHNQYXRoLCBtb2Rp
ZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNv
cmRzUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShzdWJk
aXJQYXRoLCBEVF9SRUcsIFsmc3ViZGlyUGF0aCwgbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29y
ZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN1YmRpclBhdGgsIGZpbGVOYW1lKTsKLSAgICAg
ICAgICAgICAgICBpZiAobW9kaWZpZWRTaW5jZVRpbWUgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjp0aW1lX3BvaW50OjptaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHRpbWVz
ID0gZmlsZVRpbWVzKGZpbGVQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzLm1v
ZGlmaWNhdGlvbiA8IG1vZGlmaWVkU2luY2VUaW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxl
dGVGaWxlKGZpbGVQYXRoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlRW1wdHlEaXJlY3Rvcnkoc3ViZGlyUGF0aCk7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jk
c0ZpbGVzKHJlY29yZHNQYXRoLCBbbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICAgICAgYXV0byBm
aWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRo
LCBmaWxlTmFtZSk7CisgICAgICAgICAgICBpZiAobW9kaWZpZWRTaW5jZVRpbWUgPiBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gdGltZXMgPSBmaWxlVGltZXMoZmlsZVBhdGgpOworICAgICAgICAgICAgICAgIGlmICh0
aW1lcy5tb2RpZmljYXRpb24gPCBtb2RpZmllZFNpbmNlVGltZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmls
ZShmaWxlUGF0aCk7CiAgICAgICAgIH0pOwogCisgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0Rp
cmVjdG9yaWVzKHJlY29yZHNQYXRoKTsKKwogICAgICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVy
ZW5jZXMgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0b3JhZ2Uuc3luY2hyb25pemUoKTsKIApAQCAt
ODA5LDcgKzgzMiw3IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogICAgIGJhY2tncm91bmRJ
T1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRo
aXMtPnJlY29yZHNQYXRoKCk7Ci0gICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhyZWNvcmRzUGF0
aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9u
UGF0aCkgeworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCwgW3RoaXNd
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewog
ICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IEtleTo6aGFzaFN0cmluZ0xlbmd0
aCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0
aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxl
TmFtZSk7CkBAIC04MjksMTEgKzg1Miw3IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAgICAgLy8gTGV0IHN5c3RlbSBmaWd1cmUgb3V0
IGlmIHRoZXkgYXJlIHJlYWxseSBlbXB0eS4KLSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVj
b3Jkc1BhdGgsIERUX0RJUiwgWyZyZWNvcmRzUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1l
KSB7Ci0gICAgICAgICAgICBhdXRvIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUpOwotICAgICAgICAgICAgV2Vi
Q29yZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOwor
ICAgICAgICBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3RvcmllcyhyZWNvcmRzUGF0aCk7CiAKICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSB7CiAgICAgICAgICAgICBtX3No
cmlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKQEAgLTg0NywyMCArODY2LDI2IEBAIHZvaWQgU3RvcmFn
ZTo6c2hyaW5rKCkKIAogdm9pZCBTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9ucygpCiB7Ci0gICAg
Ly8gRGVsZXRlIFYxIGNhY2hlLgogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3Ro
aXNdIHsKICAgICAgICAgYXV0byBjYWNoZVBhdGggPSBiYXNlUGF0aCgpOwotICAgICAgICB0cmF2
ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGhdKGNvbnN0IFN0cmlu
ZyYgc3ViZGlyTmFtZSkgewotICAgICAgICAgICAgaWYgKHN1YmRpck5hbWUuc3RhcnRzV2l0aCh2
ZXJzaW9uRGlyZWN0b3J5UHJlZml4KSkKKyAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQ
YXRoLCBbJmNhY2hlUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRy
eVR5cGUgdHlwZSkgeworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBl
OjpEaXJlY3RvcnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgU3RyaW5n
IHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQ
YXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlv
blBhdGgsIERUX1JFRywgWyZwYXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7
Ci0gICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGFydGl0aW9uUGF0
aCk7CisgICAgICAgICAgICBpZiAoIXN1YmRpck5hbWUuc3RhcnRzV2l0aCh2ZXJzaW9uRGlyZWN0
b3J5UHJlZml4KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBTdHJpbmcg
dmVyc2lvblN0cmluZyA9IHN1YmRpck5hbWUuc3Vic3RyaW5nKHN0cmxlbih2ZXJzaW9uRGlyZWN0
b3J5UHJlZml4KSk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3M7CisgICAgICAgICAgICB1bnNp
Z25lZCBkaXJlY3RvcnlWZXJzaW9uID0gdmVyc2lvblN0cmluZy50b1VJbnRTdHJpY3QoJnN1Y2Nl
c3MpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGlmIChkaXJlY3RvcnlWZXJzaW9uID49IHZlcnNpb24pCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBTdHJpbmcgb2xkVmVyc2lvblBhdGggPSBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKKyAg
ICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBkZWxl
dGluZyBvbGQgY2FjaGUgdmVyc2lvbiwgcGF0aCAlcyIsIG9sZFZlcnNpb25QYXRoLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkob2xkVmVyc2lv
blBhdGgpOwogICAgICAgICB9KTsKICAgICB9KTsKLSAgICAvLyBGSVhNRTogRGVsZXRlIFYyIGNh
Y2hlLgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAxODUzMTQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsOSBAQCBwcml2YXRlOgogICAgIEJsb2JT
dG9yYWdlIG1fYmxvYlN0b3JhZ2U7CiB9OwogCisvLyBGSVhNRTogUmVtb3ZlLCB1c2VkIGJ5IE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3Mgb25seS4KK3ZvaWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMoY29u
c3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKT4mKTsKKwogfQogfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDE4NTMxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29k
ZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAj
aW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTMxNCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAkJN0NGNDdGRkYxNzI3NkFFMzAwOEFDQjkx
IC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFn
ZUJhbm5lck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdFQzRGMEZCMThFNEFDQkIwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VDNEYwRjkx
OEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi87IH07CiAJCTgzMDQ4
QUU2MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzA0OEFFNTFBQ0E0NURDMDA4
MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oICovOyB9OwotCQk4MzRCMjUwRjFBODMx
QThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIx
NTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi87IH07CisJCTgzNEIyNTBGMUE4
MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAg
LyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oICovOyB9OwogCQk4MzRCMjUxMjFBODQyQzg3MDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MTAxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuaCAqLzsgfTsKIAkJODM2MDM0OUYxQUNCMzRENjAwNjI2NTQ5IC8q
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcCAqLzsgfTsKIAkJODM2MDM0QTAxQUNCMzRENjAwNjI2NTQ5IC8q
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURh
dGFiYXNlVHJhY2tlci5oICovOyB9OwpAQCAtMTgwNiw2ICsxODA2LDcgQEAKIAkJRTQ0MzZFQ0Ux
QTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5l
dHdvcmtDYWNoZUtleS5oICovOyB9OwogCQlFNDQzNkVDRjFBMEQwNDBCMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2Uu
aCAqLzsgfTsKIAkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3Jh
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0
MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9Owor
CQlFNDY5N0NDRDFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDY5N0NDQzFC
MjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi87IH07CiAJCUU0
N0QxRTk4MUIwNjQ5RkIwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0QxRTk2MUIwNjJCNjYwMDI2
NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLzsgfTsKIAkJRTQ4OUQyOEExQTBBMkRCODAw
NzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlQ29kZXIuaCAqLzsgfTsKIAkJRTQ4OUQyOEIxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtD
YWNoZUNvZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCAq
LzsgfTsKQEAgLTM0MzYsNyArMzQzNyw3IEBACiAJCTdDRjQ3RkZEMTcyNzZBRTMwMDhBQ0I5MSAv
KiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tCdW5kbGVQYWdlQmFubmVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAvKiBQ
cm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
ODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
UG9zaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM0QjI1MEUxQTgzMUE4RDAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNjAzNDlEMUFDQjM0RDYw
MDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNR
TGl0ZURhdGFiYXNlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQwODYsNiArNDA4Nyw3IEBACiAJCUU0NDM2RUMxMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3Jr
Q2FjaGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hl
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDM2RUMyMUEwQ0ZEQjIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5ldHdvcmtDYWNoZVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3RvcmFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0Njk3Q0NDMUIyNUVCOEYwMDFCMEE2
QyAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDdEMUU5NjFCMDYyQjY2MDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OUQyODMxQTBBMkRCODAw
NzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1NzIsNyArNzU3NCw4IEBACiAJCQkJRTQ4
OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLywKIAkJCQlF
NDEzRjU5RTFBQzFBRjlEMDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuY3BwICovLAogCQkJ
CUU0MTNGNTlCMUFDMUFEQjYwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5oICovLAotCQkJ
CTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aCAqLywKKwkJCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5oICovLAorCQkJCUU0Njk3Q0NDMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcCAqLywKIAkJCQlFNDJFMDYwQjFBQTc0NDBEMDBCMTE2OTkgLyogTmV0d29y
a0NhY2hlSU9DaGFubmVsLmggKi8sCiAJCQkJRTQyRTA2MEQxQUE3NTBFNTAwQjExNjk5IC8qIE5l
dHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tICovLAogCQkJCUU0NDM2RUMwMUEwQ0ZEQjIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuY3BwICovLApAQCAtNzg2Nyw3ICs3ODcwLDcgQEAKIAkJ
CQlFNDg5RDI4RTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ4OUQyOTAxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVu
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MTNGNTlEMUFDMUFEQzQwMDM0NTM2MCAvKiBO
ZXR3b3JrQ2FjaGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODM0QjI1MEYxQTgzMUE4RDAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCBp
biBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEwMUFBNzUyM0IwMEIxMTY5OSAvKiBOZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDM2RUNFMUEwRDA0MEIwMEVBRDIw
NCAvKiBOZXR3b3JrQ2FjaGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNEIyNTEyMUE4NDJD
ODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKQEAg
LTk2ODAsNiArOTY4Myw3IEBACiAJCQkJRTQyRTA2MTQxQUE3NUI3MDAwQjExNjk5IC8qIE5ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0ODlEMjhEMUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
ODlEMjhGMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUU0Njk3Q0NEMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MTNGNTlGMUFDMUFGOUQwMDM0NTM2MCAv
KiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDJFMDYwRjFBQTc1
MjM0MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0gaW4gU291cmNlcyAq
LywKIAkJCQlFNDQzNkVDRDFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCBp
biBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254568</attachid>
            <date>2015-06-09 07:35:01 -0700</date>
            <delta_ts>2015-06-10 05:24:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-version-delete-3.patch</filename>
            <type>text/plain</type>
            <size>41452</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTM2MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE1LTA2LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrQ2FjaGU6IERlbGV0
ZSBvbGQgY2FjaGUgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkJsb2JTdG9yYWdlOjpzeW5jaHJvbml6ZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRpcmVjdG9yeUVudHJ5VHlwZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VEaXJlY3RvcnkpOgorCisgICAgICAgICAgICBQYXNz
IGVudHJ5IHR5cGUgYXMgY2FsbGJhY2sgYXJndW1lbnQuCisKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseSk6CisKKyAgICAgICAgICAgIEFk
ZCBoZWxwZXIuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxlVGltZXMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1l
SWZOZWVkZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmguCisKKyAgICAgICAgICAgIE1vdmUgY29k
ZSB0byBjcHAuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjp0cmF2ZXJzZURpcmVj
dG9yeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VD
YWNoZUZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxl
VGltZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnVwZGF0ZUZp
bGVNb2RpZmljYXRpb25UaW1lSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1t
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmJvb3RzdHJh
cEZyb21OZXR3b3JrQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VC
bG9iRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVy
c2VSZWNvcmRzRmlsZXMpOgorCisgICAgICAgICAgICBNb3ZlIGNhY2hlIGhpZXJhcmNoeSBhd2Fy
ZSB0cmF2ZXJzYWwgY29kZSBoZXJlIGZyb20gTmV0d29ya0NhY2hlRmlsZVN5c3RlbSAoZm9yIGJl
dHRlciBsYXllcmluZykuCisgICAgICAgICAgICBSZW5hbWUgZm9yIGNsYXJpdHkuCisKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rvcmllcyk6
CisKKyAgICAgICAgICAgIEZhY3RvciB0byBhIGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6U3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RvcmFnZTo6c3luY2hyb25pemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlN0b3JhZ2U6OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpjbGVhcik6CisKKyAgICAgICAgICAgIFVzZSB0cmF2ZXJzZVJlY29yZHNGaWxl
cyBmb3IgdHJhdmVyc2FsLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6c2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkZWxl
dGVPbGRWZXJzaW9ucyk6CisKKyAgICAgICAgICAgIERlbGV0ZSB2ZXJzaW9uIHN1YmRpcmVjdG9y
aWVzIHdpdGggdmVyc2lvbiBudW1iZXIgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHZlcnNpb24uCisg
ICAgICAgICAgICBSZW1vdmUgY29kZSBmb3IgY2xlYXJpbmcgdW52ZXJzaW9uZWQgVjEgY2FjaGVz
LiBObyBvbmUgc2hvdWxkIGhhdmUgdGhlbS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0wNi0wOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxODUzNTcpOiBGaXggYnVpbGQgZm9y
IGlPUyA4LngKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODUzMTQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3
MSw3IEBAIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbnRyeS5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAog
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxODUzMTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMSBAQAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUg
PHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgpAQCAtNTgsNyArNTksOSBAQCB2b2lkIEJsb2JTdG9yYWdlOjpzeW5jaHJvbml6ZSgp
CiAKICAgICBtX2FwcHJveGltYXRlU2l6ZSA9IDA7CiAgICAgYXV0byBibG9iRGlyZWN0b3J5ID0g
YmxvYkRpcmVjdG9yeVBhdGgoKTsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShibG9iRGlyZWN0b3J5
LCBEVF9SRUcsIFt0aGlzLCAmYmxvYkRpcmVjdG9yeV0oY29uc3QgU3RyaW5nJiBuYW1lKSB7Cisg
ICAgdHJhdmVyc2VEaXJlY3RvcnkoYmxvYkRpcmVjdG9yeSwgW3RoaXMsICZibG9iRGlyZWN0b3J5
XShjb25zdCBTdHJpbmcmIG5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7CisgICAgICAg
IGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZSkKKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgYXV0byBwYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGJsb2JEaXJlY3RvcnksIG5hbWUpOwogICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwogICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0
OwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoU09VUCkK
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIERpcmVjdG9yeUVudHJ5
VHlwZSBkaXJlY3RvcnlFbnRyeVR5cGUodWludDhfdCBkdHlwZSkKK3sKKyAgICBzd2l0Y2ggKGR0
eXBlKSB7CisgICAgY2FzZSBEVF9ESVI6CisgICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5
cGU6OkRpcmVjdG9yeTsKKyAgICBjYXNlIERUX1JFRzoKKyAgICAgICAgcmV0dXJuIERpcmVjdG9y
eUVudHJ5VHlwZTo6RmlsZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKKyAgICB9Cit9
CisKK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIERpcmVjdG9yeUVudHJ5VHlwZSk+JiBmdW5j
dGlvbikKK3sKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsK
KyAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkg
eworICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSBEVF9ESVIgJiYgZHAtPmRfdHlwZSAhPSBEVF9S
RUcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRw
LT5kX25hbWU7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1l
LCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmdW5jdGlvbihTdHJpbmco
bmFtZSksIGRpcmVjdG9yeUVudHJ5VHlwZShkcC0+ZF90eXBlKSk7CisgICAgfQorICAgIGNsb3Nl
ZGlyKGRpcik7Cit9CisKK3ZvaWQgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhdGgsIFsmcGF0aF0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgeworICAgICAgICBTdHJpbmcg
ZW50cnlQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIG5hbWUp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBEaXJlY3RvcnlFbnRyeVR5
cGU6OkZpbGU6CisgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGVudHJ5UGF0aCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVj
dG9yeToKKyAgICAgICAgICAgIGRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5KGVudHJ5UGF0aCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZvbGxvdyBzeW1s
aW5rcy4KKyAgICAgICAgfQorICAgIH0pOworICAgIFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0
b3J5KHBhdGgpOworfQorCitGaWxlVGltZXMgZmlsZVRpbWVzKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyNpZiBIQVZFKFNUQVRfQklSVEhUSU1FKQorICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwor
ICAgIGlmIChzdGF0KFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRh
KCksICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZmlsZUluZm8uc3RfYmlydGh0aW1lKSwg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZmlsZUluZm8uc3RfbXRpbWUp
IH07CisjZWxpZiBVU0UoU09VUCkKKyAgICAvLyBUaGVyZSdzIG5vIHN0X2JpcnRodGltZSBpbiBz
b21lIG9wZXJhdGluZyBzeXN0ZW1zIGxpa2UgTGludXgsIHNvIHdlIHVzZSB4YXR0cnMgdG8gc2V0
L2dldCB0aGUgY3JlYXRpb24gdGltZS4KKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpLmRhdGEoKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLCAieGF0dHI6OmJpcnRodGltZSx0aW1l
Ojptb2RpZmllZCIsIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICBpZiAoIWZpbGVJbmZvKQorICAgICAgICByZXR1cm4geyB9OworICAgIGNvbnN0IGNoYXIq
IGJpcnRodGltZVN0cmluZyA9IGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfc3RyaW5nKGZpbGVJ
bmZvLmdldCgpLCAieGF0dHI6OmJpcnRodGltZSIpOworICAgIGlmICghYmlydGh0aW1lU3RyaW5n
KQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1f
Y2xvY2s6OmZyb21fdGltZV90KGdfYXNjaWlfc3RydG91bGwoYmlydGh0aW1lU3RyaW5nLCBudWxs
cHRyLCAxMCkpLAorICAgICAgICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVf
dChnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgInRpbWU6
Om1vZGlmaWVkIikpIH07CisjZW5kaWYKK30KKwordm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9u
VGltZUlmTmVlZGVkKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBhdXRvIHRpbWVzID0gZmls
ZVRpbWVzKHBhdGgpOworICAgIGlmICh0aW1lcy5jcmVhdGlvbiAhPSB0aW1lcy5tb2RpZmljYXRp
b24pIHsKKyAgICAgICAgLy8gRG9uJ3QgdXBkYXRlIG1vcmUgdGhhbiBvbmNlIHBlciBob3VyLgor
ICAgICAgICBpZiAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSB0aW1lcy5tb2Rp
ZmljYXRpb24gPCBzdGQ6OmNocm9ubzo6aG91cnMoMSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIFRoaXMgcmVhbGx5IHVwZGF0ZXMgYm90aCB0aGUgYWNjZXNzIHRpbWUgYW5k
IHRoZSBtb2RpZmljYXRpb24gdGltZS4KKyAgICB1dGltZXMoV2ViQ29yZTo6ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgMCk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAkocmV2aXNp
b24gMTg1MzE0KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaDoxODUzMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW1Qb3NpeF9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoU09V
UCkKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgorc3RhdGljIHZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoLCB1aW50OF90IHR5cGUsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIq
IGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50
KiBkcDsKKyAgICB3aGlsZSAoKGRwID0gcmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAt
PmRfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSBkcC0+ZF9uYW1lOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8
ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVu
Y3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVz
KGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7Cisg
ICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVu
Y3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgeworICAgICAgICBTdHJpbmcgcGFydGl0
aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1
YmRpck5hbWUpOworICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9S
RUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7
CisgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCitzdHJ1Y3QgRmlsZVRpbWVzIHsKKyAgICBzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IGNyZWF0aW9uOworICAgIHN0ZDo6Y2hyb25vOjpzeXN0
ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpY2F0aW9uOworfTsKKworaW5saW5lIEZpbGVUaW1l
cyBmaWxlVGltZXMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworI2lmIEhBVkUoU1RBVF9CSVJUSFRJ
TUUpCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgaWYgKHN0YXQoV2ViQ29yZTo6Zmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgJmZpbGVJbmZvKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICByZXR1cm4geyBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9t
X3RpbWVfdChmaWxlSW5mby5zdF9iaXJ0aHRpbWUpLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9tdGltZSkgfTsKKyNlbGlmIFVTRShTT1VQKQorICAg
IC8vIFRoZXJlJ3Mgbm8gc3RfYmlydGh0aW1lIGluIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgbGlr
ZSBMaW51eCwgc28gd2UgdXNlIHhhdHRycyB0byBzZXQvZ2V0IHRoZSBjcmVhdGlvbiB0aW1lLgor
ICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChX
ZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKSk7CisgICAgR1Jl
ZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZp
bGUuZ2V0KCksICJ4YXR0cjo6YmlydGh0aW1lLHRpbWU6Om1vZGlmaWVkIiwgR19GSUxFX1FVRVJZ
X0lORk9fTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIGlmICghZmlsZUluZm8pCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgY29uc3QgY2hhciogYmlydGh0aW1lU3RyaW5nID0gZ19maWxl
X2luZm9fZ2V0X2F0dHJpYnV0ZV9zdHJpbmcoZmlsZUluZm8uZ2V0KCksICJ4YXR0cjo6YmlydGh0
aW1lIik7CisgICAgaWYgKCFiaXJ0aHRpbWVTdHJpbmcpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZ19hc2Np
aV9zdHJ0b3VsbChiaXJ0aHRpbWVTdHJpbmcsIG51bGxwdHIsIDEwKSksCisgICAgICAgIHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1
dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCAidGltZTo6bW9kaWZpZWQiKSkgfTsKKyNlbmRpZgor
fQorCitpbmxpbmUgdm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBhdXRvIHRpbWVzID0gZmlsZVRpbWVzKHBhdGgpOworICAg
IGlmICh0aW1lcy5jcmVhdGlvbiAhPSB0aW1lcy5tb2RpZmljYXRpb24pIHsKKyAgICAgICAgLy8g
RG9uJ3QgdXBkYXRlIG1vcmUgdGhhbiBvbmNlIHBlciBob3VyLgorICAgICAgICBpZiAoc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSB0aW1lcy5tb2RpZmljYXRpb24gPCBzdGQ6OmNo
cm9ubzo6aG91cnMoMSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFRoaXMg
cmVhbGx5IHVwZGF0ZXMgYm90aCB0aGUgYWNjZXNzIHRpbWUgYW5kIHRoZSBtb2RpZmljYXRpb24g
dGltZS4KKyAgICB1dGltZXMoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSwgMCk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorCisjZW5kaWYgLy8gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4NCArMjksMjMgQEAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAogI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBVU0UoU09VUCkKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUg
ewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24m
IGZ1bmN0aW9uKQotewotICAgIERJUiogZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0
dXJuOwotICAgIHN0cnVjdCBkaXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRp
cikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IHR5cGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlm
ICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihTdHJpbmcobmFtZSkpOwotICAgIH0KLSAgICBj
bG9zZWRpcihkaXIpOwotfQorZW51bSBjbGFzcyBEaXJlY3RvcnlFbnRyeVR5cGUgeyBEaXJlY3Rv
cnksIEZpbGUgfTsKK3ZvaWQgdHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIERpcmVjdG9y
eUVudHJ5VHlwZSk+Jik7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLWlubGluZSB2
b2lkIHRyYXZlcnNlQ2FjaGVGaWxlcyhjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgY29uc3QgRnVu
Y3Rpb24mIGZ1bmN0aW9uKQotewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRf
RElSLCBbJmNhY2hlUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsK
LSAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3Rv
cnkocGFydGl0aW9uUGF0aCwgRFRfUkVHLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSkgewotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBh
cnRpdGlvblBhdGgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KK3ZvaWQgZGVsZXRlRGlyZWN0
b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogc3RydWN0IEZpbGVUaW1lcyB7
CiAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBjcmVhdGlvbjsKICAg
ICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWNhdGlvbjsKIH07
Ci0KLWlubGluZSBGaWxlVGltZXMgZmlsZVRpbWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSNp
ZiBIQVZFKFNUQVRfQklSVEhUSU1FKQotICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwotICAgIGlm
IChzdGF0KFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZm
aWxlSW5mbykpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZmlsZUluZm8uc3RfYmlydGh0aW1lKSwgc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZmlsZUluZm8uc3RfbXRpbWUpIH07Ci0j
ZWxpZiBVU0UoU09VUCkKLSAgICAvLyBUaGVyZSdzIG5vIHN0X2JpcnRodGltZSBpbiBzb21lIG9w
ZXJhdGluZyBzeXN0ZW1zIGxpa2UgTGludXgsIHNvIHdlIHVzZSB4YXR0cnMgdG8gc2V0L2dldCB0
aGUgY3JlYXRpb24gdGltZS4KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihn
X2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdldCgpLCAieGF0dHI6OmJpcnRodGltZSx0aW1lOjptb2Rp
ZmllZCIsIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBp
ZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGNvbnN0IGNoYXIqIGJpcnRo
dGltZVN0cmluZyA9IGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfc3RyaW5nKGZpbGVJbmZvLmdl
dCgpLCAieGF0dHI6OmJpcnRodGltZSIpOwotICAgIGlmICghYmlydGh0aW1lU3RyaW5nKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OmZyb21fdGltZV90KGdfYXNjaWlfc3RydG91bGwoYmlydGh0aW1lU3RyaW5nLCBudWxscHRyLCAx
MCkpLAotICAgICAgICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChnX2Zp
bGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgInRpbWU6Om1vZGlm
aWVkIikpIH07Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgdXBkYXRlRmlsZU1vZGlmaWNhdGlv
blRpbWVJZk5lZWRlZChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYXV0byB0aW1lcyA9IGZp
bGVUaW1lcyhwYXRoKTsKLSAgICBpZiAodGltZXMuY3JlYXRpb24gIT0gdGltZXMubW9kaWZpY2F0
aW9uKSB7Ci0gICAgICAgIC8vIERvbid0IHVwZGF0ZSBtb3JlIHRoYW4gb25jZSBwZXIgaG91ci4K
LSAgICAgICAgaWYgKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gdGltZXMubW9k
aWZpY2F0aW9uIDwgc3RkOjpjaHJvbm86OmhvdXJzKDEpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBUaGlzIHJlYWxseSB1cGRhdGVzIGJvdGggdGhlIGFjY2VzcyB0aW1lIGFu
ZCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgdXRpbWVzKFdlYkNvcmU6OmZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksIDApOwotfQorRmlsZVRpbWVzIGZpbGVUaW1lcyhj
b25zdCBTdHJpbmcmIHBhdGgpOwordm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVl
ZGVkKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oCShyZXZpc2lvbiAxODUzMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4X2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gK
LQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNs
dWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIFVT
RShTT1VQKQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rpb24+Ci1zdGF0aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAg
IERJUiogZGlyID0gb3BlbmRpcihXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCkuZGF0YSgpKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIHN0cnVjdCBk
aXJlbnQqIGRwOwotICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAgICAgIGlm
IChkcC0+ZF90eXBlICE9IHR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29u
c3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIu
IikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBmdW5jdGlvbihTdHJpbmcobmFtZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCB0cmF2ZXJzZUNhY2hl
RmlsZXMoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikK
LXsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgs
ICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgIFN0cmluZyBw
YXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0
aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgs
IERUX1JFRywgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXN0cnVjdCBGaWxlVGltZXMgewotICAgIHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgY3JlYXRpb247Ci0gICAgc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmljYXRpb247Ci19OwotCi1pbmxpbmUgRmls
ZVRpbWVzIGZpbGVUaW1lcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0jaWYgSEFWRShTVEFUX0JJ
UlRIVElNRSkKLSAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKLSAgICBpZiAoc3RhdChXZWJDb3Jl
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZUluZm8pKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OmZyb21fdGltZV90KGZpbGVJbmZvLnN0X2JpcnRodGltZSksIHN0ZDo6Y2hyb25vOjpzeXN0ZW1f
Y2xvY2s6OmZyb21fdGltZV90KGZpbGVJbmZvLnN0X210aW1lKSB9OwotI2VsaWYgVVNFKFNPVVAp
Ci0gICAgLy8gVGhlcmUncyBubyBzdF9iaXJ0aHRpbWUgaW4gc29tZSBvcGVyYXRpbmcgc3lzdGVt
cyBsaWtlIExpbnV4LCBzbyB3ZSB1c2UgeGF0dHJzIHRvIHNldC9nZXQgdGhlIGNyZWF0aW9uIHRp
bWUuCi0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9w
YXRoKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKLSAg
ICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2lu
Zm8oZmlsZS5nZXQoKSwgInhhdHRyOjpiaXJ0aHRpbWUsdGltZTo6bW9kaWZpZWQiLCBHX0ZJTEVf
UVVFUllfSU5GT19OT05FLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFmaWxlSW5mbykK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBjb25zdCBjaGFyKiBiaXJ0aHRpbWVTdHJpbmcgPSBn
X2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3N0cmluZyhmaWxlSW5mby5nZXQoKSwgInhhdHRyOjpi
aXJ0aHRpbWUiKTsKLSAgICBpZiAoIWJpcnRodGltZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4geyBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChn
X2FzY2lpX3N0cnRvdWxsKGJpcnRodGltZVN0cmluZywgbnVsbHB0ciwgMTApKSwKLSAgICAgICAg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZ19maWxlX2luZm9fZ2V0X2F0
dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksICJ0aW1lOjptb2RpZmllZCIpKSB9OwotI2Vu
ZGlmCi19Ci0KLWlubGluZSB2b2lkIHVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lSWZOZWVkZWQo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGF1dG8gdGltZXMgPSBmaWxlVGltZXMocGF0aCk7
Ci0gICAgaWYgKHRpbWVzLmNyZWF0aW9uICE9IHRpbWVzLm1vZGlmaWNhdGlvbikgewotICAgICAg
ICAvLyBEb24ndCB1cGRhdGUgbW9yZSB0aGFuIG9uY2UgcGVyIGhvdXIuCi0gICAgICAgIGlmIChz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHRpbWVzLm1vZGlmaWNhdGlvbiA8IHN0
ZDo6Y2hyb25vOjpob3VycygxKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8g
VGhpcyByZWFsbHkgdXBkYXRlcyBib3RoIHRoZSBhY2Nlc3MgdGltZSBhbmQgdGhlIG1vZGlmaWNh
dGlvbiB0aW1lLgotICAgIHV0aW1lcyhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCkuZGF0YSgpLCAwKTsKLX0KLQotfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCi0KLSNlbmRpZiAvLyBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAotCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5u
ZWxDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQkocmV2aXNpb24gMTg1MzE0KQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVs
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgPGRpc3BhdGNo
L2Rpc3BhdGNoLmg+CiAjaW5jbHVkZSA8bWFjaC92bV9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTg1MzE0
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdu
b3N0aWNMb2dnaW5nS2V5cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdS
ZXN1bHRUeXBlLmg+CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBTdGF0aXN0aWNzOjpib290c3Ry
YXBGcm9tTmV0d29ya0NhYwogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9t
IHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CiAKICAgICBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4gaGFz
aGVzOwotICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbJmhhc2hlc10o
Y29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmKSB7CisgICAgdHJhdmVyc2VS
ZWNvcmRzRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgaGFz
aFN0cmluZywgY29uc3QgU3RyaW5nJikgewogICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAg
ICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goaGFzaFN0cmluZywgaGFzaCkpCiAgICAgICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMTg1MzE0
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSA8d3Rm
L1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KQEAgLTk5LDYgKzk5
LDMxIEBAIHN0YXRpYyBTdHJpbmcgbWFrZUJsb2JEaXJlY3RvcnlQYXRoKGNvbnMKICAgICByZXR1
cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1ha2VWZXJzaW9uZWREaXJlY3Rv
cnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwgYmxvYnNEaXJlY3RvcnlOYW1lKTsKIH0KIAordm9p
ZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpPiYgZnVuY3Rp
b24pCit7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGgs
ICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUg
dHlwZSkgeworICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9y
eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUp
OworICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAm
cGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBl
IHR5cGUpIHsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6Rmls
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFt
ZSwgcGFydGl0aW9uUGF0aCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitzdGF0aWMgdm9p
ZCBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRo
KQoreworICAgIC8vIExldCBzeXN0ZW0gZmlndXJlIG91dCBpZiB0aGV5IGFyZSByZWFsbHkgZW1w
dHkuCisgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGhdKGNv
bnN0IFN0cmluZyYgc3ViZGlyTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKKyAgICAg
ICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCwgc3ViZGlyTmFtZSk7CisgICAgICAgIFdlYkNv
cmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhcnRpdGlvblBhdGgpOworICAgIH0pOworfQorCiBT
dG9yYWdlOjpTdG9yYWdlKGNvbnN0IFN0cmluZyYgYmFzZURpcmVjdG9yeVBhdGgpCiAgICAgOiBt
X2Jhc2VQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKQogICAgICwgbV9yZWNvcmRzUGF0aChtYWtlUmVj
b3Jkc0RpcmVjdG9yeVBhdGgoYmFzZURpcmVjdG9yeVBhdGgpKQpAQCAtMTUwLDcgKzE3NSw3IEBA
IHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogICAgICAgICBhdXRvIGJvZHlGaWx0ZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOwogICAgICAgICBzaXplX3QgcmVjb3Jk
c1NpemUgPSAwOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICAgIHRyYXZlcnNl
Q2FjaGVGaWxlcyhyZWNvcmRzUGF0aCgpLCBbJnJlY29yZEZpbHRlciwgJmJvZHlGaWx0ZXIsICZy
ZWNvcmRzU2l6ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1Bh
dGgoKSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5RmlsdGVyLCAmcmVjb3Jkc1NpemUsICZjb3VudF0o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAg
ICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKIAogICAgICAgICAgICAgYm9vbCBpc0JvZHkg
PSBmaWxlTmFtZS5lbmRzV2l0aChib2R5UG9zdGZpeCk7CkBAIC02NjQsNyArNjg5LDcgQEAgdm9p
ZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYQogICAgIAogICAgIGlvUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgZmxhZ3MsIHRyYXZlcnNlSGFuZGxlclB0cl0gewogICAgICAgICBh
dXRvJiB0cmF2ZXJzZUhhbmRsZXIgPSAqdHJhdmVyc2VIYW5kbGVyUHRyOwotICAgICAgICB0cmF2
ZXJzZUNhY2hlRmlsZXMocmVjb3Jkc1BhdGgoKSwgW3RoaXMsIGZsYWdzLCAmdHJhdmVyc2VIYW5k
bGVyXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgp
IHsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgoKSwgW3RoaXMsIGZs
YWdzLCAmdHJhdmVyc2VIYW5kbGVyXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJp
bmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAh
PSBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwpAQCAtNzI5LDIwICs3NTQsMTggQEAgdm9pZCBT
dG9yYWdlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtXwogCiAgICAgaW9RdWV1ZSgpLmRpc3Bh
dGNoKFt0aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXJQdHJdIHsKICAg
ICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7Ci0gICAgICAgIHRy
YXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBEVF9ESVIsIFsmcmVjb3Jkc1BhdGgsIG1vZGlm
aWVkU2luY2VUaW1lXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUpIHsKLSAgICAgICAgICAgIFN0
cmluZyBzdWJkaXJQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29y
ZHNQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHN1YmRp
clBhdGgsIERUX1JFRywgWyZzdWJkaXJQYXRoLCBtb2RpZmllZFNpbmNlVGltZV0oY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3Jl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3ViZGlyUGF0aCwgZmlsZU5hbWUpOwotICAgICAg
ICAgICAgICAgIGlmIChtb2RpZmllZFNpbmNlVGltZSA+IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv
Y2s6OnRpbWVfcG9pbnQ6Om1pbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdGltZXMg
PSBmaWxlVGltZXMoZmlsZVBhdGgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGltZXMubW9k
aWZpY2F0aW9uIDwgbW9kaWZpZWRTaW5jZVRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0
ZUZpbGUoZmlsZVBhdGgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBXZWJDb3JlOjpk
ZWxldGVFbXB0eURpcmVjdG9yeShzdWJkaXJQYXRoKTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRz
RmlsZXMocmVjb3Jkc1BhdGgsIFttb2RpZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgICAgICBhdXRvIGZp
bGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgs
IGZpbGVOYW1lKTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllZFNpbmNlVGltZSA+IHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpKSB7CisgICAgICAgICAgICAgICAg
YXV0byB0aW1lcyA9IGZpbGVUaW1lcyhmaWxlUGF0aCk7CisgICAgICAgICAgICAgICAgaWYgKHRp
bWVzLm1vZGlmaWNhdGlvbiA8IG1vZGlmaWVkU2luY2VUaW1lKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxl
KGZpbGVQYXRoKTsKICAgICAgICAgfSk7CiAKKyAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGly
ZWN0b3JpZXMocmVjb3Jkc1BhdGgpOworCiAgICAgICAgIC8vIFRoaXMgY2xlYW5zIHVucmVmZXJl
bmNlcyBibG9icy4KICAgICAgICAgbV9ibG9iU3RvcmFnZS5zeW5jaHJvbml6ZSgpOwogCkBAIC04
MDksNyArODMyLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgYmFja2dyb3VuZElP
UXVldWUoKS5kaXNwYXRjaChbdGhpc10gewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhp
cy0+cmVjb3Jkc1BhdGgoKTsKLSAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKHJlY29yZHNQYXRo
LCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25Q
YXRoKSB7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBbdGhpc10o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAg
ICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0gS2V5OjpoYXNoU3RyaW5nTGVuZ3Ro
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYXV0byByZWNvcmRQYXRo
ID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVO
YW1lKTsKQEAgLTgyOSwxMSArODUyLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9KTsKIAotICAgICAgICAvLyBMZXQgc3lzdGVtIGZpZ3VyZSBvdXQg
aWYgdGhleSBhcmUgcmVhbGx5IGVtcHR5LgotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNv
cmRzUGF0aCwgRFRfRElSLCBbJnJlY29yZHNQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUp
IHsKLSAgICAgICAgICAgIGF1dG8gcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgICAgICBXZWJD
b3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXJ0aXRpb25QYXRoKTsKLSAgICAgICAgfSk7Cisg
ICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKTsKIAogICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAgICAgIG1fc2hy
aW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwpAQCAtODQ3LDIwICs4NjYsMjYgQEAgdm9pZCBTdG9yYWdl
OjpzaHJpbmsoKQogCiB2b2lkIFN0b3JhZ2U6OmRlbGV0ZU9sZFZlcnNpb25zKCkKIHsKLSAgICAv
LyBEZWxldGUgVjEgY2FjaGUuCiAgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhp
c10gewogICAgICAgICBhdXRvIGNhY2hlUGF0aCA9IGJhc2VQYXRoKCk7Ci0gICAgICAgIHRyYXZl
cnNlRGlyZWN0b3J5KGNhY2hlUGF0aCwgRFRfRElSLCBbJmNhY2hlUGF0aF0oY29uc3QgU3RyaW5n
JiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoc3ViZGlyTmFtZS5zdGFydHNXaXRoKHZl
cnNpb25EaXJlY3RvcnlQcmVmaXgpKQorICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBh
dGgsIFsmY2FjaGVQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5
VHlwZSB0eXBlKSB7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6
OkRpcmVjdG9yeSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBTdHJpbmcg
cGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBh
dGgsIHN1YmRpck5hbWUpOwotICAgICAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9u
UGF0aCwgRFRfUkVHLCBbJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsK
LSAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSkpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXJ0aXRpb25QYXRo
KTsKKyAgICAgICAgICAgIGlmICghc3ViZGlyTmFtZS5zdGFydHNXaXRoKHZlcnNpb25EaXJlY3Rv
cnlQcmVmaXgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFN0cmluZyB2
ZXJzaW9uU3RyaW5nID0gc3ViZGlyTmFtZS5zdWJzdHJpbmcoc3RybGVuKHZlcnNpb25EaXJlY3Rv
cnlQcmVmaXgpKTsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGRpcmVjdG9yeVZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nLnRvVUludFN0cmljdCgmc3VjY2Vz
cyk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKGRpcmVjdG9yeVZlcnNpb24gPj0gdmVyc2lvbikKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIFN0cmluZyBvbGRWZXJzaW9uUGF0aCA9IFdlYkNv
cmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOworICAg
ICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGRlbGV0
aW5nIG9sZCBjYWNoZSB2ZXJzaW9uLCBwYXRoICVzIiwgb2xkVmVyc2lvblBhdGgudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShvbGRWZXJzaW9u
UGF0aCk7CiAgICAgICAgIH0pOwogICAgIH0pOwotICAgIC8vIEZJWE1FOiBEZWxldGUgVjIgY2Fj
aGUuCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDE4NTMxNCkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw5IEBAIHByaXZhdGU6CiAgICAgQmxvYlN0
b3JhZ2UgbV9ibG9iU3RvcmFnZTsKIH07CiAKKy8vIEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0
d29ya0NhY2hlU3RhdGlzdGljcyBvbmx5Lgordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25z
dCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpPiYpOworCiB9CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcAkocmV2aXNpb24gMTg1MzE0KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rl
ci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MzE0KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCQk3Q0Y0N0ZGRjE3Mjc2QUUzMDA4QUNCOTEg
LyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdl
QmFubmVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0VDNEYwRkIxOEU0QUNCQjAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUM0RjBGOTE4
RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLzsgfTsKIAkJODMwNDhB
RTYxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMDQ4QUU1MUFDQTQ1REMwMDgy
QzgzMiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggKi87IH07Ci0JCTgzNEIyNTBGMUE4MzFB
OEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTBFMUE4MzFBOEQwMENGQjE1
MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLzsgfTsKKwkJODM0QjI1MEYxQTgz
MUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggKi87IH07CiAJCTgzNEIyNTEyMUE4NDJDODcwMENG
QjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlU3RhdGlzdGljcy5oICovOyB9OwogCQk4MzYwMzQ5RjFBQ0IzNEQ2MDA2MjY1NDkgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzNjAzNDlEMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXIuY3BwICovOyB9OwogCQk4MzYwMzRBMDFBQ0IzNEQ2MDA2MjY1NDkgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmggKi87IH07CkBAIC0xODA2LDYgKzE4MDYsNyBAQAogCQlFNDQzNkVDRTFB
MEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQzNkVDMTFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlS2V5LmggKi87IH07CiAJCUU0NDM2RUNGMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3
b3JrQ2FjaGVTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDQzNkVDMjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5o
ICovOyB9OwogCQlFNDQzNkVEMDFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQz
NkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgKi87IH07CisJ
CUU0Njk3Q0NEMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Njk3Q0NDMUIy
NUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCAqLzsgfTsKIAkJRTQ3
RDFFOTgxQjA2NDlGQjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RDFFOTYxQjA2MkI2NjAwMjY3
NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwICovOyB9OwogCQlFNDg5RDI4QTFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2Fj
aGVDb2Rlci5oICovOyB9OwogCQlFNDg5RDI4QjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlQ29kZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICov
OyB9OwpAQCAtMzQzNiw3ICszNDM3LDcgQEAKIAkJN0NGNDdGRkQxNzI3NkFFMzAwOEFDQjkxIC8q
IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFBy
b2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvY2Vzc1Rocm90dGxlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzRCMjUwRTFBODMxQThEMDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0OUQxQUNCMzRENjAw
NjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDA4Niw2ICs0MDg3LDcgQEAKIAkJRTQ0MzZFQzExQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtD
YWNoZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVL
ZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFE
MjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZD
IC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5RDI4MzFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlQ29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU3Miw3ICs3NTc0LDggQEAKIAkJCQlFNDg5
RDI4OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAogCQkJCUU0
MTNGNTlFMUFDMUFGOUQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgKi8sCiAJCQkJ
RTQxM0Y1OUIxQUMxQURCNjAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmggKi8sCi0JCQkJ
ODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5o
ICovLAorCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmggKi8sCisJCQkJRTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwICovLAogCQkJCUU0MkUwNjBCMUFBNzQ0MEQwMEIxMTY5OSAvKiBOZXR3b3Jr
Q2FjaGVJT0NoYW5uZWwuaCAqLywKIAkJCQlFNDJFMDYwRDFBQTc1MEU1MDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0gKi8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFE
MjA0IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAgKi8sCkBAIC03ODY3LDcgKzc4NzAsNyBAQAogCQkJ
CUU0ODlEMjhFMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDg5RDI5MDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5j
b2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQxM0Y1OUQxQUMxQURDNDAwMzQ1MzYwIC8qIE5l
dHdvcmtDYWNoZUVudHJ5LmggaW4gSGVhZGVycyAqLywKLQkJCQk4MzRCMjUwRjFBODMxQThEMDBD
RkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQyRTA2MTAxQUE3NTIzQjAwQjExNjk5IC8qIE5ldHdvcmtDYWNo
ZUlPQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0UxQTBEMDQwQjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM0QjI1MTIxQTg0MkM4
NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLApAQCAt
OTY4MCw2ICs5NjgzLDcgQEAKIAkJCQlFNDJFMDYxNDFBQTc1QjcwMDBCMTE2OTkgLyogTmV0d29y
a0NhY2hlRGF0YUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ4OUQyOEQxQTBBMkRCODAw
NzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ4
OUQyOEYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTQ2OTdDQ0QxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQxM0Y1OUYxQUMxQUY5RDAwMzQ1MzYwIC8q
IE5ldHdvcmtDYWNoZUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MkUwNjBGMUFBNzUy
MzQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUU0NDM2RUNEMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuY3BwIGlu
IFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="279558"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254646</attachid>
            <date>2015-06-10 05:24:32 -0700</date>
            <delta_ts>2015-06-10 05:24:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-version-delete-5.patch</filename>
            <type>text/plain</type>
            <size>42336</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTQxMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE1LTA2LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrQ2FjaGU6IERlbGV0
ZSBvbGQgY2FjaGUgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkJsb2JTdG9yYWdlOjpzeW5jaHJvbml6ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRpcmVjdG9yeUVudHJ5VHlwZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VEaXJlY3RvcnkpOgorCisgICAgICAgICAgICBQYXNzIGVu
dHJ5IHR5cGUgYXMgY2FsbGJhY2sgYXJndW1lbnQuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseSk6CisKKyAgICAgICAgICAgIEFkZCBo
ZWxwZXIuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxlVGltZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lSWZO
ZWVkZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmguCisKKyAgICAgICAgICAgIE1vdmUgY29kZSB0
byBjcHAuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjp0cmF2ZXJzZURpcmVjdG9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VDYWNo
ZUZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpmaWxlVGlt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OnVwZGF0ZUZpbGVN
b2RpZmljYXRpb25UaW1lSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmJvb3RzdHJhcEZy
b21OZXR3b3JrQ2FjaGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VCbG9i
RGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6dHJhdmVyc2VS
ZWNvcmRzRmlsZXMpOgorCisgICAgICAgICAgICBNb3ZlIGNhY2hlIGhpZXJhcmNoeSBhd2FyZSB0
cmF2ZXJzYWwgY29kZSBoZXJlIGZyb20gTmV0d29ya0NhY2hlRmlsZVN5c3RlbSAoZm9yIGJldHRl
ciBsYXllcmluZykuCisgICAgICAgICAgICBSZW5hbWUgZm9yIGNsYXJpdHkuCisKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rvcmllcyk6CisK
KyAgICAgICAgICAgIEZhY3RvciB0byBhIGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6U3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3RvcmFnZTo6c3luY2hyb25pemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OnRyYXZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpT
dG9yYWdlOjpjbGVhcik6CisKKyAgICAgICAgICAgIFVzZSB0cmF2ZXJzZVJlY29yZHNGaWxlcyBm
b3IgdHJhdmVyc2FsLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6
c2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkZWxldGVP
bGRWZXJzaW9ucyk6CisKKyAgICAgICAgICAgIERlbGV0ZSB2ZXJzaW9uIHN1YmRpcmVjdG9yaWVz
IHdpdGggdmVyc2lvbiBudW1iZXIgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHZlcnNpb24uCisgICAg
ICAgICAgICBSZW1vdmUgY29kZSBmb3IgY2xlYXJpbmcgdW52ZXJzaW9uZWQgVjEgY2FjaGVzLiBO
byBvbmUgc2hvdWxkIGhhdmUgdGhlbS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKwogMjAxNS0wNi0xMCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViIEluc3BlY3RvciBpcyBicm9rZW4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODU0MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw3IEBAIHNldChOZXR3
b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURlY29kZXIuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW5jb2Rlci5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5j
cHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAog
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAogICAgIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxv
YlN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxODU0MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDEwICsyOSwxMSBAQAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cisj
aW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUg
PHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTgs
NyArNTksOSBAQCB2b2lkIEJsb2JTdG9yYWdlOjpzeW5jaHJvbml6ZSgpCiAKICAgICBtX2FwcHJv
eGltYXRlU2l6ZSA9IDA7CiAgICAgYXV0byBibG9iRGlyZWN0b3J5ID0gYmxvYkRpcmVjdG9yeVBh
dGgoKTsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShibG9iRGlyZWN0b3J5LCBEVF9SRUcsIFt0aGlz
LCAmYmxvYkRpcmVjdG9yeV0oY29uc3QgU3RyaW5nJiBuYW1lKSB7CisgICAgdHJhdmVyc2VEaXJl
Y3RvcnkoYmxvYkRpcmVjdG9yeSwgW3RoaXMsICZibG9iRGlyZWN0b3J5XShjb25zdCBTdHJpbmcm
IG5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7CisgICAgICAgIGlmICh0eXBlICE9IERp
cmVjdG9yeUVudHJ5VHlwZTo6RmlsZSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0
byBwYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJsb2JEaXJlY3Rvcnks
IG5hbWUpOwogICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpOwogICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0OwpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVu
dC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlIHsKKworc3RhdGljIERpcmVjdG9yeUVudHJ5VHlwZSBkaXJlY3RvcnlF
bnRyeVR5cGUodWludDhfdCBkdHlwZSkKK3sKKyAgICBzd2l0Y2ggKGR0eXBlKSB7CisgICAgY2Fz
ZSBEVF9ESVI6CisgICAgICAgIHJldHVybiBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeTsK
KyAgICBjYXNlIERUX1JFRzoKKyAgICAgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6Rmls
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZTsKKyAgICB9Cit9CisKK3ZvaWQgdHJhdmVy
c2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFN0cmluZyYsIERpcmVjdG9yeUVudHJ5VHlwZSk+JiBmdW5jdGlvbikKK3sKKyAgICBE
SVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybjsKKyAgICBkaXJlbnQqIGRw
OworICAgIHdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpKSB7CisgICAgICAgIGlmIChkcC0+ZF90
eXBlICE9IERUX0RJUiAmJiBkcC0+ZF90eXBlICE9IERUX1JFRykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKKyAgICAgICAgaWYg
KCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGF1dG8gbmFtZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmFt
ZSk7CisgICAgICAgIGlmIChuYW1lU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGZ1bmN0aW9uKG5hbWVTdHJpbmcsIGRpcmVjdG9yeUVudHJ5VHlwZShkcC0+
ZF90eXBlKSk7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcik7Cit9CisKK3ZvaWQgZGVsZXRlRGly
ZWN0b3J5UmVjdXJzaXZlbHkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHRyYXZlcnNlRGly
ZWN0b3J5KHBhdGgsIFsmcGF0aF0oY29uc3QgU3RyaW5nJiBuYW1lLCBEaXJlY3RvcnlFbnRyeVR5
cGUgdHlwZSkgeworICAgICAgICBTdHJpbmcgZW50cnlQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHBhdGgsIG5hbWUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAgICAgY2FzZSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGU6CisgICAgICAgICAgICBXZWJDb3Jl
OjpkZWxldGVGaWxlKGVudHJ5UGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeToKKyAgICAgICAgICAgIGRlbGV0ZURpcmVj
dG9yeVJlY3Vyc2l2ZWx5KGVudHJ5UGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Ly8gVGhpcyBkb2Vzbid0IGZvbGxvdyBzeW1saW5rcy4KKyAgICAgICAgfQorICAgIH0pOworICAg
IFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOworfQorCitGaWxlVGltZXMgZmls
ZVRpbWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyNpZiBIQVZFKFNUQVRfQklSVEhUSU1FKQor
ICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChzdGF0KFdlYkNvcmU6OmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCksICZmaWxlSW5mbykpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1l
X3QoZmlsZUluZm8uc3RfYmlydGh0aW1lKSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJv
bV90aW1lX3QoZmlsZUluZm8uc3RfbXRpbWUpIH07CisjZWxpZiBVU0UoU09VUCkKKyAgICAvLyBU
aGVyZSdzIG5vIHN0X2JpcnRodGltZSBpbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGxpa2UgTGlu
dXgsIHNvIHdlIHVzZSB4YXR0cnMgdG8gc2V0L2dldCB0aGUgY3JlYXRpb24gdGltZS4KKyAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoV2ViQ29y
ZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIEdSZWZQdHI8
R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhmaWxlLmdl
dCgpLCAieGF0dHI6OmJpcnRodGltZSx0aW1lOjptb2RpZmllZCIsIEdfRklMRV9RVUVSWV9JTkZP
X05PTkUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBpZiAoIWZpbGVJbmZvKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIGNvbnN0IGNoYXIqIGJpcnRodGltZVN0cmluZyA9IGdfZmlsZV9pbmZv
X2dldF9hdHRyaWJ1dGVfc3RyaW5nKGZpbGVJbmZvLmdldCgpLCAieGF0dHI6OmJpcnRodGltZSIp
OworICAgIGlmICghYmlydGh0aW1lU3RyaW5nKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJl
dHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGdfYXNjaWlfc3Ry
dG91bGwoYmlydGh0aW1lU3RyaW5nLCBudWxscHRyLCAxMCkpLAorICAgICAgICBzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3Vp
bnQ2NChmaWxlSW5mby5nZXQoKSwgInRpbWU6Om1vZGlmaWVkIikpIH07CisjZW5kaWYKK30KKwor
dm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBhdXRvIHRpbWVzID0gZmlsZVRpbWVzKHBhdGgpOworICAgIGlmICh0aW1lcy5j
cmVhdGlvbiAhPSB0aW1lcy5tb2RpZmljYXRpb24pIHsKKyAgICAgICAgLy8gRG9uJ3QgdXBkYXRl
IG1vcmUgdGhhbiBvbmNlIHBlciBob3VyLgorICAgICAgICBpZiAoc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6bm93KCkgLSB0aW1lcy5tb2RpZmljYXRpb24gPCBzdGQ6OmNocm9ubzo6aG91cnMo
MSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFRoaXMgcmVhbGx5IHVwZGF0
ZXMgYm90aCB0aGUgYWNjZXNzIHRpbWUgYW5kIHRoZSBtb2RpZmljYXRpb24gdGltZS4KKyAgICB1
dGltZXMoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgbnVs
bHB0cik7Cit9CisKK30KK30KKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5
c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMTg1MzYyKQkoZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXgu
aDoxODUzNjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisjZGVmaW5lIE5l
dHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
KworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgor
I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorc3RhdGljIHZvaWQg
dHJhdmVyc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50OF90IHR5cGUsIGNvbnN0
IEZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoV2ViQ29yZTo6
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBzdHJ1Y3QgZGlyZW50KiBkcDsKKyAgICB3aGlsZSAoKGRwID0g
cmVhZGRpcihkaXIpKSkgeworICAgICAgICBpZiAoZHAtPmRfdHlwZSAhPSB0eXBlKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBkcC0+ZF9uYW1lOwor
ICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnVuY3Rpb24oU3RyaW5nKG5hbWUpKTsKKyAg
ICB9CisgICAgY2xvc2VkaXIoZGlyKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9u
PgoraW5saW5lIHZvaWQgdHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRo
LCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2Fj
aGVQYXRoLCBEVF9ESVIsIFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3Vi
ZGlyTmFtZSkgeworICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOworICAgICAgICB0cmF2
ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRp
b25QYXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7CisgICAgICAgICAgICBmdW5jdGlvbihm
aWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitzdHJ1
Y3QgRmlsZVRpbWVzIHsKKyAgICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
IGNyZWF0aW9uOworICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9k
aWZpY2F0aW9uOworfTsKKworaW5saW5lIEZpbGVUaW1lcyBmaWxlVGltZXMoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworI2lmIEhBVkUoU1RBVF9CSVJUSFRJTUUpCisgICAgc3RydWN0IHN0YXQgZmls
ZUluZm87CisgICAgaWYgKHN0YXQoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSwgJmZpbGVJbmZvKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
eyBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9iaXJ0
aHRpbWUpLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChmaWxlSW5mby5z
dF9tdGltZSkgfTsKKyNlbGlmIFVTRShTT1VQKQorICAgIC8vIFRoZXJlJ3Mgbm8gc3RfYmlydGh0
aW1lIGluIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgbGlrZSBMaW51eCwgc28gd2UgdXNlIHhhdHRy
cyB0byBzZXQvZ2V0IHRoZSBjcmVhdGlvbiB0aW1lLgorICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCkuZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZv
ID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksICJ4YXR0cjo6YmlydGh0
aW1lLHRpbWU6Om1vZGlmaWVkIiwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgbnVsbHB0ciwgbnVs
bHB0cikpOworICAgIGlmICghZmlsZUluZm8pCisgICAgICAgIHJldHVybiB7IH07CisgICAgY29u
c3QgY2hhciogYmlydGh0aW1lU3RyaW5nID0gZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV9zdHJp
bmcoZmlsZUluZm8uZ2V0KCksICJ4YXR0cjo6YmlydGh0aW1lIik7CisgICAgaWYgKCFiaXJ0aHRp
bWVTdHJpbmcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6ZnJvbV90aW1lX3QoZ19hc2NpaV9zdHJ0b3VsbChiaXJ0aHRpbWVTdHJp
bmcsIG51bGxwdHIsIDEwKSksCisgICAgICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZy
b21fdGltZV90KGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgp
LCAidGltZTo6bW9kaWZpZWQiKSkgfTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCB1cGRhdGVG
aWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBh
dXRvIHRpbWVzID0gZmlsZVRpbWVzKHBhdGgpOworICAgIGlmICh0aW1lcy5jcmVhdGlvbiAhPSB0
aW1lcy5tb2RpZmljYXRpb24pIHsKKyAgICAgICAgLy8gRG9uJ3QgdXBkYXRlIG1vcmUgdGhhbiBv
bmNlIHBlciBob3VyLgorICAgICAgICBpZiAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93
KCkgLSB0aW1lcy5tb2RpZmljYXRpb24gPCBzdGQ6OmNocm9ubzo6aG91cnMoMSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFRoaXMgcmVhbGx5IHVwZGF0ZXMgYm90aCB0aGUg
YWNjZXNzIHRpbWUgYW5kIHRoZSBtb2RpZmljYXRpb24gdGltZS4KKyAgICB1dGltZXMoV2ViQ29y
ZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgMCk7Cit9CisKK30KK30K
KworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjZW5kaWYgLy8gTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbVBvc2l4X2gKKwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5NSArMjMsMzQgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdvcmtD
YWNoZUZpbGVTeXN0ZW1Qb3NpeF9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3Np
eF9oCisjaWZuZGVmIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1faAorI2RlZmluZSBOZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtX2gKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCiAjaW5jbHVkZSA8
V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8c3lz
L3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIFVTRShTT1VQKQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
LSNlbmRpZgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXN0YXRpYyB2b2lkIHRyYXZlcnNlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDhfdCB0eXBlLCBjb25zdCBGdW5jdGlvbiYgZnVu
Y3Rpb24pCi17Ci0gICAgRElSKiBkaXIgPSBvcGVuZGlyKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm47
Ci0gICAgc3RydWN0IGRpcmVudCogZHA7Ci0gICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGlyKSkp
IHsKLSAgICAgICAgaWYgKGRwLT5kX3R5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZHAtPmRfbmFtZTsKLSAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGZ1bmN0aW9uKFN0cmluZyhuYW1lKSk7Ci0gICAgfQotICAgIGNsb3Nl
ZGlyKGRpcik7Ci19CitlbnVtIGNsYXNzIERpcmVjdG9yeUVudHJ5VHlwZSB7IERpcmVjdG9yeSwg
RmlsZSB9Owordm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgRGlyZWN0b3J5RW50
cnlUeXBlKT4mKTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotaW5saW5lIHZvaWQg
dHJhdmVyc2VDYWNoZUZpbGVzKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBjb25zdCBGdW5jdGlv
biYgZnVuY3Rpb24pCi17Ci0gICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBEVF9ESVIs
IFsmY2FjaGVQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewotICAg
ICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChjYWNoZVBhdGgsIHN1YmRpck5hbWUpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShw
YXJ0aXRpb25QYXRoLCBEVF9SRUcsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0
aW9uUGF0aCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQordm9pZCBkZWxldGVEaXJlY3RvcnlS
ZWN1cnNpdmVseShjb25zdCBTdHJpbmcmIHBhdGgpOwogCiBzdHJ1Y3QgRmlsZVRpbWVzIHsKICAg
ICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IGNyZWF0aW9uOwogICAgIHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpY2F0aW9uOwogfTsKLQot
aW5saW5lIEZpbGVUaW1lcyBmaWxlVGltZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotI2lmIEhB
VkUoU1RBVF9CSVJUSFRJTUUpCi0gICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0gICAgaWYgKHN0
YXQoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgJmZpbGVJ
bmZvKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4geyBzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9iaXJ0aHRpbWUpLCBzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChmaWxlSW5mby5zdF9tdGltZSkgfTsKLSNlbGlm
IFVTRShTT1VQKQotICAgIC8vIFRoZXJlJ3Mgbm8gc3RfYmlydGh0aW1lIGluIHNvbWUgb3BlcmF0
aW5nIHN5c3RlbXMgbGlrZSBMaW51eCwgc28gd2UgdXNlIHhhdHRycyB0byBzZXQvZ2V0IHRoZSBj
cmVhdGlvbiB0aW1lLgotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxl
X25ld19mb3JfcGF0aChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0
YSgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmls
ZV9xdWVyeV9pbmZvKGZpbGUuZ2V0KCksICJ4YXR0cjo6YmlydGh0aW1lLHRpbWU6Om1vZGlmaWVk
IiwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIGlmICgh
ZmlsZUluZm8pCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgY29uc3QgY2hhciogYmlydGh0aW1l
U3RyaW5nID0gZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV9zdHJpbmcoZmlsZUluZm8uZ2V0KCks
ICJ4YXR0cjo6YmlydGh0aW1lIik7Ci0gICAgaWYgKCFiaXJ0aHRpbWVTdHJpbmcpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHsgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZnJv
bV90aW1lX3QoZ19hc2NpaV9zdHJ0b3VsbChiaXJ0aHRpbWVTdHJpbmcsIG51bGxwdHIsIDEwKSks
Ci0gICAgICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGdfZmlsZV9p
bmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCAidGltZTo6bW9kaWZpZWQi
KSkgfTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGlt
ZUlmTmVlZGVkKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBhdXRvIHRpbWVzID0gZmlsZVRp
bWVzKHBhdGgpOwotICAgIGlmICh0aW1lcy5jcmVhdGlvbiAhPSB0aW1lcy5tb2RpZmljYXRpb24p
IHsKLSAgICAgICAgLy8gRG9uJ3QgdXBkYXRlIG1vcmUgdGhhbiBvbmNlIHBlciBob3VyLgotICAg
ICAgICBpZiAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSB0aW1lcy5tb2RpZmlj
YXRpb24gPCBzdGQ6OmNocm9ubzo6aG91cnMoMSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIC8vIFRoaXMgcmVhbGx5IHVwZGF0ZXMgYm90aCB0aGUgYWNjZXNzIHRpbWUgYW5kIHRo
ZSBtb2RpZmljYXRpb24gdGltZS4KLSAgICB1dGltZXMoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgMCk7Ci19CitGaWxlVGltZXMgZmlsZVRpbWVzKGNvbnN0
IFN0cmluZyYgcGF0aCk7Cit2b2lkIHVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lSWZOZWVkZWQo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKIAogfQogfQogCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCisjZW5kaWYgCiAKLSNlbmRpZiAvLyBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhf
aAorI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Qb3NpeC5oCShyZXZp
c2lvbiAxODU0MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKLSNk
ZWZpbmUgTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4X2gKLQotI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8ZGly
ZW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIFVTRShTT1VQKQotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1zdGF0
aWMgdm9pZCB0cmF2ZXJzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlw
ZSwgY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIERJUiogZGlyID0gb3BlbmRpcihX
ZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAo
IWRpcikKLSAgICAgICAgcmV0dXJuOwotICAgIHN0cnVjdCBkaXJlbnQqIGRwOwotICAgIHdoaWxl
ICgoZHAgPSByZWFkZGlyKGRpcikpKSB7Ci0gICAgICAgIGlmIChkcC0+ZF90eXBlICE9IHR5cGUp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5k
X25hbWU7Ci0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAi
Li4iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmdW5jdGlvbihTdHJpbmcobmFt
ZSkpOwotICAgIH0KLSAgICBjbG9zZWRpcihkaXIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCB0cmF2ZXJzZUNhY2hlRmlsZXMoY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICB0cmF2ZXJzZURpcmVj
dG9yeShjYWNoZVBhdGgsIERUX0RJUiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29uc3QgU3Ry
aW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29y
ZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAg
ICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5jdGlvbiwg
JnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIGZ1
bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19
Ci0KLXN0cnVjdCBGaWxlVGltZXMgewotICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRp
bWVfcG9pbnQgY3JlYXRpb247Ci0gICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9w
b2ludCBtb2RpZmljYXRpb247Ci19OwotCi1pbmxpbmUgRmlsZVRpbWVzIGZpbGVUaW1lcyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0jaWYgSEFWRShTVEFUX0JJUlRIVElNRSkKLSAgICBzdHJ1Y3Qg
c3RhdCBmaWxlSW5mbzsKLSAgICBpZiAoc3RhdChXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCkuZGF0YSgpLCAmZmlsZUluZm8pKQotICAgICAgICByZXR1cm4geyB9OwotICAg
IHJldHVybiB7IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGZpbGVJbmZv
LnN0X2JpcnRodGltZSksIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KGZp
bGVJbmZvLnN0X210aW1lKSB9OwotI2VsaWYgVVNFKFNPVVApCi0gICAgLy8gVGhlcmUncyBubyBz
dF9iaXJ0aHRpbWUgaW4gc29tZSBvcGVyYXRpbmcgc3lzdGVtcyBsaWtlIExpbnV4LCBzbyB3ZSB1
c2UgeGF0dHJzIHRvIHNldC9nZXQgdGhlIGNyZWF0aW9uIHRpbWUuCi0gICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKFdlYkNvcmU6OmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4g
ZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oZmlsZS5nZXQoKSwgInhhdHRy
OjpiaXJ0aHRpbWUsdGltZTo6bW9kaWZpZWQiLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBudWxs
cHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFmaWxlSW5mbykKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICBjb25zdCBjaGFyKiBiaXJ0aHRpbWVTdHJpbmcgPSBnX2ZpbGVfaW5mb19nZXRfYXR0cmli
dXRlX3N0cmluZyhmaWxlSW5mby5nZXQoKSwgInhhdHRyOjpiaXJ0aHRpbWUiKTsKLSAgICBpZiAo
IWJpcnRodGltZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4geyBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChnX2FzY2lpX3N0cnRvdWxsKGJpcnRo
dGltZVN0cmluZywgbnVsbHB0ciwgMTApKSwKLSAgICAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6ZnJvbV90aW1lX3QoZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUlu
Zm8uZ2V0KCksICJ0aW1lOjptb2RpZmllZCIpKSB9OwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lk
IHVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lSWZOZWVkZWQoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIGF1dG8gdGltZXMgPSBmaWxlVGltZXMocGF0aCk7Ci0gICAgaWYgKHRpbWVzLmNyZWF0
aW9uICE9IHRpbWVzLm1vZGlmaWNhdGlvbikgewotICAgICAgICAvLyBEb24ndCB1cGRhdGUgbW9y
ZSB0aGFuIG9uY2UgcGVyIGhvdXIuCi0gICAgICAgIGlmIChzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjpub3coKSAtIHRpbWVzLm1vZGlmaWNhdGlvbiA8IHN0ZDo6Y2hyb25vOjpob3VycygxKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVGhpcyByZWFsbHkgdXBkYXRlcyBi
b3RoIHRoZSBhY2Nlc3MgdGltZSBhbmQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lLgotICAgIHV0aW1l
cyhXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpLCAwKTsKLX0K
LQotfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNlbmRpZiAvLyBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXhfaAotCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxDb2NvYS5tbQkocmV2aXNpb24gMTg1NDEwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCi0jaW5j
bHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAjaW5jbHVk
ZSA8bWFjaC92bV9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAkocmV2aXNpb24gMTg1NDEwKQorKysgU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR011dGV4TG9ja2VyLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNw
cAkocmV2aXNpb24gMTg1NDEwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIK
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRUeXBlLmg+CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBT
dGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0NhYwogICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlz
dGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CiAKICAgICBWZWN0b3I8
U3RyaW5nQ2FwdHVyZT4gaGFzaGVzOwotICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2Fj
aGVQYXRoLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcm
KSB7CisgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNd
KGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJikgewogICAgICAgICBLZXk6
Okhhc2hUeXBlIGhhc2g7CiAgICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goaGFzaFN0cmlu
ZywgaGFzaCkpCiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cAkocmV2aXNpb24gMTg1NDEwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMu
aCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCIKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlSU9DaGFubmVs
LmgiCiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1i
ZXIuaD4KQEAgLTk5LDYgKzk5LDMwIEBAIHN0YXRpYyBTdHJpbmcgbWFrZUJsb2JEaXJlY3RvcnlQ
YXRoKGNvbnMKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1h
a2VWZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwgYmxvYnNEaXJlY3Rv
cnlOYW1lKTsKIH0KIAordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJl
Y29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpPiYgZnVuY3Rpb24pCit7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1Bh
dGgsIFsmcmVjb3Jkc1BhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBE
aXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgeworICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlF
bnRyeVR5cGU6OkRpcmVjdG9yeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5n
IHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jk
c1BhdGgsIHN1YmRpck5hbWUpOworICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25Q
YXRoLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
RGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERpcmVj
dG9yeUVudHJ5VHlwZTo6RmlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCitzdGF0aWMgdm9pZCBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rvcmllcyhjb25zdCBT
dHJpbmcmIHJlY29yZHNQYXRoKQoreworICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRo
LCBbJnJlY29yZHNQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5
VHlwZSB0eXBlKSB7CisgICAgICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RGly
ZWN0b3J5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBMZXQgc3lzdGVtIGZpZ3Vy
ZSBvdXQgaWYgaXQgaXMgcmVhbGx5IGVtcHR5LgorICAgICAgICBXZWJDb3JlOjpkZWxldGVFbXB0
eURpcmVjdG9yeShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgs
IHN1YmRpck5hbWUpKTsKKyAgICB9KTsKK30KKwogU3RvcmFnZTo6U3RvcmFnZShjb25zdCBTdHJp
bmcmIGJhc2VEaXJlY3RvcnlQYXRoKQogICAgIDogbV9iYXNlUGF0aChiYXNlRGlyZWN0b3J5UGF0
aCkKICAgICAsIG1fcmVjb3Jkc1BhdGgobWFrZVJlY29yZHNEaXJlY3RvcnlQYXRoKGJhc2VEaXJl
Y3RvcnlQYXRoKSkKQEAgLTE1MCw3ICsxNzQsNyBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXpl
KCkKICAgICAgICAgYXV0byBib2R5RmlsdGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0Zp
bHRlcj4oKTsKICAgICAgICAgc2l6ZV90IHJlY29yZHNTaXplID0gMDsKICAgICAgICAgdW5zaWdu
ZWQgY291bnQgPSAwOwotICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMocmVjb3Jkc1BhdGgoKSwg
WyZyZWNvcmRGaWx0ZXIsICZib2R5RmlsdGVyLCAmcmVjb3Jkc1NpemUsICZjb3VudF0oY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAg
IHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFsmcmVjb3JkRmlsdGVyLCAmYm9k
eUZpbHRlciwgJnJlY29yZHNTaXplLCAmY291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewogICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9
IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFt
ZSk7CiAKICAgICAgICAgICAgIGJvb2wgaXNCb2R5ID0gZmlsZU5hbWUuZW5kc1dpdGgoYm9keVBv
c3RmaXgpOwpAQCAtNjY0LDcgKzY4OCw3IEBAIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoVHJhdmVy
c2VGbGFncyBmbGEKICAgICAKICAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGZsYWdzLCB0
cmF2ZXJzZUhhbmRsZXJQdHJdIHsKICAgICAgICAgYXV0byYgdHJhdmVyc2VIYW5kbGVyID0gKnRy
YXZlcnNlSGFuZGxlclB0cjsKLSAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKHJlY29yZHNQYXRo
KCksIFt0aGlzLCBmbGFncywgJnRyYXZlcnNlSGFuZGxlcl0oY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jk
c0ZpbGVzKHJlY29yZHNQYXRoKCksIFt0aGlzLCBmbGFncywgJnRyYXZlcnNlSGFuZGxlcl0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAgICAg
ICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0gS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYXV0byByZWNvcmRQYXRoID0g
V2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1l
KTsKQEAgLTcyOSwyMCArNzUzLDE4IEBAIHZvaWQgU3RvcmFnZTo6Y2xlYXIoc3RkOjpjaHJvbm86
OnN5c3RlbV8KIAogICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRTaW5jZVRp
bWUsIGNvbXBsZXRpb25IYW5kbGVyUHRyXSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0
aGlzLT5yZWNvcmRzUGF0aCgpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0
aCwgRFRfRElSLCBbJnJlY29yZHNQYXRoLCBtb2RpZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5n
JiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3ViZGlyUGF0aCA9IFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAg
ICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShzdWJkaXJQYXRoLCBEVF9SRUcsIFsmc3ViZGlyUGF0
aCwgbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHN1YmRpclBhdGgsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRTaW5j
ZVRpbWUgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvIHRpbWVzID0gZmlsZVRpbWVzKGZpbGVQYXRoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzLm1vZGlmaWNhdGlvbiA8IG1vZGlmaWVkU2luY2VU
aW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnkoc3ViZGly
UGF0aCk7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBbbW9kaWZp
ZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uUGF0aCkgeworICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CisgICAgICAgICAgICBp
ZiAobW9kaWZpZWRTaW5jZVRpbWUgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50OjptaW4oKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdGltZXMgPSBmaWxlVGltZXMoZmls
ZVBhdGgpOworICAgICAgICAgICAgICAgIGlmICh0aW1lcy5tb2RpZmljYXRpb24gPCBtb2RpZmll
ZFNpbmNlVGltZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiAgICAgICAgIH0pOwog
CisgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKTsKKwog
ICAgICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZXMgYmxvYnMuCiAgICAgICAgIG1fYmxv
YlN0b3JhZ2Uuc3luY2hyb25pemUoKTsKIApAQCAtODA5LDcgKzgzMSw3IEBAIHZvaWQgU3RvcmFn
ZTo6c2hyaW5rKCkKIAogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsK
ICAgICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7Ci0gICAgICAg
IHRyYXZlcnNlQ2FjaGVGaWxlcyhyZWNvcmRzUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICB0cmF2ZXJzZVJl
Y29yZHNGaWxlcyhyZWNvcmRzUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewogICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxl
bmd0aCgpICE9IEtleTo6aGFzaFN0cmluZ0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CkBAIC04MjksMTEgKzg1MSw3IEBA
IHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAg
ICAgICAgLy8gTGV0IHN5c3RlbSBmaWd1cmUgb3V0IGlmIHRoZXkgYXJlIHJlYWxseSBlbXB0eS4K
LSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIERUX0RJUiwgWyZyZWNvcmRz
UGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7Ci0gICAgICAgICAgICBhdXRvIHBhcnRp
dGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgs
IHN1YmRpck5hbWUpOwotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnko
cGFydGl0aW9uUGF0aCk7Ci0gICAgICAgIH0pOworICAgICAgICBkZWxldGVFbXB0eVJlY29yZHNE
aXJlY3RvcmllcyhyZWNvcmRzUGF0aCk7CiAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFt0aGlzXSB7CiAgICAgICAgICAgICBtX3Nocmlua0luUHJvZ3Jlc3MgPSBmYWxzZTsKQEAg
LTg0NywyMCArODY1LDI3IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogdm9pZCBTdG9yYWdl
OjpkZWxldGVPbGRWZXJzaW9ucygpCiB7Ci0gICAgLy8gRGVsZXRlIFYxIGNhY2hlLgogICAgIGJh
Y2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAgYXV0byBjYWNoZVBh
dGggPSBiYXNlUGF0aCgpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERU
X0RJUiwgWyZjYWNoZVBhdGhdKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSkgewotICAgICAgICAg
ICAgaWYgKHN1YmRpck5hbWUuc3RhcnRzV2l0aCh2ZXJzaW9uRGlyZWN0b3J5UHJlZml4KSkKKyAg
ICAgICAgdHJhdmVyc2VEaXJlY3RvcnkoY2FjaGVQYXRoLCBbJmNhY2hlUGF0aF0oY29uc3QgU3Ry
aW5nJiBzdWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgeworICAgICAgICAgICAg
aWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAg
ICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZwYXJ0aXRpb25Q
YXRoXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlRmlsZShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0
aCwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgV2ViQ29yZTo6ZGVs
ZXRlRW1wdHlEaXJlY3RvcnkocGFydGl0aW9uUGF0aCk7CisgICAgICAgICAgICBpZiAoIXN1YmRp
ck5hbWUuc3RhcnRzV2l0aCh2ZXJzaW9uRGlyZWN0b3J5UHJlZml4KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBhdXRvIHZlcnNpb25TdHJpbmcgPSBzdWJkaXJOYW1lLnN1
YnN0cmluZyhzdHJsZW4odmVyc2lvbkRpcmVjdG9yeVByZWZpeCkpOworICAgICAgICAgICAgYm9v
bCBzdWNjZXNzOworICAgICAgICAgICAgdW5zaWduZWQgZGlyZWN0b3J5VmVyc2lvbiA9IHZlcnNp
b25TdHJpbmcudG9VSW50U3RyaWN0KCZzdWNjZXNzKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZGlyZWN0b3J5VmVy
c2lvbiA+PSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
YXV0byBvbGRWZXJzaW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChj
YWNoZVBhdGgsIHN1YmRpck5hbWUpOworICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3Jh
Z2UsICIoTmV0d29ya1Byb2Nlc3MpIGRlbGV0aW5nIG9sZCBjYWNoZSB2ZXJzaW9uLCBwYXRoICVz
Iiwgb2xkVmVyc2lvblBhdGgudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGRlbGV0ZURp
cmVjdG9yeVJlY3Vyc2l2ZWx5KG9sZFZlcnNpb25QYXRoKTsKICAgICAgICAgfSk7CiAgICAgfSk7
Ci0gICAgLy8gRklYTUU6IERlbGV0ZSBWMiBjYWNoZS4KIH0KIAogfQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuaAkocmV2aXNpb24gMTg1NDEwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDkgQEAgcHJpdmF0ZToKICAgICBCbG9iU3RvcmFnZSBtX2Jsb2JTdG9yYWdlOwogfTsKIAor
Ly8gRklYTUU6IFJlbW92ZSwgdXNlZCBieSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzIG9ubHkuCit2
b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik+Jik7CisK
IH0KIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAx
ODU0MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxODU0MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTksNyArMTE5OSw3IEBA
CiAJCTdDRjQ3RkZGMTcyNzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkZEMTcy
NzZBRTMwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4MDU2
QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tICovOyB9OwogCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vz
c1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGll
bnQuaCAqLzsgfTsKLQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeC5oICovOyB9OworCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
RmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODM0QjI1MEUxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAq
LzsgfTsKIAkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIy
NTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi87IH07CiAJ
CTgzNjAzNDlGMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2MDM0OUQx
QUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CiAJ
CTgzNjAzNEEwMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNjAzNDlFMUFD
QjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgfTsKQEAgLTE4
MDUsNiArMTgwNSw3IEBACiAJCUU0NDM2RUNFMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2Fj
aGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NDM2RUMxMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXkuaCAqLzsgfTsKIAkJRTQ0
MzZFQ0YxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDM2RUMyMUEwQ0ZEQjIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggKi87IH07CiAJCUU0NDM2RUQwMUEwRDA0MEIw
MEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcCAqLzsgfTsKKwkJRTQ2OTdDQ0QxQjI1RUI4RjAwMUIwQTZDIC8q
IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uY3BwICovOyB9OwogCQlFNDdEMUU5ODFCMDY0OUZCMDAyNjc2QTggLyogTmV0
d29ya0NhY2hlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDdEMUU5NjFCMDYyQjY2MDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAg
Ki87IH07CiAJCUU0ODlEMjhBMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODMx
QTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi87IH07CiAJCUU0ODlEMjhC
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZB
IC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi87IH07CkBAIC0zNDM0LDcgKzM0MzUsNyBAQAog
CQk3Q0Y0N0ZGRDE3Mjc2QUUzMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyTWFjLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyog
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MzA0OEFFNTFBQ0E0NURDMDA4MkM4MzIgLyogUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVT
eXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM0QjI1MTAxQTg0MkM4NzAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNjAz
NDlFMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDg0LDYgKzQwODUsNyBAQAogCQlFNDQzNkVD
MTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDQzNkVDMjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAv
KiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNDY5N0NDQzFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RDFFOTYxQjA2MkI2
NjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE5ldHdvcmtDYWNoZUNvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03NTY5LDcgKzc1NzEsOCBAQAogCQkJCUU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3
b3JrQ2FjaGVFbmNvZGVyLmggKi8sCiAJCQkJRTQxM0Y1OUUxQUMxQUY5RDAwMzQ1MzYwIC8qIE5l
dHdvcmtDYWNoZUVudHJ5LmNwcCAqLywKIAkJCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyog
TmV0d29ya0NhY2hlRW50cnkuaCAqLywKLQkJCQk4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyog
TmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggKi8sCisJCQkJODM0QjI1MEUxQTgzMUE4RDAw
Q0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAqLywKKwkJCQlFNDY5N0NDQzFCMjVF
QjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJRTQyRTA2
MEIxQUE3NDQwRDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oICovLAogCQkJCUU0
MkUwNjBEMUFBNzUwRTUwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSAq
LywKIAkJCQlFNDQzNkVDMDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAq
LywKQEAgLTc4NjQsNyArNzg2Nyw3IEBACiAJCQkJRTQ4OUQyOEUxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODlEMjkwMUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDEzRjU5RDFBQzFBREM0MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtUG9zaXguaCBpbiBIZWFkZXJzICovLAorCQkJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDJFMDYxMDFB
QTc1MjNCMDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQzNkVDRTFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05Njc2LDYgKzk2NzksNyBAQAogCQkJCUU0MkUw
NjE0MUFBNzVCNzAwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gaW4gU291cmNl
cyAqLywKIAkJCQlFNDg5RDI4RDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDg5RDI4RjFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDY5N0NDRDFCMjVFQjhG
MDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDEzRjU5RjFBQzFBRjlEMDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTQyRTA2MEYxQUE3NTIzNDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlP
Q2hhbm5lbENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0MzZFQ0QxQTBEMDQwQjAwRUFE
MjA0IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>