<?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>152424</bug_id>
          
          <creation_ts>2015-12-18 06:48:05 -0800</creation_ts>
          <short_desc>Cache redirects as separate entries</short_desc>
          <delta_ts>2015-12-19 05:27:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>WebKit 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>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1150259</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-18 06:48:05 -0800</bug_when>
    <thetext>We are currently caching redirect chains. This has correctness issues and can be inefficient in cases where multiple URLs redirect to the same destination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150279</commentid>
    <comment_count>1</comment_count>
      <attachid>267630</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-18 08:29:17 -0800</bug_when>
    <thetext>Created attachment 267630
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150280</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-18 08:31:27 -0800</bug_when>
    <thetext>Attachment 267630 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:423:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 19 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>1150328</commentid>
    <comment_count>3</comment_count>
      <attachid>267630</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-18 10:38:09 -0800</bug_when>
    <thetext>Comment on attachment 267630
patch

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

r=me one these questions are addressed.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:185
&gt; -    if (NetworkCache::singleton().isEnabled())
&gt; +    if (canUseCache(request))

Did you change all uses of NetworkCache::singleton().isEnabled to canUseCache?  This seems like a very important change that we should&apos;ve done long ago.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:-336
&gt; -            // Make sure we don&apos;t keep a stale entry in the cache.

Why don&apos;t we need to remove any cache entries here any more?

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:402
&gt; +#if ENABLE(NETWORK_CACHE)

You might need an #else UNUSED_PARAM(request);
And maybe it should be called something like originalRequest.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:531
&gt; +void NetworkResourceLoader::dispatchWillSendRequestForCacheEntry(std::unique_ptr&lt;NetworkCache::Entry&gt; entry)

This is only called from one place and might not need its own function unless you plan to use it from other places in the future.

&gt; LayoutTests/http/tests/cache/disk-cache/disk-cache-redirect-expected.txt:10
&gt; +response source: Disk cache

How is the first response from the Disk cache?

&gt; LayoutTests/http/tests/cache/disk-cache/disk-cache-redirect.html:17
&gt; +  { responseHeaders: {&apos;Cache-control&apos;: &apos;max-age=0&apos; } },
&gt; +  { responseHeaders: {&apos;Cache-control&apos;: &apos;max-age=100&apos; } },

If I&apos;m correct, the first cache entry expires immediately, and the second cache entry does not expire immediately, so we test making a request for a cache entry that has expired.  Why don&apos;t we make another request after the second one to test making a request for a cache entry that has not expired?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150331</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-18 10:47:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Did you change all uses of NetworkCache::singleton().isEnabled to
&gt; canUseCache?  This seems like a very important change that we should&apos;ve done
&gt; long ago.

Yeah, everywhere in NetworkResourceLoader.

&gt; Why don&apos;t we need to remove any cache entries here any more?

I don&apos;t think so. That case was there for expired redirect chains. Now redirects expire like other cache entries.

&gt; This is only called from one place and might not need its own function
&gt; unless you plan to use it from other places in the future.

It looked nicer like this in the call site.

&gt; &gt; LayoutTests/http/tests/cache/disk-cache/disk-cache-redirect-expected.txt:10
&gt; &gt; +response source: Disk cache
&gt; 
&gt; How is the first response from the Disk cache?

301 Permanent Redirect is cacheable by default unless other headers say otherwise. 302, 303 and 303 are not cached by default.
&gt; 
&gt; &gt; LayoutTests/http/tests/cache/disk-cache/disk-cache-redirect.html:17
&gt; &gt; +  { responseHeaders: {&apos;Cache-control&apos;: &apos;max-age=0&apos; } },
&gt; &gt; +  { responseHeaders: {&apos;Cache-control&apos;: &apos;max-age=100&apos; } },
&gt; 
&gt; If I&apos;m correct, the first cache entry expires immediately, and the second
&gt; cache entry does not expire immediately, so we test making a request for a
&gt; cache entry that has expired.  Why don&apos;t we make another request after the
&gt; second one to test making a request for a cache entry that has not expired?

Thase are independent test cases (or actually used to generate individual test cases by generating all header permutations). Each test is loaded multiple times to see if it gets faced. You see the actual cases in the test output (the first warmup load doesn&apos;t generate output).

Thanks for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150528</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-19 05:27:32 -0800</bug_when>
    <thetext>https://trac.webkit.org/r194313</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267630</attachid>
            <date>2015-12-18 08:29:17 -0800</date>
            <delta_ts>2015-12-18 10:38:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>redirect-cache-6.patch</filename>
            <type>text/plain</type>
            <size>47872</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDI2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTEyLTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSByZWRpcmVjdHMgYXMg
c2VwYXJhdGUgZW50cmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUyNDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtcmVk
aXJlY3QuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisKIDIwMTUtMTItMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIE1vZGVybiBJREI6IFJlZmFjdG9yIG9wZW4vZGVsZXRlIHJlcXVlc3RzIHRvIGV4
aXN0IGluIHRoZSBzYW1lIHF1ZXVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDE5NDI2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2UgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVz
b3VyY2VSZXF1ZXN0PiBhZG9wdChzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
cXVlc3REYXRhPik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8UmVzb3VyY2VSZXF1ZXN0PiBhZG9wdChzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPik7CiAKICAgICAgICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEg
c3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGNvcHlEYXRhKCkgY29uc3Q7
CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVxdWVzdERhdGE+IGNvcHlEYXRhKCkgY29uc3Q7CiAKICAgICAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTQyNjcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDUgQEAKKzIwMTUt
MTItMTggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIENhY2hl
IHJlZGlyZWN0cyBhcyBzZXBhcmF0ZSBlbnRyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhcmUgY3VycmVudGx5IGNhY2hpbmcgcmVkaXJlY3Qg
Y2hhaW5zLiBUaGlzIGhhcyBjb3JyZWN0bmVzcyBpc3N1ZXMgYW5kIGNhbiBiZSBpbmVmZmljaWVu
dCBpbiBjYXNlcworICAgICAgICB3aGVyZSBtdWx0aXBsZSBVUkxzIHJlZGlyZWN0IHRvIHRoZSBz
YW1lIGRlc3RpbmF0aW9uLgorCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2ggd2Ugd3JpdGUgYSBj
YWNoZSBlbnRyeSBmb3IgZWFjaCByZWRpcmVjdCBpbmRpdmlkdWFsbHkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y3Vy
cmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y2xlYXJDdXJyZW50
UmVxdWVzdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaDoK
KworICAgICAgICAgICAgQWRkIG9yaWdpbmFsIHJlcXVlc3QgYXMgYSBwYXJhbWV0ZXIgZm9yIHdp
bGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNhblVzZUNhY2hlKToKKworICAgICAgICAgICAgRmFjdG9yIHRvIGEg
ZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjppc1N5
bmNocm9ub3VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFy
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDYWNo
ZUVudHJ5KToKKworICAgICAgICAgICAgRmFjdG9yIHRvIGEgZnVuY3Rpb24uCisgICAgICAgICAg
ICBDYWxsIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0Rm9yQ2FjaGVFbnRyeSBmb3IgY2FjaGVkIHJl
ZGlyZWN0cy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0
TmV0d29ya0xvYWQpOgorCisgICAgICAgICAgICBNYWtlIHRoaXMgdGFrZSByZXF1ZXN0IGFzIGFy
Z3VtZW50IGluc3RlYWQgb2YgYWx3YXlzIGxvYWRpbmcgb3JpZ2luYWxSZXF1ZXN0KCkuCisKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisKKyAgICAg
ICAgICAgIFJlbW92ZSByZWRpcmVjdCBjaGFpbiBjb2RlLgorICAgICAgICAgICAgU3RvcmUgY2Fj
aGUgZW50cnkgZm9yIGN1cnJlbnQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCByZXF1
ZXN0LgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbExv
YWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QpOgorCisgICAgICAgICAgICBXcml0ZSBjYWNoZSBlbnRyeSBmb3Ig
cmVkaXJlY3QuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250
aW51ZVdpbGxTZW5kUmVxdWVzdCk6CisKKyAgICAgICAgICAgIElmIHdlIGFyZSBwbGF5aW5nIGJh
Y2sgY2FjaGVkIHJlZGlyZWN0IGNvbnRpbnVlIHdpdGggYW5vdGhlciBjYWNoZSBsb29rdXAuCisK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hl
RW50cnkpOgorCisgICAgICAgICAgICBObyBuZWVkIHRvIHN5bnRoZXNpemUgZmFrZSB3aWxsU2Vu
ZFJlcXVlc3QgYW55bW9yZS4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnZhbGlkYXRlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZUVudHJ5KToKKworICAgICAg
ICAgICAgUm91dGUgdmlhIHdlYiBwcm9jZXNzIHdpbGxTZW5kUmVxdWVzdCBzbyBjYWNoZWQgcmVk
aXJlY3RzIGxvb2tzIGV4YWN0bHkgbGlrZSBuZXR3b3JrIG9uZXMuCisKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjptYWtlVXNlRGVjaXNpb24pOgorCisgICAgICAgICAgICBJZ25vcmUgdmFs
aWRhdGlvbiBoZWFkZXJzIGZvciBjYWNoZWQgcmVkaXJlY3RzLgorCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6bWFrZVJldHJpZXZlRGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6Om1ha2VTdG9yZURlY2lzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpzdG9yZSk6CisKKyAgICAgICAgICAgIFJlbmFtZSBvcmlnaW5hbFJlcXVlc3QgLT4g
cmVxdWVzdCBzaW5jZSBpdCBpcyBub3QgcmVhbGx5IHRoZSBvcmlnaW5hbCByZXF1ZXN0IGFueW1v
cmUgaW4gYWxsIGNhc2VzLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OnN0b3JlUmVkaXJlY3QpOgorCisgICAgICAgICAgICBTdG9yZWQgcmVkaXJlY3RzIGluY2x1ZGUg
dGhlIG5ldHdvcmsgbGF5ZXIgZ2VuZXJhdGVkIFJlc291cmNlUmVxdWVzdCBpbnN0ZWFkIG9mIGJv
ZHkgZGF0YS4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjp1cGRhdGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6RW50cnkpOgorCisgICAgICAgICAgICBOZXcg
Y29uc3RydWN0b3IgZm9yIG1ha2luZyByZWRpcmVjdCBlbnRyaWVzLgorCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorCisg
ICAgICAgICAgICBFbmNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbnRyeTo6dmFyeWluZ1JlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbnRyeTo6cmVkaXJlY3RSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OlNwZWN1bGF0aXZlTG9hZDo6flNwZWN1bGF0aXZlTG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkOjp3aWxsU2VuZFJlZGly
ZWN0ZWRSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTcGVjdWxhdGl2ZUxvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpj
YWNoZWRFbnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleSk6CisKIDIwMTUtMTItMTggIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQg
dHlwZXMgZm9yIERvd25sb2FkSUQgYW5kIFRhc2tJZGVudGlmaWVyCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCShyZXZpc2lvbiAxOTQyNjQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw4ICsxNDksOSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxs
U2VuZFJlZGlyZWN0CiAgICAgQVNTRVJUKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKTsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgYXV0byBvbGRSZXF1ZXN0ID0gbV9j
dXJyZW50UmVxdWVzdDsKICAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBtX2Ns
aWVudC53aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2Up
OworICAgIG1fY2xpZW50LndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3Qob2xkUmVxdWVzdCwgcmVx
dWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQpJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCShyZXZp
c2lvbiAxOTQyNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9h
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAorICAgIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRSZXF1ZXN0OyB9CiAgICAgdm9pZCBjbGVhckN1cnJlbnRSZXF1ZXN0KCkgeyBtX2N1
cnJlbnRSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7IH0KIAogICAgIHZvaWQg
Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
Q2xpZW50LmgJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFz
eW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZWRpcmVjdFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpID0gMDsKICAgICBlbnVtIGNsYXNzIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlIHsgTm8sIFllcyB9OwogICAgIHZpcnR1YWwgU2hvdWxkQ29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2UgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDYgKzEwNywxOSBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3Vy
Y2VMCiAgICAgQVNTRVJUKCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0
YS0+ZGVsYXllZFJlcGx5KTsKIH0KIAorI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorYm9vbCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhblVzZUNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkgY29uc3QKK3sKKyAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcmVxdWVzdC51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aXNT
eW5jaHJvbm91cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuICEhbV9zeW5jaHJvbm91c0xvYWREYXRh
OwpAQCAtMTIwLDIzICsxMzMsMzYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0
KCkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgaWYg
KCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpIHx8IHNlc3Npb25JRCgpLmlz
RXBoZW1lcmFsKCkgfHwgIW9yaWdpbmFsUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSkgewotICAgICAgICBzdGFydE5ldHdvcmtMb2FkKCk7CisgICAgaWYgKGNhblVzZUNh
Y2hlKG9yaWdpbmFsUmVxdWVzdCgpKSkgeworICAgICAgICByZXRyaWV2ZUNhY2hlRW50cnkob3Jp
Z2luYWxSZXF1ZXN0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCisKKyAgICBz
dGFydE5ldHdvcmtMb2FkKG9yaWdpbmFsUmVxdWVzdCgpKTsKK30KKworI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRy
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGNhblVzZUNh
Y2hlKHJlcXVlc3QpKTsKIAogICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRl
cih0aGlzKTsKLSAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFs
UmVxdWVzdCgpLCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFt
ZUlEIH0sIFtsb2FkZXJdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBlbnRy
eSkgeworICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmlldmUocmVxdWVzdCwgeyBt
X3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCB9LCBbbG9hZGVy
LCByZXF1ZXN0XShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsK
ICAgICAgICAgaWYgKGxvYWRlci0+aGFzT25lUmVmKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBs
b2FkZXIgaGFzIGJlZW4gYWJvcnRlZCBhbmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5IHRoaXMgbGFt
YmRhLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghZW50cnkp
IHsKLSAgICAgICAgICAgIGxvYWRlci0+c3RhcnROZXR3b3JrTG9hZCgpOworICAgICAgICAgICAg
bG9hZGVyLT5zdGFydE5ldHdvcmtMb2FkKHJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChlbnRyeS0+cmVkaXJlY3RSZXF1ZXN0KCkpIHsKKyAgICAg
ICAgICAgIGxvYWRlci0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZUVudHJ5KFdURjo6
bW92ZShlbnRyeSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlm
IChsb2FkZXItPm1fcGFyYW1ldGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbyAmJiAhZW50cnktPnJl
c3BvbnNlKCkuY29udGFpbnNDZXJ0aWZpY2F0ZUluZm8oKSkgewotICAgICAgICAgICAgbG9hZGVy
LT5zdGFydE5ldHdvcmtMb2FkKCk7CisgICAgICAgICAgICBsb2FkZXItPnN0YXJ0TmV0d29ya0xv
YWQocmVxdWVzdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGVudHJ5LT5uZWVkc1ZhbGlkYXRpb24oKSkgewpAQCAtMTQ1LDEyICsxNzEsMTAgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKICAgICAgICAgfQogICAgICAgICBsb2FkZXIt
PmRpZFJldHJpZXZlQ2FjaGVFbnRyeShXVEY6Om1vdmUoZW50cnkpKTsKICAgICB9KTsKLSNlbHNl
Ci0gICAgc3RhcnROZXR3b3JrTG9hZCgpOwotI2VuZGlmCiB9CisjZW5kaWYKIAotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQoY29uc3QgT3B0aW9uYWw8UmVzb3Vy
Y2VSZXF1ZXN0PiYgdXBkYXRlZFJlcXVlc3QpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
c3RhcnROZXR3b3JrTG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAg
Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKCk7CiAKQEAgLTE1OCwxNCArMTgyLDEzIEBAIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmsKICAgICAgICAgbV9idWZmZXJlZERh
dGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
Ci0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCisgICAgaWYg
KGNhblVzZUNhY2hlKHJlcXVlc3QpKQogICAgICAgICBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKICNlbmRpZgogCiAgICAgTmV0d29ya0xvYWRQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMgPSBtX3BhcmFtZXRlcnM7CiAgICAgcGFyYW1ldGVycy5kZWZlcnNMb2Fk
aW5nID0gbV9kZWZlcnNMb2FkaW5nOwotICAgIGlmICh1cGRhdGVkUmVxdWVzdCkKLSAgICAgICAg
cGFyYW1ldGVycy5yZXF1ZXN0ID0gdXBkYXRlZFJlcXVlc3QudmFsdWUoKTsKKyAgICBwYXJhbWV0
ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwogICAgIG1fbmV0d29ya0xvYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE5ldHdvcmtMb2FkPigqdGhpcywgcGFyYW1ldGVycyk7CiB9CiAKQEAgLTIxMiwxNSArMjM1
LDE0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGlmIChtX25ldHdvcmtMb2FkICYmICFtX2RpZENvbnZl
cnRUb0Rvd25sb2FkKSB7Ci0gICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNlbCgpOwotCiAjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLmlzRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChjYW5Vc2VDYWNoZShtX25ldHdvcmtMb2Fk
LT5jdXJyZW50UmVxdWVzdCgpKSkgewogICAgICAgICAgICAgLy8gV2UgbWlnaHQgYWxyZWFkeSBo
YXZlIHVzZWQgZGF0YSBmcm9tIHRoaXMgaW5jb21wbGV0ZSBsb2FkLiBFbnN1cmUgb2xkZXIgdmVy
c2lvbnMgZG9uJ3QgcmVtYWluIGluIHRoZSBjYWNoZSBhZnRlciBjYW5jZWwuCiAgICAgICAgICAg
ICBpZiAoIW1fcmVzcG9uc2UuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgTmV0d29ya0NhY2hl
OjpzaW5nbGV0b24oKS5yZW1vdmUob3JpZ2luYWxSZXF1ZXN0KCkpOworICAgICAgICAgICAgICAg
IE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRS
ZXF1ZXN0KCkpOwogICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2Fu
Y2VsKCk7CiAgICAgfQogCiAgICAgY2xlYW51cCgpOwpAQCAtMzAyLDcgKzMyNCw3IEBAIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnUKIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogewogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5h
YmxlZCgpKSB7CisgICAgaWYgKGNhblVzZUNhY2hlKG1fbmV0d29ya0xvYWQtPmN1cnJlbnRSZXF1
ZXN0KCkpKSB7CiAgICAgICAgIGlmIChtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSB7CiAgICAg
ICAgICAgICAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgICAgICBBU1NFUlQobV9yZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCk7CkBAIC0zMTAsMjEgKzMzMiwxMyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hCiAgICAgICAgICAgICBkaWRSZXRyaWV2
ZUNhY2hlRW50cnkoV1RGOjptb3ZlKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBib29sIGFsbG93U3RhbGUgPSBvcmln
aW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID49IFJldHVybkNhY2hlRGF0YUVsc2VMb2FkOwot
ICAgICAgICBib29sIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gbV9yZXNwb25zZS5pc0hUVFAoKSAm
JiByZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIGFs
bG93U3RhbGUgPyBSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbiA6IERvTm90UmV1c2VFeHBpcmVkUmVk
aXJlY3Rpb24pOwotICAgICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVj
dENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2Fj
aGVkUmVkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBjYWNoZSB0
aGUgYWN0dWFsIHJlZGlyZWN0cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PwotICAgICAgICAg
ICAgYXV0byBub3cgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKLSAgICAgICAg
ICAgIGF1dG8gcmVzcG9uc2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgY29tcHV0ZUZyZXNobmVzc0xp
ZmV0aW1lRm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gY29tcHV0ZUN1cnJlbnRBZ2Uo
bV9yZXNwb25zZSwgbm93KTsKLSAgICAgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gcmVz
cG9uc2VFbmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9mVmFs
aWRpdHk7Ci0gICAgICAgIH0KIAogICAgICAgICBib29sIGlzUHJpdmF0ZVNlc3Npb24gPSBzZXNz
aW9uSUQoKS5pc0VwaGVtZXJhbCgpOwotICAgICAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNo
ZSAmJiBoYXNDYWNoZWFibGVSZWRpcmVjdCAmJiAhaXNQcml2YXRlU2Vzc2lvbikgeworICAgICAg
ICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZSAmJiBtX3Jlc3BvbnNlLmlzSFRUUCgpICYmICFp
c1ByaXZhdGVTZXNzaW9uKSB7CiAgICAgICAgICAgICAvLyBLZWVwIHRoZSBjb25uZWN0aW9uIGFs
aXZlLgogICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBj
b25uZWN0aW9uKCZjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkpOwogICAgICAgICAgICAgUmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgICAgICAgICAgTmV0d29y
a0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwg
V1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShO
ZXR3b3JrQ2FjaGU6Ok1hcHBlZEJvZHkmIG1hcHBlZEJvZHkpIHsKKyAgICAgICAgICAgIE5ldHdv
cmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmUobV9uZXR3b3JrTG9hZC0+Y3VycmVudFJlcXVlc3Qo
KSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVy
LCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1hcHBlZEJvZHkmIG1hcHBlZEJvZHkpIHsKICNp
ZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAgICAgICAgICAgICAgIGlmIChtYXBwZWRC
b2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zMzIsOSArMzQ2LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpZEZpbmlzaExvYQogICAgICAgICAgICAgICAgIGxvYWRlci0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEaWRDYWNoZVJlc291cmNlKGxvYWRlci0+b3JpZ2luYWxS
ZXF1ZXN0KCksIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGxvYWRlci0+c2Vz
c2lvbklEKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
IWhhc0NhY2hlYWJsZVJlZGlyZWN0KSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9u
J3Qga2VlcCBhIHN0YWxlIGVudHJ5IGluIHRoZSBjYWNoZS4KLSAgICAgICAgICAgIE5ldHdvcmtD
YWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKG9yaWdpbmFsUmVxdWVzdCgpKTsKICAgICAgICAgfQog
ICAgIH0KICNlbmRpZgpAQCAtMzcxLDE3ICszODIsMTMgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZEZhaWxMb2FkaQogICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlZGlyZWN0UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICB1cGRhdGVSZWRpcmVjdENo
YWluU3RhdHVzKG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLCByZWRpcmVjdFJlc3BvbnNlKTsK
LSNlbmRpZgotCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgewotICAgICAgICBSZXNvdXJjZVJl
cXVlc3Qgb3ZlcnJpZGVuUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIFJlc291cmNlUmVxdWVz
dCBvdmVycmlkZW5SZXF1ZXN0ID0gcmVkaXJlY3RSZXF1ZXN0OwogICAgICAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBl
dmVuIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCiAgICAgICAgIC8vIFRoaXMgaW5jbHVkZXMg
YXQgbGVhc3QgdXBkYXRpbmcgaG9zdCByZWNvcmRzLCBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50
IHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBoZXJlLgotICAgICAgICBp
ZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSwg
cmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwob3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIHJlZGlyZWN0UmVxdWVzdC51cmwoKSkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX3N5bmNocm9ub3VzTG9hZERhdGEtPmVycm9yLmlzTnVsbCgpKTsK
ICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IgPSBTeW5jaHJvbm91c0xv
YWRlckNsaWVudDo6cGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7CiAgICAgICAgICAgICBtX25l
dHdvcmtMb2FkLT5jbGVhckN1cnJlbnRSZXF1ZXN0KCk7CkBAIC0zOTAsMTEgKzM5NywyOCBAQCB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZWRpCiAgICAgICAgIGNvbnRpbnVl
V2lsbFNlbmRSZXF1ZXN0KG92ZXJyaWRlblJlcXVlc3QpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6
OldpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSk7CisgICAgc2VuZEFi
b3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1
ZXN0KHJlZGlyZWN0UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpOworCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCisgICAgaWYgKGNhblVzZUNhY2hlKHJlcXVlc3QpKQorICAgICAgICBOZXR3
b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlUmVkaXJlY3QocmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSwgcmVkaXJlY3RSZXF1ZXN0KTsKKyNlbmRpZgogfQotICAgIAorCiB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBuZXdSZXF1ZXN0KQogeworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAgIGlmICht
X2lzV2FpdGluZ0NvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0Rm9yQ2FjaGVkUmVkaXJlY3QpIHsKKyAg
ICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgUmV0cmlldmluZyBjYWNo
ZWQgcmVkaXJlY3QiKTsKKyAgICAgICAgaWYgKGNhblVzZUNhY2hlKG5ld1JlcXVlc3QpKQorICAg
ICAgICAgICAgcmV0cmlldmVDYWNoZUVudHJ5KG5ld1JlcXVlc3QpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdGFydE5ldHdvcmtMb2FkKG5ld1JlcXVlc3QpOworCisgICAgICAgIG1faXNX
YWl0aW5nQ29udGludWVXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZWRSZWRpcmVjdCA9IGZhbHNlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgbV9uZXR3b3JrTG9hZC0+Y29udGlu
dWVXaWxsU2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7CiB9CiAKQEAgLTQ2MywxNCArNDg3LDYgQEAg
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQwogICAgICAgICBtX3N5bmNo
cm9ub3VzTG9hZERhdGEtPnJlc3BvbnNlID0gZW50cnktPnJlc3BvbnNlKCk7CiAgICAgICAgIHNl
bmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIGVudHJ5
LT5idWZmZXIoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5yZXNwb25zZSgp
LnVybCgpICE9IG9yaWdpbmFsUmVxdWVzdCgpLnVybCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIGEgY2FjaGVkIHJlZGlyZWN0LiBTeW50aGVzaXplIGEgbWluaW1hbCByZWRpcmVjdCBzbyB3
ZSBnZXQgdGhpbmdzIGxpa2UgcmVmZXJlciBoZWFkZXIgcmlnaHQuCi0gICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGNhY2hlIHRoZSBhY3R1YWwgcmVkaXJlY3RzLgotICAgICAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IHN5bnRoZXRpY1JlZGlyZWN0UmVxdWVzdChlbnRyeS0+cmVzcG9uc2Uo
KS51cmwoKSk7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXRpY1JlZGlyZWN0
UmVzcG9uc2Uob3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIHsgfSwgMCwgeyB9KTsKLSAgICAgICAg
ICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6Oldp
bGxTZW5kUmVxdWVzdChzeW50aGV0aWNSZWRpcmVjdFJlcXVlc3QsIHN5bnRoZXRpY1JlZGlyZWN0
UmVzcG9uc2UpKTsKLSAgICAgICAgfQotCiAgICAgICAgIGJvb2wgbmVlZHNDb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZU1lc3NhZ2UgPSBvcmlnaW5hbFJlcXVlc3QoKS5yZXF1ZXN0ZXIoKSA9PSBS
ZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKICAgICAgICAgc2VuZEFib3J0aW5nT25G
YWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNlKGVu
dHJ5LT5yZXNwb25zZSgpLCBuZWVkc0NvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlTWVzc2FnZSkp
OwogCkBAIC01MTEsNiArNTI3LDE1IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxp
ZGF0ZUNhY2gKIAogICAgIHN0YXJ0TmV0d29ya0xvYWQocmV2YWxpZGF0aW9uUmVxdWVzdCk7CiB9
CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdEZv
ckNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQor
eworICAgIEFTU0VSVChlbnRyeS0+cmVkaXJlY3RSZXF1ZXN0KCkpOworICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIEV4ZWN1dGluZyBjYWNoZWQgcmVkaXJlY3QiKTsKKwor
ICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6Oldp
bGxTZW5kUmVxdWVzdCgqZW50cnktPnJlZGlyZWN0UmVxdWVzdCgpLCBlbnRyeS0+cmVzcG9uc2Uo
KSkpOworICAgIG1faXNXYWl0aW5nQ29udGludWVXaWxsU2VuZFJlcXVlc3RGb3JDYWNoZWRSZWRp
cmVjdCA9IHRydWU7Cit9CiAjZW5kaWYKIAogSVBDOjpDb25uZWN0aW9uKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZp
c2lvbiAxOTQyNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTAgQEAgcHVibGljOgog
CiAgICAgTmV0d29ya0xvYWQqIG5ldHdvcmtMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3Jr
TG9hZC5nZXQoKTsgfQogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgYm9vbCBjYW5V
c2VDYWNoZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyNlbmRpZgor
CiAgICAgdm9pZCBzdGFydCgpOwogICAgIHZvaWQgYWJvcnQoKTsKIApAQCAtOTcsNyArMTAxLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3Qo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgU2hvdWxkQ29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZl
cihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0
YUxlbmd0aCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91
YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwpAQCAtMTEyLDExICsxMTYsMTMgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7IH0KIAogI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQorICAgIHZvaWQgcmV0cmlldmVDYWNoZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgZGlkUmV0cmlldmVDYWNoZUVudHJ5KHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik7CiAgICAgdm9pZCB2YWxpZGF0ZUNhY2hlRW50
cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKKyAgICB2b2lkIGRpc3Bh
dGNoV2lsbFNlbmRSZXF1ZXN0Rm9yQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlOjpFbnRyeT4pOwogI2VuZGlmCiAKLSAgICB2b2lkIHN0YXJ0TmV0d29ya0xvYWQoY29uc3Qg
T3B0aW9uYWw8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0PiYgdXBkYXRlZFJlcXVlc3QgPSB7IH0p
OworICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAKICAgICB2b2lk
IGNsZWFudXAoKTsKQEAgLTE1NSw4ICsxNjEsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYnVmZmVyZWRE
YXRhRm9yQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IG1f
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb247Ci0KLSAgICBXZWJDb3JlOjpSZWRpcmVjdENoYWluQ2Fj
aGVTdGF0dXMgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM7CisgICAgYm9vbCBtX2lzV2FpdGlu
Z0NvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0Rm9yQ2FjaGVkUmVkaXJlY3QgeyBmYWxzZSB9OwogI2Vu
ZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgVXNlRGVjaXNpb24gbWFrZVVzZURlY2lzaW9uKGNv
bnN0CiB7CiAgICAgLy8gVGhlIHJlcXVlc3QgaXMgY29uZGl0aW9uYWwgc28gd2UgZm9yY2UgcmV2
YWxpZGF0aW9uIGZyb20gdGhlIG5ldHdvcmsuIFdlIG1lcmVseSBjaGVjayB0aGUgZGlzayBjYWNo
ZQogICAgIC8vIHNvIHdlIGNhbiB1cGRhdGUgdGhlIGNhY2hlIGVudHJ5LgotICAgIGlmIChyZXF1
ZXN0LmlzQ29uZGl0aW9uYWwoKSkKKyAgICBpZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkgJiYg
IWVudHJ5LnJlZGlyZWN0UmVxdWVzdCgpKQogICAgICAgICByZXR1cm4gVXNlRGVjaXNpb246OlZh
bGlkYXRlOwogCiAgICAgaWYgKCF2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoZW50cnkudmFy
eWluZ1JlcXVlc3RIZWFkZXJzKCksIHJlcXVlc3QpKQpAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRp
YyBVc2VEZWNpc2lvbiBtYWtlVXNlRGVjaXNpb24oY29uc3QKICAgICBpZiAoIWVudHJ5LnJlc3Bv
bnNlKCkuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKSkKICAgICAgICAgcmV0dXJuIFVzZURlY2lz
aW9uOjpOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkczsKIAotICAgIHJldHVybiBVc2VEZWNp
c2lvbjo6VmFsaWRhdGU7CisgICAgcmV0dXJuIGVudHJ5LnJlZGlyZWN0UmVxdWVzdCgpID8gVXNl
RGVjaXNpb246Ok5vRHVlVG9FeHBpcmVkUmVkaXJlY3QgOiBVc2VEZWNpc2lvbjo6VmFsaWRhdGU7
CiB9CiAKIHN0YXRpYyBSZXRyaWV2ZURlY2lzaW9uIG1ha2VSZXRyaWV2ZURlY2lzaW9uKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTM0MywzNSArMzQzLDM1IEBA
IHN0YXRpYyBTdG9yZURlY2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMKICAgICByZXR1cm4gU3Rv
cmVEZWNpc2lvbjo6WWVzOwogfQogCi12b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgR2xvYmFsRnJhbWVJRCYg
ZnJhbWVJRCwgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4gY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbmFsUmVxdWVz
dC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpOworICAgIEFTU0VSVChyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSk7CiAKLSAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2aW5nICVzIHByaW9yaXR5ICVkIiwgb3JpZ2luYWxSZXF1
ZXN0LnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9yaWdp
bmFsUmVxdWVzdC5wcmlvcml0eSgpKSk7CisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3Jr
UHJvY2VzcykgcmV0cmlldmluZyAlcyBwcmlvcml0eSAlZCIsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlvcml0eSgpKSk7
CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJl
dHJpZXZhbFJlcXVlc3QoZnJhbWVJRC5maXJzdCk7CiAKLSAgICBLZXkgc3RvcmFnZUtleSA9IG1h
a2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOworICAgIEtleSBzdG9yYWdlS2V5ID0gbWFrZUNh
Y2hlS2V5KHJlcXVlc3QpOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVf
UkVWQUxJREFUSU9OKQogICAgIGlmIChtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXIpCi0gICAgICAg
IG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmVnaXN0ZXJMb2FkKGZyYW1lSUQsIG9yaWdpbmFs
UmVxdWVzdCwgc3RvcmFnZUtleSk7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+
cmVnaXN0ZXJMb2FkKGZyYW1lSUQsIHJlcXVlc3QsIHN0b3JhZ2VLZXkpOwogI2VuZGlmCiAKLSAg
ICBhdXRvIHJldHJpZXZlRGVjaXNpb24gPSBtYWtlUmV0cmlldmVEZWNpc2lvbihvcmlnaW5hbFJl
cXVlc3QpOworICAgIGF1dG8gcmV0cmlldmVEZWNpc2lvbiA9IG1ha2VSZXRyaWV2ZURlY2lzaW9u
KHJlcXVlc3QpOwogICAgIGlmIChyZXRyaWV2ZURlY2lzaW9uICE9IFJldHJpZXZlRGVjaXNpb246
OlllcykgewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0
aWNzLT5yZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdChmcmFtZUlELmZpcnN0LCBzdG9yYWdl
S2V5LCBvcmlnaW5hbFJlcXVlc3QsIHJldHJpZXZlRGVjaXNpb24pOworICAgICAgICAgICAgbV9z
dGF0aXN0aWNzLT5yZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdChmcmFtZUlELmZpcnN0LCBz
dG9yYWdlS2V5LCByZXF1ZXN0LCByZXRyaWV2ZURlY2lzaW9uKTsKIAogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBpZiAobV9zcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyICYmIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmV0cmlldmUo
ZnJhbWVJRCwgc3RvcmFnZUtleSwgW29yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXJd
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpIHsKLSAgICAgICAgaWYgKGVudHJ5ICYmIHZl
cmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVycyhlbnRyeS0+dmFyeWluZ1JlcXVlc3RIZWFkZXJzKCks
IG9yaWdpbmFsUmVxdWVzdCkpCisgICAgaWYgKG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciAmJiBt
X3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnJldHJpZXZlKGZyYW1lSUQsIHN0b3JhZ2VLZXksIFty
ZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlcl0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkg
eworICAgICAgICBpZiAoZW50cnkgJiYgdmVyaWZ5VmFyeWluZ1JlcXVlc3RIZWFkZXJzKGVudHJ5
LT52YXJ5aW5nUmVxdWVzdEhlYWRlcnMoKSwgcmVxdWVzdCkpCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CkBAIC0zODAsMTQgKzM4MCwxNCBAQCB2b2lkIENh
Y2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAjZW5kaWYKIAogICAgIGF1dG8gc3Rh
cnRUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7Ci0gICAgYXV0byBwcmlv
cml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7
CisgICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXF1ZXN0LnByaW9y
aXR5KCkpOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwg
W3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3Rv
cmFnZUtleSwgZnJhbWVJRF0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4gcmVjb3Jk
KSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMs
IHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1l
SURdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgewogICAgICAgICBp
ZiAoIXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJv
Y2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIAogICAgICAgICAgICAgaWYgKG1fc3RhdGlz
dGljcykKLSAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbEZhaWx1
cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJz
dCwgc3RvcmFnZUtleSwgcmVxdWVzdCk7CiAKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk3LDcgKzM5Nyw3IEBA
IHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc28KIAogICAgICAgICBhdXRv
IGVudHJ5ID0gRW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQoKnJlY29yZCk7CiAKLSAgICAgICAg
YXV0byB1c2VEZWNpc2lvbiA9IGVudHJ5ID8gbWFrZVVzZURlY2lzaW9uKCplbnRyeSwgb3JpZ2lu
YWxSZXF1ZXN0KSA6IFVzZURlY2lzaW9uOjpOb0R1ZVRvRGVjb2RlRmFpbHVyZTsKKyAgICAgICAg
YXV0byB1c2VEZWNpc2lvbiA9IGVudHJ5ID8gbWFrZVVzZURlY2lzaW9uKCplbnRyeSwgcmVxdWVz
dCkgOiBVc2VEZWNpc2lvbjo6Tm9EdWVUb0RlY29kZUZhaWx1cmU7CiAgICAgICAgIHN3aXRjaCAo
dXNlRGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBVc2VEZWNpc2lvbjo6VXNlOgogICAgICAgICAg
ICAgYnJlYWs7CkBAIC00MTAsMzQgKzQxMCwyNyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25z
dCBXZWJDb3JlOjpSZXNvCiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNl
ZE1TID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkg
LSBzdGFydFRpbWUpLmNvdW50KCkpOwotICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSB1c2VEZWNpc2lvbj0lZCBwcmlvcml0eT0lZCB0
aW1lPSUiIFBSSWk2NCAibXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHVzZURlY2lzaW9uKSwgc3RhdGlj
X2Nhc3Q8aW50PihvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSksIGVsYXBzZWRNUyk7CisgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZlIGNvbXBsZXRl
IHVzZURlY2lzaW9uPSVkIHByaW9yaXR5PSVkIHRpbWU9JSIgUFJJaTY0ICJtcyIsIHN0YXRpY19j
YXN0PGludD4odXNlRGVjaXNpb24pLCBzdGF0aWNfY2FzdDxpbnQ+KHJlcXVlc3QucHJpb3JpdHko
KSksIGVsYXBzZWRNUyk7CiAjZW5kaWYKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpt
b3ZlKGVudHJ5KSk7CiAKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKLSAgICAgICAgICAgIG1f
c3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkoZnJhbWVJRC5maXJzdCwgc3Rv
cmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCB1c2VEZWNpc2lvbik7CisgICAgICAgICAgICBtX3N0
YXRpc3RpY3MtPnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KGZyYW1lSUQuZmlyc3QsIHN0b3Jh
Z2VLZXksIHJlcXVlc3QsIHVzZURlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuIHVzZURlY2lzaW9u
ICE9IFVzZURlY2lzaW9uOjpOb0R1ZVRvRGVjb2RlRmFpbHVyZTsKICAgICB9KTsKIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwg
c3RkOjpmdW5jdGlvbjx2b2lkIChNYXBwZWRCb2R5Jik+IGNvbXBsZXRpb25IYW5kbGVyKQorc3Rk
Ojp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoaXNFbmFibGVkKCkpOwogICAgIEFTU0VSVChyZXNwb25zZURhdGEpOwogCi0jaWYgIUxPR19E
SVNBQkxFRAotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgQ1N0cmluZyBwYXJ0
aXRpb24gPSBvcmlnaW5hbFJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKS5sYXRpbjEoKTsKLSNlbHNl
Ci0gICAgQ1N0cmluZyBwYXJ0aXRpb24gPSAiTm8gcGFydGl0aW9uIjsKLSNlbmRpZgotICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0b3JpbmcgJXMsIHBhcnRpdGlvbiAl
cyIsIG9yaWdpbmFsUmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIHBhcnRp
dGlvbi5kYXRhKCkpOwotI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKKyAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdG9yaW5nICVzLCBwYXJ0aXRpb24gJXMiLCByZXF1ZXN0
LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgbWFrZUNhY2hlS2V5KHJlcXVlc3QpLnBh
cnRpdGlvbigpLmxhdGluMSgpLmRhdGEoKSk7CiAKLSAgICBTdG9yZURlY2lzaW9uIHN0b3JlRGVj
aXNpb24gPSBtYWtlU3RvcmVEZWNpc2lvbihvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKTsKKyAg
ICBTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24gPSBtYWtlU3RvcmVEZWNpc2lvbihyZXF1ZXN0
LCByZXNwb25zZSk7CiAgICAgaWYgKHN0b3JlRGVjaXNpb24gIT0gU3RvcmVEZWNpc2lvbjo6WWVz
KSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGRpZG4ndCBz
dG9yZSwgc3RvcmVEZWNpc2lvbj0lZCIsIHN0YXRpY19jYXN0PGludD4oc3RvcmVEZWNpc2lvbikp
OwotICAgICAgICBhdXRvIGtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOworICAg
ICAgICBhdXRvIGtleSA9IG1ha2VDYWNoZUtleShyZXF1ZXN0KTsKIAogICAgICAgICBhdXRvIGlz
U3VjY2Vzc2Z1bFJldmFsaWRhdGlvbiA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0
OwogICAgICAgICBpZiAoIWlzU3VjY2Vzc2Z1bFJldmFsaWRhdGlvbikgewpAQCAtNDUxLDcgKzQ0
NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gQ2FjaGU6OnN0b3JlKGNvbnMKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBjYWNo
ZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4obWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVx
dWVzdCksIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSwgY29sbGVjdFZhcnlpbmdS
ZXF1ZXN0SGVhZGVycyhvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBjYWNoZUVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4obWFrZUNh
Y2hlS2V5KHJlcXVlc3QpLCByZXNwb25zZSwgV1RGOjptb3ZlKHJlc3BvbnNlRGF0YSksIGNvbGxl
Y3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMocmVxdWVzdCwgcmVzcG9uc2UpKTsKIAogICAgIGF1dG8g
cmVjb3JkID0gY2FjaGVFbnRyeS0+ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKQEAgLTQ3MSw2
ICs0NjQsMzEgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6c3RvcmUoY29ucwogICAg
IHJldHVybiBjYWNoZUVudHJ5OwogfQogCitzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IENhY2hlOjpz
dG9yZVJlZGlyZWN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVkaXJlY3RSZXF1ZXN0KQoreworICAgIEFTU0VSVChpc0VuYWJsZWQo
KSk7CisKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdG9yaW5nIHJl
ZGlyZWN0ICVzIC0+ICVzIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCks
IHJlZGlyZWN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworCisgICAg
U3RvcmVEZWNpc2lvbiBzdG9yZURlY2lzaW9uID0gbWFrZVN0b3JlRGVjaXNpb24ocmVxdWVzdCwg
cmVzcG9uc2UpOworICAgIGlmIChzdG9yZURlY2lzaW9uICE9IFN0b3JlRGVjaXNpb246Olllcykg
eworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBkaWRuJ3Qgc3Rv
cmUgcmVkaXJlY3QsIHN0b3JlRGVjaXNpb249JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0b3JlRGVj
aXNpb24pKTsKKyAgICAgICAgYXV0byBrZXkgPSBtYWtlQ2FjaGVLZXkocmVxdWVzdCk7CisgICAg
ICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5v
dENhY2hpbmdSZXNwb25zZShrZXksIHN0b3JlRGVjaXNpb24pOworCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gY2FjaGVFbnRyeSA9
IHN0ZDo6bWFrZV91bmlxdWU8RW50cnk+KG1ha2VDYWNoZUtleShyZXF1ZXN0KSwgcmVzcG9uc2Us
IHJlZGlyZWN0UmVxdWVzdCwgY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhyZXF1ZXN0LCBy
ZXNwb25zZSkpOworCisgICAgYXV0byByZWNvcmQgPSBjYWNoZUVudHJ5LT5lbmNvZGVBc1N0b3Jh
Z2VSZWNvcmQoKTsKKworICAgIG1fc3RvcmFnZS0+c3RvcmUocmVjb3JkLCBudWxscHRyKTsKKyAg
ICAKKyAgICByZXR1cm4gY2FjaGVFbnRyeTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBD
YWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1
ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBjb25zdCBFbnRyeSYgZXhpc3RpbmdF
bnRyeSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNl
KQogewogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0aW5nICVz
Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuaAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgZW51
bSBjbGFzcyBVc2VEZWNpc2lvbiB7CiAgICAgTm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRjaCwK
ICAgICBOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkcywKICAgICBOb0R1ZVRvRGVjb2RlRmFp
bHVyZSwKKyAgICBOb0R1ZVRvRXhwaXJlZFJlZGlyZWN0LAogfTsKIAogdXNpbmcgR2xvYmFsRnJh
bWVJRCA9IHN0ZDo6cGFpcjx1aW50NjRfdCAvKndlYlBhZ2VJRCovLCB1aW50NjRfdCAvKndlYkZy
YW1lSUQqLz47CkBAIC0xMDQsNiArMTA1LDcgQEAgcHVibGljOgogICAgIC8vIENvbXBsZXRpb24g
aGFuZGxlciBtYXkgZ2V0IGNhbGxlZCBiYWNrIHN5bmNocm9ub3VzbHkgb24gZmFpbHVyZS4KICAg
ICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEds
b2JhbEZyYW1lSUQmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4p
Pik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChNYXBwZWRCb2R5Jik+
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHN0b3JlUmVkaXJlY3QoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+IHVwZGF0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29uc3QgRW50cnkmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOwogCiAgICAgdm9pZCB0cmF2ZXJzZShz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEVudHJ5Kik+JiYpOwpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5
LmNwcAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
OCBAQCBFbnRyeTo6RW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvCiAgICAgQVNTRVJU
KG1fa2V5LnR5cGUoKSA9PSAicmVzb3VyY2UiKTsKIH0KIAorRW50cnk6OkVudHJ5KGNvbnN0IEtl
eSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QsIGNvbnN0IFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RIZWFkZXJzKQorICAgIDog
bV9rZXkoa2V5KQorICAgICwgbV90aW1lU3RhbXAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
bm93KCkpCisgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQorICAgICwgbV92YXJ5aW5nUmVxdWVz
dEhlYWRlcnModmFyeWluZ1JlcXVlc3RIZWFkZXJzKQorICAgICwgbV9yZWRpcmVjdFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjphZG9wdChyZWRpcmVjdFJlcXVlc3QuY29weURhdGEo
KSkpIC8vIERvbid0IGluY2x1ZGUgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gcmVxdWVzdCBvYmpl
Y3QuCit7CisgICAgQVNTRVJUKG1fa2V5LnR5cGUoKSA9PSAicmVzb3VyY2UiKTsKKyAgICAvLyBS
ZWRpcmVjdCBib2R5IGlzIG5vdCBuZWVkZWQgZXZlbiBpZiBleGlzdHMuCisgICAgbV9yZWRpcmVj
dFJlcXVlc3QtPnNldEhUVFBCb2R5KG51bGxwdHIpOworfQorCiBFbnRyeTo6RW50cnkoY29uc3Qg
RW50cnkmIG90aGVyKQogICAgIDogbV9rZXkob3RoZXIubV9rZXkpCiAgICAgLCBtX3RpbWVTdGFt
cChvdGhlci5tX3RpbWVTdGFtcCkKQEAgLTc3LDYgKzg5LDExIEBAIFN0b3JhZ2U6OlJlY29yZCBF
bnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmUKICAgICBpZiAoaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJz
KQogICAgICAgICBlbmNvZGVyIDw8IG1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzOwogCisgICAgYm9v
bCBpc1JlZGlyZWN0ID0gISFtX3JlZGlyZWN0UmVxdWVzdDsKKyAgICBlbmNvZGVyIDw8IGlzUmVk
aXJlY3Q7CisgICAgaWYgKGlzUmVkaXJlY3QpCisgICAgICAgIG1fcmVkaXJlY3RSZXF1ZXN0LT5l
bmNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGVuY29kZXIpOworCiAgICAgZW5jb2Rlci5lbmNvZGVD
aGVja3N1bSgpOwogCiAgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5i
dWZmZXJTaXplKCkpOwpAQCAtMTA1LDYgKzEyMiwxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+
IEVudHJ5OjpkZWNvZGVTdG9yCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
KyAgICBib29sIGlzUmVkaXJlY3Q7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1JlZGlyZWN0
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoaXNSZWRpcmVjdCkgeworICAg
ICAgICBlbnRyeS0+bV9yZWRpcmVjdFJlcXVlc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdD4oKTsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9yZWRpcmVjdFJlcXVl
c3QtPmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkg
ewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2
ZXJpZmljYXRpb24gZmFpbHVyZVxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5oCShyZXZpc2lvbiAxOTQyNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTIgQEAKIAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJTaGFyZWFibGVSZXNvdXJjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIH0KIApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBFbnRyeSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRW50cnkoY29uc3QgS2V5JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGNv
bnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKTsKKyAgICBFbnRyeShjb25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QsIGNv
bnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKTsKICAgICBleHBsaWNpdCBFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmKTsKICAgICBF
bnRyeShjb25zdCBFbnRyeSYpOwogCkBAIC01OCw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHZhcnlpbmdSZXF1ZXN0SGVhZGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzOyB9CiAKICAgICBXZWJD
b3JlOjpTaGFyZWRCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OworICAgIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCogcmVkaXJlY3RSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWRpcmVj
dFJlcXVlc3QuZ2V0KCk7IH0KKwogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiAgICAg
U2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUoKSBjb25z
dDsKICNlbmRpZgpAQCAtODAsNiArODMsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnM7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0PiBtX3JlZGlyZWN0UmVxdWVzdDsKICAgICBtdXRhYmxlIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOwogI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCiAgICAgbXV0YWJsZSBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIG1fc2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
TG9hZC5jcHAJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgU3BlY3VsYXRpdmVMb2FkOjp+U3BlY3VsYXRpdmVMb2FkKCkKICAg
ICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlTG9hZDo6d2ls
bFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIFNwZWN1bGF0aXZl
TG9hZDo6d2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVkaXJlY3RSZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIHVwZGF0ZVJlZGlyZWN0Q2hh
aW5TdGF0dXMobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlZGlyZWN0UmVzcG9uc2UpOwog
fQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmgJKHJldmlzaW9uIDE5NDI2
NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlTG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5
bmMoY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGUgeyB9CiAgICAgdmly
dHVhbCBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlZGly
ZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVkaXJlY3RSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFNo
b3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9y
dGVkRW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAxOTQyNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgwLDYgKzI4MCw3IEBAIHN0YXRpYyBTdHJpbmcgY2FjaGVkRW50cnlSZXVzZUZhaWx1
cmVUb0QKICAgICBjYXNlIFVzZURlY2lzaW9uOjpOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxk
czoKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bWlzc2lu
Z1ZhbGlkYXRvckZpZWxkc0tleSgpOwogICAgIGNhc2UgVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNv
ZGVGYWlsdXJlOgorICAgIGNhc2UgVXNlRGVjaXNpb246Ok5vRHVlVG9FeHBpcmVkUmVkaXJlY3Q6
CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om90aGVyS2V5
KCk7CiAgICAgY2FzZSBVc2VEZWNpc2lvbjo6VXNlOgogICAgIGNhc2UgVXNlRGVjaXNpb246OlZh
bGlkYXRlOgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MjY0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMTItMTggIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIENhY2hlIHJlZGlyZWN0cyBhcyBz
ZXBhcmF0ZSBlbnRyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI0MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLXJlZGlyZWN0
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNh
Y2hlL2Rpc2stY2FjaGUtcmVkaXJlY3QuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291cmNlcy9nZW5lcmF0ZS1yZXNwb25zZS5jZ2k6CisKIDIw
MTUtMTItMTcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTQyNDEgYW5kIHIxOTQyNTIuCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1yZWRpcmVj
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNo
ZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUtcmVkaXJlY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2stY2FjaGUt
cmVkaXJlY3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACitU
ZXN0IHJlZGlyZWN0IGNhY2hpbmcKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK3J1
bm5pbmcgMTIgdGVzdHMKKworLS0tLS0tLS1UZXN0aW5nIGxvYWRzIGZyb20gZGlzayBjYWNoZS0t
LS0tLS0tCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMSIsIkxvY2F0aW9uIjoidW5p
cXVlLWNhY2hlYWJsZSJ9CityZXNwb25zZSBzb3VyY2U6IERpc2sgY2FjaGUKKworcmVzcG9uc2Ug
aGVhZGVyczogeyJTdGF0dXMiOiIzMDIiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUifQor
cmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoi
MzAzIiwiTG9jYXRpb24iOiJ1bmlxdWUtY2FjaGVhYmxlIn0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0
d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwNyIsIkxvY2F0aW9uIjoidW5p
cXVlLWNhY2hlYWJsZSJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVh
ZGVyczogeyJTdGF0dXMiOiIzMDEiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNo
ZS1jb250cm9sIjoibWF4LWFnZT0wIn0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCityZXNw
b25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMiIsIkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJs
ZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTAifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3Jr
CisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAzIiwiTG9jYXRpb24iOiJ1bmlxdWUt
Y2FjaGVhYmxlIiwiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCJ9CityZXNwb25zZSBzb3VyY2U6
IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDciLCJMb2NhdGlvbiI6
InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0wIn0KK3Jlc3BvbnNl
IHNvdXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMSIsIkxv
Y2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCJ9
CityZXNwb25zZSBzb3VyY2U6IERpc2sgY2FjaGUKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0
dXMiOiIzMDIiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoi
bWF4LWFnZT0xMDAifQorcmVzcG9uc2Ugc291cmNlOiBEaXNrIGNhY2hlCisKK3Jlc3BvbnNlIGhl
YWRlcnM6IHsiU3RhdHVzIjoiMzAzIiwiTG9jYXRpb24iOiJ1bmlxdWUtY2FjaGVhYmxlIiwiQ2Fj
aGUtY29udHJvbCI6Im1heC1hZ2U9MTAwIn0KK3Jlc3BvbnNlIHNvdXJjZTogRGlzayBjYWNoZQor
CityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwNyIsIkxvY2F0aW9uIjoidW5pcXVlLWNh
Y2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCJ9CityZXNwb25zZSBzb3VyY2U6
IERpc2sgY2FjaGUKKworLS0tLS0tLS1UZXN0aW5nIGxvYWRzIHRocm91Z2ggbWVtb3J5IGNhY2hl
IChYSFIgYmVoYXZpb3IpLS0tLS0tLS0KK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAx
IiwiTG9jYXRpb24iOiJ1bmlxdWUtY2FjaGVhYmxlIn0KK3Jlc3BvbnNlIHNvdXJjZTogTWVtb3J5
IGNhY2hlCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAyIiwiTG9jYXRpb24iOiJ1
bmlxdWUtY2FjaGVhYmxlIn0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCityZXNwb25zZSBo
ZWFkZXJzOiB7IlN0YXR1cyI6IjMwMyIsIkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSJ9City
ZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIz
MDciLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3
b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAxIiwiTG9jYXRpb24iOiJ1bmlx
dWUtY2FjaGVhYmxlIiwiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCJ9CityZXNwb25zZSBzb3Vy
Y2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDIiLCJMb2NhdGlv
biI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0wIn0KK3Jlc3Bv
bnNlIHNvdXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMyIs
IkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTAi
fQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVz
IjoiMzA3IiwiTG9jYXRpb24iOiJ1bmlxdWUtY2FjaGVhYmxlIiwiQ2FjaGUtY29udHJvbCI6Im1h
eC1hZ2U9MCJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczog
eyJTdGF0dXMiOiIzMDEiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250
cm9sIjoibWF4LWFnZT0xMDAifQorcmVzcG9uc2Ugc291cmNlOiBNZW1vcnkgY2FjaGUKKworcmVz
cG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDIiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFi
bGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0xMDAifQorcmVzcG9uc2Ugc291cmNlOiBNZW1v
cnkgY2FjaGUKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDMiLCJMb2NhdGlvbiI6
InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0xMDAifQorcmVzcG9u
c2Ugc291cmNlOiBNZW1vcnkgY2FjaGUKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIz
MDciLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFn
ZT0xMDAifQorcmVzcG9uc2Ugc291cmNlOiBNZW1vcnkgY2FjaGUKKworLS0tLS0tLS1UZXN0aW5n
IGxvYWRzIHRocm91Z2ggbWVtb3J5IGNhY2hlIChzdWJyZXNvdXJjZSBiZWhhdmlvciktLS0tLS0t
LQorcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDEiLCJMb2NhdGlvbiI6InVuaXF1ZS1j
YWNoZWFibGUifQorcmVzcG9uc2Ugc291cmNlOiBNZW1vcnkgY2FjaGUKKworcmVzcG9uc2UgaGVh
ZGVyczogeyJTdGF0dXMiOiIzMDIiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUifQorcmVz
cG9uc2Ugc291cmNlOiBOZXR3b3JrCisKK3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAz
IiwiTG9jYXRpb24iOiJ1bmlxdWUtY2FjaGVhYmxlIn0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29y
aworCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwNyIsIkxvY2F0aW9uIjoidW5pcXVl
LWNhY2hlYWJsZSJ9CityZXNwb25zZSBzb3VyY2U6IE5ldHdvcmsKKworcmVzcG9uc2UgaGVhZGVy
czogeyJTdGF0dXMiOiIzMDEiLCJMb2NhdGlvbiI6InVuaXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1j
b250cm9sIjoibWF4LWFnZT0wIn0KK3Jlc3BvbnNlIHNvdXJjZTogTmV0d29yaworCityZXNwb25z
ZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMiIsIkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIs
IkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTAifQorcmVzcG9uc2Ugc291cmNlOiBOZXR3b3JrCisK
K3Jlc3BvbnNlIGhlYWRlcnM6IHsiU3RhdHVzIjoiMzAzIiwiTG9jYXRpb24iOiJ1bmlxdWUtY2Fj
aGVhYmxlIiwiQ2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MCJ9CityZXNwb25zZSBzb3VyY2U6IE5l
dHdvcmsKKworcmVzcG9uc2UgaGVhZGVyczogeyJTdGF0dXMiOiIzMDciLCJMb2NhdGlvbiI6InVu
aXF1ZS1jYWNoZWFibGUiLCJDYWNoZS1jb250cm9sIjoibWF4LWFnZT0wIn0KK3Jlc3BvbnNlIHNv
dXJjZTogTmV0d29yaworCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwMSIsIkxvY2F0
aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCJ9City
ZXNwb25zZSBzb3VyY2U6IE1lbW9yeSBjYWNoZQorCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1
cyI6IjMwMiIsIkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJt
YXgtYWdlPTEwMCJ9CityZXNwb25zZSBzb3VyY2U6IE1lbW9yeSBjYWNoZQorCityZXNwb25zZSBo
ZWFkZXJzOiB7IlN0YXR1cyI6IjMwMyIsIkxvY2F0aW9uIjoidW5pcXVlLWNhY2hlYWJsZSIsIkNh
Y2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCJ9CityZXNwb25zZSBzb3VyY2U6IE1lbW9yeSBjYWNo
ZQorCityZXNwb25zZSBoZWFkZXJzOiB7IlN0YXR1cyI6IjMwNyIsIkxvY2F0aW9uIjoidW5pcXVl
LWNhY2hlYWJsZSIsIkNhY2hlLWNvbnRyb2wiOiJtYXgtYWdlPTEwMCJ9CityZXNwb25zZSBzb3Vy
Y2U6IE1lbW9yeSBjYWNoZQorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNh
Y2hlL2Rpc2stY2FjaGUtcmVkaXJlY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1jYWNoZS1yZWRpcmVjdC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL2Rpc2st
Y2FjaGUtcmVkaXJlY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACis8c2Ny
aXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvY2FjaGUtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CisKK3ZhciB0ZXN0TWF0cml4ID0KK1sKKyBbCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7
J1N0YXR1cyc6ICczMDEnLCAnTG9jYXRpb24nOiAndW5pcXVlLWNhY2hlYWJsZScgfSB9LAorICB7
IHJlc3BvbnNlSGVhZGVyczogeydTdGF0dXMnOiAnMzAyJywgJ0xvY2F0aW9uJzogJ3VuaXF1ZS1j
YWNoZWFibGUnIH0gfSwKKyAgeyByZXNwb25zZUhlYWRlcnM6IHsnU3RhdHVzJzogJzMwMycsICdM
b2NhdGlvbic6ICd1bmlxdWUtY2FjaGVhYmxlJyB9IH0sCisgIHsgcmVzcG9uc2VIZWFkZXJzOiB7
J1N0YXR1cyc6ICczMDcnLCAnTG9jYXRpb24nOiAndW5pcXVlLWNhY2hlYWJsZScgfSB9LAorICBd
LAorIFsKKyAgeyB9LAorICB7IHJlc3BvbnNlSGVhZGVyczogeydDYWNoZS1jb250cm9sJzogJ21h
eC1hZ2U9MCcgfSB9LAorICB7IHJlc3BvbnNlSGVhZGVyczogeydDYWNoZS1jb250cm9sJzogJ21h
eC1hZ2U9MTAwJyB9IH0sCisgIF0sCisgXTsKKworZGVzY3JpcHRpb24oIlRlc3QgcmVkaXJlY3Qg
Y2FjaGluZyIpOworCit2YXIgdGVzdHMgPSBnZW5lcmF0ZVRlc3RzKHRlc3RNYXRyaXgpOworCitk
ZWJ1ZygicnVubmluZyAiICsgdGVzdHMubGVuZ3RoICsgIiB0ZXN0cyIpOworZGVidWcoIiIpOwor
CitydW5UZXN0cyh0ZXN0cyk7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jlc291cmNlcy9nZW5lcmF0ZS1yZXNwb25zZS5jZ2kK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNrLWNhY2hlL3Jl
c291cmNlcy9nZW5lcmF0ZS1yZXNwb25zZS5jZ2kJKHJldmlzaW9uIDE5NDI2NCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS9yZXNvdXJjZXMvZ2VuZXJhdGUtcmVz
cG9uc2UuY2dpCSh3b3JraW5nIGNvcHkpCkBAIC04LDEyICs4LDI0IEBAIG15ICRxdWVyeSA9IG5l
dyBDR0k7CiBteSAkZXhwaXJlc0luRnV0dXJlSW4zMDQgPSAkcXVlcnktPnBhcmFtKCdleHBpcmVz
LWluLWZ1dHVyZS1pbi0zMDQnKSB8fCAwOwogbXkgJGRlbGF5ID0gJHF1ZXJ5LT5wYXJhbSgnZGVs
YXknKSB8fCAwOwogbXkgJGJvZHkgPSAkcXVlcnktPnBhcmFtKCdib2R5JykgfHwgMDsKK215ICRz
dGF0dXMgPSAkcXVlcnktPnBhcmFtKCdTdGF0dXMnKSB8fCAwOwogCiBpZiAoJGJvZHkgZXEgInVu
aXF1ZSIpIHsKICAgICAkYm9keSA9IHNwcmludGYgIiUwOFhcbiIsIHJhbmQoMHhmZmZmZmZmZikK
IH0KIAogbXkgJGhhc1N0YXR1c0NvZGUgPSAwOworbXkgJGhhc0xvY2F0aW9uID0gMDsKK2lmICgk
c3RhdHVzID09IDMwMSB8fCAkc3RhdHVzID09IDMwMiB8fCAkc3RhdHVzID09IDMwMyB8fCAkc3Rh
dHVzID09IDMwNykgeworICAgIGlmICgkcXVlcnktPnBhcmFtKCdMb2NhdGlvbicpIGVxICJ1bmlx
dWUtY2FjaGVhYmxlIikgeworICAgICAgICBteSAkcmVkaXJlY3RCb2R5ID0gc3ByaW50ZiAiJTA4
WCIsIHJhbmQoMHhmZmZmZmZmZik7CisgICAgICAgIHByaW50ICJTdGF0dXM6ICIuICRzdGF0dXMg
LiAiXG4iOworICAgICAgICBwcmludCAiTG9jYXRpb246IGdlbmVyYXRlLXJlc3BvbnNlLmNnaT9i
b2R5PSIgLiAkcmVkaXJlY3RCb2R5IC4gIiZDYWNoZS1jb250cm9sPW1heC1hZ2UlM0QxMDAwJnVu
aXF1ZUlkPSIgLiAkcXVlcnktPnBhcmFtKCd1bmlxdWVJZCcpIC4gIlxuIjsKKyAgICAgICAgJGhh
c0xvY2F0aW9uID0gMTsKKyAgICAgICAgJGhhc1N0YXR1c0NvZGUgPSAxOworICAgIH0KK30KKwog
bXkgJGhhc0V4cGlyZXNIZWFkZXIgPSAwOwogaWYgKCRxdWVyeS0+aHR0cCAmJiAkcXVlcnktPmh0
dHAoIklmLU5vbmUtTWF0Y2giKSBlcSAibWF0Y2giKSB7CiAgICAgcHJpbnQgIlN0YXR1czogMzA0
XG4iOwpAQCAtMjksNyArNDEsNyBAQCBpZiAoJHF1ZXJ5LT5odHRwICYmICRxdWVyeS0+cGFyYW0o
IlJhbmdlCiAgICAgaWYgKCQxIDwgNiAmJiAkMiA8IDYpIHsKICAgICAgICAgcHJpbnQgIlN0YXR1
czogMjA2XG4iOwogICAgIH0gZWxzZSB7Ci0JcHJpbnQgIlN0YXR1czogNDE2XG4iOworICAgICAg
ICBwcmludCAiU3RhdHVzOiA0MTZcbiI7CiAgICAgfQogCiAgICAgJGhhc1N0YXR1c0NvZGUgPSAx
OwpAQCAtMzksNiArNTEsNyBAQCBmb3JlYWNoIChAbmFtZXMpIHsKICAgICBuZXh0IGlmICgkXyBl
cSAidW5pcXVlSWQiKTsKICAgICBuZXh0IGlmICgkXyBlcSAiZGVsYXkiKTsKICAgICBuZXh0IGlm
ICgkXyBlcSAiYm9keSIpOworICAgIG5leHQgaWYgKCRfIGVxICJMb2NhdGlvbiIgYW5kICRoYXNM
b2NhdGlvbik7CiAgICAgbmV4dCBpZiAoJF8gZXEgIlN0YXR1cyIgYW5kICRoYXNTdGF0dXNDb2Rl
KTsKICAgICBuZXh0IGlmICgkXyBlcSAiRXhwaXJlcyIgYW5kICRoYXNFeHBpcmVzSGVhZGVyKTsK
ICAgICBwcmludCAkXyAuICI6ICIgLiAkcXVlcnktPnBhcmFtKCRfKSAuICJcbiI7Cg==
</data>
<flag name="review"
          id="292659"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>