<?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>142339</bug_id>
          
          <creation_ts>2015-03-05 06:36:44 -0800</creation_ts>
          <short_desc>Move disk cache classes to namespace</short_desc>
          <delta_ts>2015-03-06 01:42:11 -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>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>commit-queue</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1074497</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-05 06:36:44 -0800</bug_when>
    <thetext>Move it to NetworkCache namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074498</commentid>
    <comment_count>1</comment_count>
      <attachid>247949</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-05 06:40:31 -0800</bug_when>
    <thetext>Created attachment 247949
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074500</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 06:42:51 -0800</bug_when>
    <thetext>Attachment 247949 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:104:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:78:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:78:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:247:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:328:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:376:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:429:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannel.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 19 in 21 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>1074871</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-06 00:37:07 -0800</bug_when>
    <thetext>https://trac.webkit.org/r181140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074890</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-03-06 01:42:11 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; https://trac.webkit.org/r181140

Attempted a build fix for Yosemite open source buildbots (even though the ChangeLog says Mavericks, because I have trouble mapping nature pictures to names):
Committed r181147: &lt;https://trac.webkit.org/changeset/181147&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247949</attachid>
            <date>2015-03-05 06:40:31 -0800</date>
            <delta_ts>2015-03-05 08:25:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-namespace.patch</filename>
            <type>text/plain</type>
            <size>93039</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTA3NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAzLTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGRpc2sgY2FjaGUgY2xh
c3NlcyB0byBuYW1lc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjMzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgZXZlcnl0aGluZyB0byBOZXR3b3JrQ2FjaGUgbmFtZXNwYWNlLiAKKwog
MjAxNS0wMy0wNSAgTHVrYXN6IEJpYWxlayAgPGwuYmlhbGVrQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxdW1dLMl0gQ3Jhc2ggd2hlbiAiRG93bmxvYWQgTGlua2VkIEZpbGUiIGZyb20gTWlu
aUJyb3dzZXIgY29udGV4dCBtZW51IGlzIGNsaWNrZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAkocmV2aXNpb24g
MTgxMDI0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTkgKzQ5LDIwIEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotTmV0d29ya0NhY2hl
JiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpCitDYWNoZSYgc2luZ2xldG9uKCkKIHsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hlPiBpbnN0YW5jZTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Q2FjaGU+IGluc3RhbmNlOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0K
IAotYm9vbCBOZXR3b3JrQ2FjaGU6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgs
IGJvb2wgZW5hYmxlRWZmaWNhY3lMb2dnaW5nKQorYm9vbCBDYWNoZTo6aW5pdGlhbGl6ZShjb25z
dCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVFZmZpY2FjeUxvZ2dpbmcpCiB7Ci0gICAg
bV9zdG9yYWdlID0gTmV0d29ya0NhY2hlU3RvcmFnZTo6b3BlbihjYWNoZVBhdGgpOworICAgIG1f
c3RvcmFnZSA9IFN0b3JhZ2U6Om9wZW4oY2FjaGVQYXRoKTsKIAogICAgIGlmIChlbmFibGVFZmZp
Y2FjeUxvZ2dpbmcpCi0gICAgICAgIG1fc3RhdGlzdGljcyA9IE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6Om9wZW4oY2FjaGVQYXRoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzID0gU3RhdGlzdGljczo6
b3BlbihjYWNoZVBhdGgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gVHJpZ2dlcnMg
d2l0aCAibm90aWZ5dXRpbCAtcCBjb20uYXBwbGUuV2ViS2l0LkNhY2hlLmR1bXAiLgpAQCAtNzcs
MTQgKzc4LDE0IEBAIGJvb2wgTmV0d29ya0NhY2hlOjppbml0aWFsaXplKGNvbnN0IFN0cmkKICAg
ICByZXR1cm4gISFtX3N0b3JhZ2U7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlOjpzZXRNYXhpbXVt
U2l6ZShzaXplX3QgbWF4aW11bVNpemUpCit2b2lkIENhY2hlOjpzZXRNYXhpbXVtU2l6ZShzaXpl
X3QgbWF4aW11bVNpemUpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3N0b3JhZ2UtPnNldE1heGltdW1TaXplKG1heGltdW1TaXplKTsKIH0KIAotc3RhdGlj
IE5ldHdvcmtDYWNoZUtleSBtYWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQorc3RhdGljIEtleSBtYWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKQEAgLTk2
LDkgKzk3LDkgQEAgc3RhdGljIE5ldHdvcmtDYWNoZUtleSBtYWtlQ2FjaGVLZXkoY29ucwogICAg
IHJldHVybiB7IHJlcXVlc3QuaHR0cE1ldGhvZCgpLCBwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCku
c3RyaW5nKCkgIH07CiB9CiAKLXN0YXRpYyBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeSBlbmNv
ZGVTdG9yYWdlRW50cnkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IHJlc3BvbnNlRGF0YSkKK3N0YXRpYyBTdG9yYWdlOjpFbnRyeSBl
bmNvZGVTdG9yYWdlRW50cnkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHJlc3BvbnNlRGF0YSkKIHsKLSAgICBOZXR3b3JrQ2FjaGVF
bmNvZGVyIGVuY29kZXI7CisgICAgRW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgcmVz
cG9uc2U7CiAKICAgICBTdHJpbmcgdmFyeVZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKQEAgLTEyMCw4ICsxMjEsOCBAQCBzdGF0
aWMgTmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnkgZW5jb2RlCiAgICAgZW5jb2Rlci5lbmNvZGVD
aGVja3N1bSgpOwogCiAgICAgYXV0byB0aW1lU3RhbXAgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkpOwotICAgIE5ldHdvcmtDYWNoZURhdGEgaGVhZGVy
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKLSAgICBOZXR3b3JrQ2Fj
aGVEYXRhIGJvZHk7CisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5i
dWZmZXJTaXplKCkpOworICAgIERhdGEgYm9keTsKICAgICBpZiAocmVzcG9uc2VEYXRhKQogICAg
ICAgICBib2R5ID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXNwb25zZURh
dGEtPmRhdGEoKSksIHJlc3BvbnNlRGF0YS0+c2l6ZSgpIH07CiAKQEAgLTE1NSwzOSArMTU2LDM5
IEBAIHN0YXRpYyBib29sIGNhY2hlUG9saWN5QWxsb3dzRXhwaXJlZChXZWIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4g
ZGVjb2RlU3RvcmFnZUVudHJ5KGNvbnN0IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5JiBzdG9y
YWdlRW50cnksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTmV0d29y
a0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZSYgZmFpbHVyZSkKK3N0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8RW50cnk+IGRlY29kZVN0b3JhZ2VFbnRyeShjb25zdCBTdG9yYWdlOjpFbnRyeSYg
c3RvcmFnZUVudHJ5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENh
Y2hlZEVudHJ5UmV1c2VGYWlsdXJlJiBmYWlsdXJlKQogewotICAgIE5ldHdvcmtDYWNoZURlY29k
ZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRl
ci5zaXplKCkpOworICAgIERlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEo
KSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSBjYWNoZWRSZXNwb25zZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhY2hlZFJl
c3BvbnNlKSkgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBy
ZXNwb25zZSBkZWNvZGluZyBmYWlsZWRcbiIpOwotICAgICAgICBmYWlsdXJlID0gTmV0d29ya0Nh
Y2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CisgICAgICAgIGZhaWx1cmUgPSBD
YWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIGJvb2wgaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkgewotICAgICAgICBmYWlsdXJl
ID0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CisgICAgICAg
IGZhaWx1cmUgPSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsK
ICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0
SGVhZGVyczsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YXJ5aW5nUmVxdWVzdEhlYWRl
cnMpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlID0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJl
dXNlRmFpbHVyZTo6T3RoZXI7CisgICAgICAgICAgICBmYWlsdXJlID0gQ2FjaGVkRW50cnlSZXVz
ZUZhaWx1cmU6Ok90aGVyOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIXZlcmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVycyh2YXJ5aW5nUmVxdWVz
dEhlYWRlcnMsIHJlcXVlc3QpKSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSB2YXJ5aW5nIGhlYWRlciBtaXNtYXRjaFxuIik7Ci0gICAgICAgICAgICBm
YWlsdXJlID0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6VmFyeWluZ0hl
YWRlck1pc21hdGNoOworICAgICAgICAgICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWls
dXJlOjpWYXJ5aW5nSGVhZGVyTWlzbWF0Y2g7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0oKSkgewog
ICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1bSB2ZXJp
ZmljYXRpb24gZmFpbHVyZVxuIik7Ci0gICAgICAgIGZhaWx1cmUgPSBOZXR3b3JrQ2FjaGU6OkNh
Y2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKKyAgICAgICAgZmFpbHVyZSA9IENhY2hlZEVu
dHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CkBAIC0yMDIsMTIgKzIwMywxMiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZTo6RW50CiAgICAgICAgIGJvb2wgaGFzVmFsaWRhdG9yRmllbGRzID0gY2FjaGVkUmVzcG9uc2Uu
aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihO
ZXR3b3JrUHJvY2VzcykgbmVlZHNSZXZhbGlkYXRpb24gaGFzVmFsaWRhdG9yRmllbGRzPSVkIGlz
RXhwaXJlZD0lZCBhZ2U9JWYgbGlmZXRpbWU9JWYiLCBpc0V4cGlyZWQsIGhhc1ZhbGlkYXRvckZp
ZWxkcywgYWdlLCBsaWZldGltZSk7CiAgICAgICAgIGlmICghaGFzVmFsaWRhdG9yRmllbGRzKSB7
Ci0gICAgICAgICAgICBmYWlsdXJlID0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFp
bHVyZTo6TWlzc2luZ1ZhbGlkYXRvckZpZWxkczsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBDYWNo
ZWRFbnRyeVJldXNlRmFpbHVyZTo6TWlzc2luZ1ZhbGlkYXRvckZpZWxkczsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBlbnRyeSA9IHN0
ZDo6bWFrZV91bmlxdWU8TmV0d29ya0NhY2hlOjpFbnRyeT4oKTsKKyAgICBhdXRvIGVudHJ5ID0g
c3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oKTsKICAgICBlbnRyeS0+c3RvcmFnZUVudHJ5ID0gc3Rv
cmFnZUVudHJ5OwogICAgIGVudHJ5LT5uZWVkc1JldmFsaWRhdGlvbiA9IG5lZWRzUmV2YWxpZGF0
aW9uOwogCkBAIC0yMjcsMjkgKzIyOCwyOSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZTo6RW50CiAgICAgcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgTmV0d29ya0NhY2hl
OjpSZXRyaWV2ZURlY2lzaW9uIGNhblJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZXRyaWV2ZURlY2lzaW9uIGNhblJldHJpZXZlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAoIXJlcXVlc3Qu
dXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICByZXR1cm4gTmV0d29ya0Nh
Y2hlOjpSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUHJvdG9jb2w7CisgICAgICAgIHJldHVybiBS
ZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUHJvdG9jb2w7CiAgICAgLy8gRklYTUU6IFN1cHBvcnQg
SEVBRCBhbmQgT1BUSU9OUyByZXF1ZXN0cy4KICAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkg
IT0gIkdFVCIpCi0gICAgICAgIHJldHVybiBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb246
Ok5vRHVlVG9IVFRQTWV0aG9kOworICAgICAgICByZXR1cm4gUmV0cmlldmVEZWNpc2lvbjo6Tm9E
dWVUb0hUVFBNZXRob2Q7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHZhbGlk
YXRlIGNvbmRpdGlvbmFsIHJlcXVlc3RzIHVzaW5nIGNhY2hlLgogICAgIGlmIChyZXF1ZXN0Lmlz
Q29uZGl0aW9uYWwoKSkKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNp
c2lvbjo6Tm9EdWVUb0NvbmRpdGlvbmFsUmVxdWVzdDsKKyAgICAgICAgcmV0dXJuIFJldHJpZXZl
RGVjaXNpb246Ok5vRHVlVG9Db25kaXRpb25hbFJlcXVlc3Q7CiAgICAgaWYgKHJlcXVlc3QuY2Fj
aGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSkKLSAgICAgICAg
cmV0dXJuIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbjo6Tm9EdWVUb1JlbG9hZElnbm9y
aW5nQ2FjaGU7CisgICAgICAgIHJldHVybiBSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUmVsb2Fk
SWdub3JpbmdDYWNoZTsKIAotICAgIHJldHVybiBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNp
b246OlllczsKKyAgICByZXR1cm4gUmV0cmlldmVEZWNpc2lvbjo6WWVzOwogfQogCi12b2lkIE5l
dHdvcmtDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIHVpbnQ2NF90IHdlYlBhZ2VJRCwgc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6
OnVuaXF1ZV9wdHI8RW50cnk+KT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENhY2hlOjpyZXRy
aWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgdWlu
dDY0X3Qgd2ViUGFnZUlELCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRy
eT4pPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwogCiAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgcmV0cmlldmluZyAlcyBwcmlv
cml0eSAldSIsIG9yaWdpbmFsUmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwg
b3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkpOwogCi0gICAgTmV0d29ya0NhY2hlS2V5IHN0b3Jh
Z2VLZXkgPSBtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKKyAgICBLZXkgc3RvcmFnZUtl
eSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwogICAgIFJldHJpZXZlRGVjaXNpb24g
cmV0cmlldmVEZWNpc2lvbiA9IGNhblJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgaWYg
KHJldHJpZXZlRGVjaXNpb24gIT0gUmV0cmlldmVEZWNpc2lvbjo6WWVzKSB7CiAgICAgICAgIGlm
IChtX3N0YXRpc3RpY3MpCkBAIC0yNjIsNyArMjYzLDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJl
dHJpZXZlKGNvbnN0IFdlYkNvcgogICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5
c3RlbV9jbG9jazo6bm93KCk7CiAgICAgdW5zaWduZWQgcHJpb3JpdHkgPSBvcmlnaW5hbFJlcXVl
c3QucHJpb3JpdHkoKTsKIAotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJp
b3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBzdGFydFRp
bWUsIHN0b3JhZ2VLZXksIHdlYlBhZ2VJRF0oc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OkVudHJ5PiBlbnRyeSkgeworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtl
eSwgcHJpb3JpdHksIFt0aGlzLCBvcmlnaW5hbFJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyLCBz
dGFydFRpbWUsIHN0b3JhZ2VLZXksIHdlYlBhZ2VJRF0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6
OkVudHJ5PiBlbnRyeSkgewogICAgICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOwog
CkBAIC0yODksMTkgKzI5MCwxOSBAQCB2b2lkIE5ldHdvcmtDYWNoZTo6cmV0cmlldmUoY29uc3Qg
V2ViQ29yCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24g
Y2FuU3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorc3RhdGljIFN0b3Jl
RGVjaXNpb24gY2FuU3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5h
bFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewog
ICAgIGlmICghb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8
fCAhcmVzcG9uc2UuaXNIVFRQKCkpIHsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2Vzcykgbm90IEhUVFAiKTsKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtDYWNoZTo6U3Rv
cmVEZWNpc2lvbjo6Tm9EdWVUb1Byb3RvY29sOworICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lv
bjo6Tm9EdWVUb1Byb3RvY29sOwogICAgIH0KICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0Lmh0dHBN
ZXRob2QoKSAhPSAiR0VUIikgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSBtZXRob2QgJXMiLCBvcmlnaW5hbFJlcXVlc3QuaHR0cE1ldGhvZCgpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpOb0R1
ZVRvSFRUUE1ldGhvZDsKKyAgICAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246Ok5vRHVlVG9IVFRQ
TWV0aG9kOwogICAgIH0KICAgICBpZiAocmVzcG9uc2UuaXNBdHRhY2htZW50KCkpIHsKICAgICAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgYXR0YWNobWVudCIpOwotICAg
ICAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpOb0R1ZVRvQXR0YWNobWVu
dFJlc3BvbnNlOworICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0F0dGFjaG1l
bnRSZXNwb25zZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkpIHsKQEAgLTMxNCwxNyArMzE1LDE3IEBAIHN0YXRpYyBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVj
aXNpb24gY2FuU3QKICAgICBjYXNlIDQxMDogLy8gR29uZQogICAgICAgICBpZiAocmVzcG9uc2Uu
Y2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIENhY2hlLWNvbnRyb2w6bm8tc3RvcmUiKTsKLSAgICAg
ICAgICAgIHJldHVybiBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Ok5vRHVlVG9Ob1N0b3Jl
UmVzcG9uc2U7CisgICAgICAgICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb05vU3Rv
cmVSZXNwb25zZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpTdG9y
ZURlY2lzaW9uOjpZZXM7CisgICAgICAgIHJldHVybiBTdG9yZURlY2lzaW9uOjpZZXM7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3Rh
dHVzIGNvZGUgJWQiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpOb0R1ZVRvSFRUUFN0YXR1c0NvZGU7
CisgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246Ok5vRHVlVG9IVFRQU3RhdHVzQ29kZTsKIH0KIAot
dm9pZCBOZXR3b3JrQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
b3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ2FjaGU6
OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTWFwcGVk
Qm9keSYpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwog
ICAgIEFTU0VSVChyZXNwb25zZURhdGEpOwpAQCAtMzQzLDcgKzM0NCw3IEBAIHZvaWQgTmV0d29y
a0NhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjoKIAogICAgIGF1dG8gc3RvcmFnZUVudHJ5ID0g
ZW5jb2RlU3RvcmFnZUVudHJ5KG9yaWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UsIFdURjo6bW92ZShy
ZXNwb25zZURhdGEpKTsKIAotICAgIG1fc3RvcmFnZS0+c3RvcmUoc3RvcmFnZUVudHJ5LCBbY29t
cGxldGlvbkhhbmRsZXJdKGJvb2wgc3VjY2VzcywgY29uc3QgTmV0d29ya0NhY2hlRGF0YSYgYm9k
eURhdGEpIHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKHN0b3JhZ2VFbnRyeSwgW2NvbXBsZXRpb25I
YW5kbGVyXShib29sIHN1Y2Nlc3MsIGNvbnN0IERhdGEmIGJvZHlEYXRhKSB7CiAgICAgICAgIE1h
cHBlZEJvZHkgbWFwcGVkQm9keTsKICNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogICAg
ICAgICBpZiAoYm9keURhdGEuaXNNYXAoKSkgewpAQCAtMzU4LDcgKzM1OSw3IEBAIHZvaWQgTmV0
d29ya0NhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjoKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3
b3JrQ2FjaGU6OnVwZGF0ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFs
UmVxdWVzdCwgY29uc3QgRW50cnkmIGVudHJ5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpCit2b2lkIENhY2hlOjp1cGRhdGUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IEVudHJ5JiBlbnRyeSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQogewog
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0aW5nICVzIiwgb3Jp
Z2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKQEAgLTM2Nywy
NSArMzY4LDI1IEBAIHZvaWQgTmV0d29ya0NhY2hlOjp1cGRhdGUoY29uc3QgV2ViQ29yZToKIAog
ICAgIGF1dG8gdXBkYXRlRW50cnkgPSBlbmNvZGVTdG9yYWdlRW50cnkob3JpZ2luYWxSZXF1ZXN0
LCByZXNwb25zZSwgZW50cnkuYnVmZmVyKTsKIAotICAgIG1fc3RvcmFnZS0+dXBkYXRlKHVwZGF0
ZUVudHJ5LCBlbnRyeS5zdG9yYWdlRW50cnksIFtdKGJvb2wgc3VjY2VzcywgY29uc3QgTmV0d29y
a0NhY2hlRGF0YSYpIHsKKyAgICBtX3N0b3JhZ2UtPnVwZGF0ZSh1cGRhdGVFbnRyeSwgZW50cnku
c3RvcmFnZUVudHJ5LCBbXShib29sIHN1Y2Nlc3MsIGNvbnN0IERhdGEmKSB7CiAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0ZWQsIHN1Y2Nlc3M9JWQiLCBz
dWNjZXNzKTsKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGU6OnRyYXZlcnNlKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgRW50cnkqKT4mJiB0cmF2ZXJzZUhhbmRsZXIpCit2b2lkIENh
Y2hlOjp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEVudHJ5Kik+JiYgdHJhdmVy
c2VIYW5kbGVyKQogewogICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7CiAKLSAgICBtX3N0b3JhZ2Ut
PnRyYXZlcnNlKFt0cmF2ZXJzZUhhbmRsZXJdKGNvbnN0IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVu
dHJ5KiBlbnRyeSkgeworICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoW3RyYXZlcnNlSGFuZGxlcl0o
Y29uc3QgU3RvcmFnZTo6RW50cnkqIGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAg
ICAgICAgICAgIHRyYXZlcnNlSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIE5ldHdvcmtDYWNoZTo6RW50cnkgY2FjaGVFbnRyeTsKKyAg
ICAgICAgRW50cnkgY2FjaGVFbnRyeTsKICAgICAgICAgY2FjaGVFbnRyeS5zdG9yYWdlRW50cnkg
PSAqZW50cnk7CiAKLSAgICAgICAgTmV0d29ya0NhY2hlRGVjb2RlciBkZWNvZGVyKGNhY2hlRW50
cnkuc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIGNhY2hlRW50cnkuc3RvcmFnZUVudHJ5Lmhl
YWRlci5zaXplKCkpOworICAgICAgICBEZWNvZGVyIGRlY29kZXIoY2FjaGVFbnRyeS5zdG9yYWdl
RW50cnkuaGVhZGVyLmRhdGEoKSwgY2FjaGVFbnRyeS5zdG9yYWdlRW50cnkuaGVhZGVyLnNpemUo
KSk7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2FjaGVFbnRyeS5yZXNwb25zZSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKQEAgLTM5MywxNCArMzk0LDE0IEBAIHZvaWQgTmV0d29ya0Nh
Y2hlOjp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW8KICAgICB9KTsKIH0KIAotU3RyaW5nIE5ldHdvcmtD
YWNoZTo6ZHVtcEZpbGVQYXRoKCkgY29uc3QKK1N0cmluZyBDYWNoZTo6ZHVtcEZpbGVQYXRoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
c3RvcmFnZS0+YmFzZURpcmVjdG9yeVBhdGgoKSwgImR1bXAuanNvbiIpOwogfQogCi1zdGF0aWMg
Ym9vbCBlbnRyeUFzSlNPTihTdHJpbmdCdWlsZGVyJiBqc29uLCBjb25zdCBOZXR3b3JrQ2FjaGVT
dG9yYWdlOjpFbnRyeSYgZW50cnkpCitzdGF0aWMgYm9vbCBlbnRyeUFzSlNPTihTdHJpbmdCdWls
ZGVyJiBqc29uLCBjb25zdCBTdG9yYWdlOjpFbnRyeSYgZW50cnkpCiB7Ci0gICAgTmV0d29ya0Nh
Y2hlRGVjb2RlciBkZWNvZGVyKGVudHJ5LmhlYWRlci5kYXRhKCksIGVudHJ5LmhlYWRlci5zaXpl
KCkpOworICAgIERlY29kZXIgZGVjb2RlcihlbnRyeS5oZWFkZXIuZGF0YSgpLCBlbnRyeS5oZWFk
ZXIuc2l6ZSgpKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIGNhY2hlZFJlc3BvbnNl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2FjaGVkUmVzcG9uc2UpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00MzMsNyArNDM0LDcgQEAgc3RhdGljIGJvb2wgZW50cnlBc0pTT04oU3Ry
aW5nQnVpbGRlciYgagogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZTo6
ZHVtcENvbnRlbnRzVG9GaWxlKCkKK3ZvaWQgQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiB7
CiAgICAgaWYgKCFtX3N0b3JhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0MSw3ICs0NDIsNyBA
QCB2b2lkIE5ldHdvcmtDYWNoZTo6ZHVtcENvbnRlbnRzVG9GaWxlKCkKICAgICBpZiAoIWR1bXBG
aWxlSGFuZGxlKQogICAgICAgICByZXR1cm47CiAgICAgV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZHVt
cEZpbGVIYW5kbGUsICJbXG4iLCAyKTsKLSAgICBtX3N0b3JhZ2UtPnRyYXZlcnNlKFtkdW1wRmls
ZUhhbmRsZV0oY29uc3QgTmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnkqIGVudHJ5KSB7CisgICAg
bV9zdG9yYWdlLT50cmF2ZXJzZShbZHVtcEZpbGVIYW5kbGVdKGNvbnN0IFN0b3JhZ2U6OkVudHJ5
KiBlbnRyeSkgewogICAgICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBXZWJDb3JlOjp3
cml0ZVRvRmlsZShkdW1wRmlsZUhhbmRsZSwgInt9XG5dXG4iLCA1KTsKICAgICAgICAgICAgIGF1
dG8gaGFuZGxlID0gZHVtcEZpbGVIYW5kbGU7CkBAIC00NTcsNyArNDU4LDcgQEAgdm9pZCBOZXR3
b3JrQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29y
a0NhY2hlOjpjbGVhcigpCit2b2lkIENhY2hlOjpjbGVhcigpCiB7CiAgICAgTE9HKE5ldHdvcmtD
YWNoZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUiKTsKICAgICBpZiAobV9zdG9y
YWdlKSB7CkBAIC00NzMsMTEgKzQ3NCwxMiBAQCB2b2lkIE5ldHdvcmtDYWNoZTo6Y2xlYXIoKQog
ICAgICAgICBtX3N0YXRpc3RpY3MtPmNsZWFyKCk7CiB9CiAKLVN0cmluZyBOZXR3b3JrQ2FjaGU6
OnN0b3JhZ2VQYXRoKCkgY29uc3QKK1N0cmluZyBDYWNoZTo6c3RvcmFnZVBhdGgoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3N0b3JhZ2UgPyBtX3N0b3JhZ2UtPmRpcmVjdG9yeVBhdGgoKSA6IFN0
cmluZygpOwogfQogCiB9Cit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgJKHJldmlzaW9uIDE4MTAyNCkK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQwLDYyICs0MCw2NSBAQCBjbGFzcyBVUkw7CiB9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLWNsYXNzIE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M7CitjbGFzcyBDYWNoZTsKK2NsYXNzIFN0YXRpc3RpY3M7CiAKLWNsYXNzIE5ldHdv
cmtDYWNoZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0NhY2hlKTsKLSAgICBm
cmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxOZXR3b3JrQ2FjaGU+OwotcHVibGljOgot
ICAgIGVudW0gY2xhc3MgUmV0cmlldmVEZWNpc2lvbiB7Ci0gICAgICAgIFllcywKLSAgICAgICAg
Tm9EdWVUb1Byb3RvY29sLAotICAgICAgICBOb0R1ZVRvSFRUUE1ldGhvZCwKLSAgICAgICAgTm9E
dWVUb0NvbmRpdGlvbmFsUmVxdWVzdCwKLSAgICAgICAgTm9EdWVUb1JlbG9hZElnbm9yaW5nQ2Fj
aGUKLSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBTdG9yZURlY2lzaW9uIHsKLSAgICAgICAgWWVz
LAotICAgICAgICBOb0R1ZVRvUHJvdG9jb2wsCi0gICAgICAgIE5vRHVlVG9IVFRQTWV0aG9kLAot
ICAgICAgICBOb0R1ZVRvQXR0YWNobWVudFJlc3BvbnNlLAotICAgICAgICBOb0R1ZVRvTm9TdG9y
ZVJlc3BvbnNlLAotICAgICAgICBOb0R1ZVRvSFRUUFN0YXR1c0NvZGUKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZSB7Ci0gICAgICAgIE5vbmUsCi0gICAg
ICAgIFZhcnlpbmdIZWFkZXJNaXNtYXRjaCwKLSAgICAgICAgTWlzc2luZ1ZhbGlkYXRvckZpZWxk
cywKLSAgICAgICAgT3RoZXIsCi0gICAgfTsKK0NhY2hlJiBzaW5nbGV0b24oKTsKIAotICAgIHN0
YXRpYyBOZXR3b3JrQ2FjaGUmIHNpbmdsZXRvbigpOworc3RydWN0IE1hcHBlZEJvZHkgeworI2lm
IEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCisgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNl
PiBzaGFyZWFibGVSZXNvdXJjZTsKKyAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIHNoYXJl
YWJsZVJlc291cmNlSGFuZGxlOworI2VuZGlmCit9OwogCitzdHJ1Y3QgRW50cnkgeworICAgIFN0
b3JhZ2U6OkVudHJ5IHN0b3JhZ2VFbnRyeTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKKyNp
ZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQorICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5k
bGUgc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGU7CisjZW5kaWYKKyAgICBib29sIG5lZWRzUmV2YWxp
ZGF0aW9uOworfTsKKworZW51bSBjbGFzcyBSZXRyaWV2ZURlY2lzaW9uIHsKKyAgICBZZXMsCisg
ICAgTm9EdWVUb1Byb3RvY29sLAorICAgIE5vRHVlVG9IVFRQTWV0aG9kLAorICAgIE5vRHVlVG9D
b25kaXRpb25hbFJlcXVlc3QsCisgICAgTm9EdWVUb1JlbG9hZElnbm9yaW5nQ2FjaGUKK307CisK
K2VudW0gY2xhc3MgU3RvcmVEZWNpc2lvbiB7CisgICAgWWVzLAorICAgIE5vRHVlVG9Qcm90b2Nv
bCwKKyAgICBOb0R1ZVRvSFRUUE1ldGhvZCwKKyAgICBOb0R1ZVRvQXR0YWNobWVudFJlc3BvbnNl
LAorICAgIE5vRHVlVG9Ob1N0b3JlUmVzcG9uc2UsCisgICAgTm9EdWVUb0hUVFBTdGF0dXNDb2Rl
Cit9OworCitlbnVtIGNsYXNzIENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlIHsKKyAgICBOb25lLAor
ICAgIFZhcnlpbmdIZWFkZXJNaXNtYXRjaCwKKyAgICBNaXNzaW5nVmFsaWRhdG9yRmllbGRzLAor
ICAgIE90aGVyLAorfTsKKworY2xhc3MgQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlKTsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDYWNoZT47Citw
dWJsaWM6CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBib29s
IGVuYWJsZUVmZmljYWN5TG9nZ2luZyk7CiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShzaXplX3Qp
OwogCiAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RvcmFnZTsgfQog
Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgTmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnkg
c3RvcmFnZUVudHJ5OwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXI7Ci0jaWYgRU5B
QkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICAgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRs
ZSBzaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsKLSNlbmRpZgotICAgICAgICBib29sIG5lZWRzUmV2
YWxpZGF0aW9uOwotICAgIH07CiAgICAgLy8gQ29tcGxldGlvbiBoYW5kbGVyIG1heSBnZXQgY2Fs
bGVkIGJhY2sgc3luY2hyb25vdXNseSBvbiBmYWlsdXJlLgogICAgIHZvaWQgcmV0cmlldmUoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgdWludDY0X3Qgd2ViUGFnZUlELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPik7Ci0KLSAgICBzdHJ1Y3QgTWFw
cGVkQm9keSB7Ci0jaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICAgICAgUmVmUHRy
PFNoYXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNvdXJjZTsKLSAgICAgICAgU2hhcmVhYmxl
UmVzb3VyY2U6OkhhbmRsZSBzaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsKLSNlbmRpZgotICAgIH07
CiAgICAgdm9pZCBzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkIChNYXBwZWRCb2R5Jik+KTsKICAgICB2b2lkIHVwZGF0ZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBFbnRyeSYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CiAKQEAgLTEwOCwxNSAr
MTExLDE2IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBOZXR3b3JrQ2FjaGUoKSA9IGRlZmF1bHQ7Ci0gICAgfk5ldHdvcmtDYWNoZSgp
ID0gZGVsZXRlOworICAgIENhY2hlKCkgPSBkZWZhdWx0OworICAgIH5DYWNoZSgpID0gZGVsZXRl
OwogCiAgICAgU3RyaW5nIGR1bXBGaWxlUGF0aCgpIGNvbnN0OwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG1fc3RvcmFnZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gbV9zdGF0aXN0aWNzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YXRpc3RpY3M+IG1f
c3RhdGlzdGljczsKIH07CiAKIH0KK30KICNlbmRpZgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVy
LmgJKHJldmlzaW9uIDE4MTAyNCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSwyNSBA
QAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBOZXR3b3JrQ2FjaGVEZWNvZGVyOwotY2xhc3Mg
TmV0d29ya0NhY2hlRW5jb2RlcjsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBFbmNvZGVyOwogICAg
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE5ldHdvcmtDYWNoZUNvZGVyIHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYg
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CisgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCiAgICAgewogICAgICAgICB0LmVu
Y29kZShlbmNvZGVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0Nh
Y2hlRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgVCYgdCkKICAgICB7CiAgICAgICAgIHJldHVybiBUOjpkZWNvZGUoZGVjb2Rl
ciwgdCk7CiAgICAgfQogfTsKIAogfQorfQogCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnMuY3BwCShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxMyArMzMsMTQgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotdm9pZCBOZXR3b3JrQ2Fj
aGVDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit2b2lkIENvZGVyPEF0b21pY1N0
cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0b21p
Y1N0cmluZykKIHsKICAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJpbmcoKTsKIH0KIAot
Ym9vbCBOZXR3b3JrQ2FjaGVDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoTmV0d29ya0NhY2hl
RGVjb2RlciYgZGVjb2RlciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCitib29sIENvZGVy
PEF0b21pY1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9taWNTdHJpbmcmIGF0
b21pY1N0cmluZykKIHsKICAgICBTdHJpbmcgc3RyaW5nOwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RyaW5nKSkKQEAgLTQ5LDcgKzUwLDcgQEAgYm9vbCBOZXR3b3JrQ2FjaGVDb2RlcjxBdG9t
aWNTdHJpbmc+OjpkZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZUNv
ZGVyPENTdHJpbmc+OjplbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
Q1N0cmluZyYgc3RyaW5nKQordm9pZCBDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhl
IG51bGwgc3RyaW5nLgogICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpIHsKQEAgLTYyLDcgKzYzLDcg
QEAgdm9pZCBOZXR3b3JrQ2FjaGVDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKAogICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0
cmluZy5kYXRhKCkpLCBsZW5ndGgpOwogfQogCi1ib29sIE5ldHdvcmtDYWNoZUNvZGVyPENTdHJp
bmc+OjpkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0
KQorYm9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcm
IHJlc3VsdCkKIHsKICAgICB1aW50MzJfdCBsZW5ndGg7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsZW5ndGgpKQpAQCAtOTAsNyArOTEsNyBAQCBib29sIE5ldHdvcmtDYWNoZUNvZGVyPENTdHJp
bmc+OjpkZWNvZGUoCiB9CiAKIAotdm9pZCBOZXR3b3JrQ2FjaGVDb2RlcjxTdHJpbmc+OjplbmNv
ZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit2
b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgogICAgIGlm
IChzdHJpbmcuaXNOdWxsKCkpIHsKQEAgLTExMCw3ICsxMTEsNyBAQCB2b2lkIE5ldHdvcmtDYWNo
ZUNvZGVyPFN0cmluZz46OmVuY29kZShOCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGRlY29kZVN0cmluZ1RleHQoTmV0d29ya0NhY2hl
RGVjb2RlciYgZGVjb2RlciwgdWludDMyX3QgbGVuZ3RoLCBTdHJpbmcmIHJlc3VsdCkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBkZWNvZGVTdHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90
IGxlbmd0aCwgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhl
IHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2gu
CiAgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVy
VHlwZT4obGVuZ3RoKSkgewpAQCAtMTI3LDcgKzEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk
ZWNvZGVTdHJpbmdUZXh0KE5ldHcKICAgICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKLWJvb2wgTmV0
d29ya0NhY2hlQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29k
ZXIsIFN0cmluZyYgcmVzdWx0KQorYm9vbCBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgdWludDMyX3QgbGVuZ3RoOwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKQEAgLTE0OCw3ICsxNDksNyBAQCBib29sIE5ldHdv
cmtDYWNoZUNvZGVyPFN0cmluZz46OmRlY29kZShOCiAgICAgcmV0dXJuIGRlY29kZVN0cmluZ1Rl
eHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2Fj
aGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoTmV0d29ya0NhY2hlRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8pCit2b2lkIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKIHsKICAgICAvLyBGSVhNRTogQ29jb2EgQ2VydGlmaWNhdGVJbmZvIGlzIGEgQ0Ygb2Jq
ZWN0IHRyZWUuIEdlbmVyYWxpemUgQ0YgdHlwZSBjb2Rpbmcgc28gd2UgZG9uJ3QgbmVlZCB0byB1
c2UgQXJndW1lbnRDb2RlciBoZXJlLgogICAgIElQQzo6QXJndW1lbnRFbmNvZGVyIGFyZ3VtZW50
RW5jb2RlcjsKQEAgLTE1Nyw3ICsxNTgsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZUNvZGVyPFdlYkNv
cmU6OkNlcnRpZmljCiAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJndW1lbnRF
bmNvZGVyLmJ1ZmZlcigpLCBhcmd1bWVudEVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotYm9v
bCBOZXR3b3JrQ2FjaGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUoTmV0
d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCitib29sIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKIHsKICAgICB1aW50NjRfdCBjZXJ0aWZpY2F0ZVNpemU7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShjZXJ0aWZpY2F0ZVNpemUpKQpAQCAtMTczLDE2ICsxNzQsMTcgQEAgYm9vbCBOZXR3
b3JrQ2FjaGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpYwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIE5ldHdvcmtDYWNoZUNvZGVyPE1ENTo6RGlnZXN0Pjo6ZW5jb2RlKE5ldHdvcmtDYWNoZUVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IE1ENTo6RGlnZXN0JiBkaWdlc3QpCit2b2lkIENvZGVyPE1E
NTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE1ENTo6RGlnZXN0JiBk
aWdlc3QpCiB7CiAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEo
KSwgc2l6ZW9mKGRpZ2VzdCkpOwogfQogCi1ib29sIE5ldHdvcmtDYWNoZUNvZGVyPE1ENTo6RGln
ZXN0Pjo6ZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIE1ENTo6RGlnZXN0JiBk
aWdlc3QpCitib29sIENvZGVyPE1ENTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IE1ENTo6RGlnZXN0JiBkaWdlc3QpCiB7CiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRM
ZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKIH0KIAogfQorfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE1IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgTmV0d29ya0NhY2hlQ29kZXI8c3RkOjpwYWly
PFQsIFU+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IHN0cnVjdCBDb2RlcjxzdGQ6OnBhaXI8VCwgVT4+IHsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpwYWlyPFQsIFU+JiBwYWly
KQogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBwYWlyLmZpcnN0IDw8IHBhaXIuc2Vjb25kOwog
ICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiBkZWNv
ZGVyLCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKICAgICB7CiAgICAgICAgIFQgZmly
c3Q7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmlyc3QpKQpAQCAtNjIsMTQgKzYzLDE0
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCAKICAgICB9CiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IE5ldHdvcmtD
YWNoZUNvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpj
aHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bjxSZXAsIFBlcmlvZD4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCiAg
ICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUg
JiYgc3RkOjppc19zaWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGlu
dDY0X3QpLCAiU2VyaWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQg
eWV0LiBPbmx5IHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2
NF90IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oZHVyYXRpb24uY291bnQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIHN0ZDo6Y2hyb25vOjpkdXJh
dGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgcmVzdWx0KQog
ICAgIHsKICAgICAgICAgaW50NjRfdCBjb3VudDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb3VudCkpCkBAIC03OSwxMyArODAsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUmVwLCB0eXBl
bmFtZSBQZXJpb2Q+IAogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IE5ldHdvcmtDYWNoZUNvZGVyPFdURjo6S2V5VmFsdWVQ
YWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29y
a0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZh
bHVlVHlwZT4gc3RydWN0IENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlw
ZT4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RG
OjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKICAgICB7CiAgICAgICAg
IGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBh
aXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFp
cikKICAgICB7CiAgICAgICAgIEtleVR5cGUga2V5OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGtleSkpCkBAIC0xMDEsMTcgKzEwMiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBl
LCB0eXBlbmFtZSBWYWx1CiAgICAgfQogfTsKIAotdGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVt
ZW50cywgdHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yTmV0
d29ya0NhY2hlQ29kZXI7Cit0ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0b3JDb2RlcjsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yTmV0d29y
a0NhY2hlQ29kZXI8ZmFsc2UsIFQsIGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQg
ZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4gc3RydWN0IFZlY3RvckNvZGVyPGZhbHNlLCBULCBpbmxpbmVDYXBhY2l0eT4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewogICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IHZlY3Rv
cltpXTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2Rl
ciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCiAgICAgewogICAgICAgICB1aW50NjRfdCBzaXplOwogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHNpemUpKQpAQCAtMTMyLDE0ICsxMzMsMTQgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3Rvck5ldHdvcmtDYWNoZUNvZGVy
PHRydWUsIFQsIGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKE5ldHdv
cmtDYWNoZUVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3Ry
dWN0IFZlY3RvckNvZGVyPHRydWUsIFQsIGlubGluZUNhcGFjaXR5PiB7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHZlY3Rvci5zaXplKCkpOwogICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9y
LnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihUKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRp
YyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAg
IHVpbnQ2NF90IHNpemU7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCkBAIC0x
NjMsMTkgKzE2NCwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBzdHJ1Y3QgTmV0d29ya0NhY2hlQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBW
ZWN0b3JOZXR3b3JrQ2FjaGVDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBp
bmxpbmVDYXBhY2l0eT4geyB9OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JD
b2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBpbmxpbmVDYXBhY2l0eT4geyB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmc+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFt
ZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IENvZGVyPEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPj4gewogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOwogCi0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hN
YXBUeXBlJiBoYXNoTWFwKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKICAgICB7CiAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKICAgICAgICAgZm9yICh0eXBl
bmFtZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVu
ZCA9IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGVuY29kZXIg
PDwgKml0OwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNv
ZGVyJiBkZWNvZGVyLCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewogICAgICAg
ICB1aW50NjRfdCBoYXNoTWFwU2l6ZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNo
TWFwU2l6ZSkpCkBAIC0yMDIsMTcgKzIwMywxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBOZXR3b3JrQ2Fj
aGVDb2RlcjxIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4gewordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmc+IHN0cnVjdCBDb2RlcjxIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4g
ewogICAgIHR5cGVkZWYgSGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFz
aFNldFR5cGU7CiAKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsK
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkp
OwogICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9
IGhhc2hTZXQuYmVnaW4oKSwgZW5kID0gaGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQor
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0VHlwZSYgaGFz
aFNldCkKICAgICB7CiAgICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwogICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKQEAgLTIzNiwzMiArMjM3LDMyIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEEKICAgICB9CiB9OwogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxBdG9taWNTdHJpbmc+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiwgQXRvbWljU3RyaW5n
Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0
cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxDU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KE5ldHdvcmtDYWNoZUVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImLCBDU3RyaW5nJik7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb2RlcjxDU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBDU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7
CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxTdHJpbmc+IHsKLSAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYsIGNvbnN0IFN0cmluZyYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiwgU3RyaW5nJik7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiwgU3RyaW5nJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0
d29ya0NhY2hlRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3Jr
Q2FjaGVDb2RlcjxNRDU6OkRpZ2VzdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShOZXR3b3Jr
Q2FjaGVFbmNvZGVyJiwgY29uc3QgTUQ1OjpEaWdlc3QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoTmV0d29ya0NhY2hlRGVjb2RlciYsIE1ENTo6RGlnZXN0Jik7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb2RlcjxNRDU6OkRpZ2VzdD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwg
Y29uc3QgTUQ1OjpEaWdlc3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIE1E
NTo6RGlnZXN0Jik7CiB9OwogCiB9Ci0KK30KICNlbmRpZgogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0
YS5oCShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNsYXNzIERpc3BhdGNoUHRyOwpAQCAtOTIsMTQgKzkzLDE0IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBEaXNwYXRjaFB0cjxUPiBhZG8KIH0KICNlbmRpZgogCi1jbGFzcyBO
ZXR3b3JrQ2FjaGVEYXRhIHsKK2NsYXNzIERhdGEgewogcHVibGljOgotICAgIE5ldHdvcmtDYWNo
ZURhdGEoKSB7IH0KLSAgICBOZXR3b3JrQ2FjaGVEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OworICAgIERhdGEoKSB7IH0KKyAgICBEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiAg
ICAgZW51bSBjbGFzcyBCYWNraW5nIHsgQnVmZmVyLCBNYXAgfTsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBOZXR3b3JrQ2FjaGVEYXRhKERpc3BhdGNoUHRyPGRpc3BhdGNoX2RhdGFfdD4sIEJh
Y2tpbmcgPSBCYWNraW5nOjpCdWZmZXIpOworICAgIERhdGEoRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hf
ZGF0YV90PiwgQmFja2luZyA9IEJhY2tpbmc6OkJ1ZmZlcik7CiAjZW5kaWYKICAgICBib29sIGlz
TnVsbCgpIGNvbnN0OwogCkBAIC0xMjAsNiArMTIxLDcgQEAgcHJpdmF0ZToKIH07CiAKIH0KK30K
IAogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0JKHJldmlzaW9u
IDE4MTAyNCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURhdGFDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMjEgKzI0LDIyIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZWRhdGEuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
IAogI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLU5ldHdvcmtDYWNoZURhdGE6Ok5ldHdvcmtDYWNo
ZURhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitEYXRhOjpEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogICAgIDogbV9kaXNwYXRjaERhdGEoYWRvcHRE
aXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0ZShkYXRhLCBzaXplLCBudWxscHRyLCBESVNQQVRD
SF9EQVRBX0RFU1RSVUNUT1JfREVGQVVMVCkpKQogICAgICwgbV9zaXplKHNpemUpCiB7CiB9CiAK
LU5ldHdvcmtDYWNoZURhdGE6Ok5ldHdvcmtDYWNoZURhdGEoRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hf
ZGF0YV90PiBkaXNwYXRjaERhdGEsIEJhY2tpbmcgYmFja2luZykKK0RhdGE6OkRhdGEoRGlzcGF0
Y2hQdHI8ZGlzcGF0Y2hfZGF0YV90PiBkaXNwYXRjaERhdGEsIEJhY2tpbmcgYmFja2luZykKIHsK
ICAgICBpZiAoIWRpc3BhdGNoRGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgsNyArNDksNyBA
QCBOZXR3b3JrQ2FjaGVEYXRhOjpOZXR3b3JrQ2FjaGVEYXRhKERpc3BhCiAgICAgbV9pc01hcCA9
IG1fc2l6ZSAmJiBiYWNraW5nID09IEJhY2tpbmc6Ok1hcDsKIH0KIAotY29uc3QgdWludDhfdCog
TmV0d29ya0NhY2hlRGF0YTo6ZGF0YSgpIGNvbnN0Citjb25zdCB1aW50OF90KiBEYXRhOjpkYXRh
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGF0YSkgewogICAgICAgICBjb25zdCB2b2lkKiBkYXRh
OwpAQCAtNjAsMTEgKzYxLDEyIEBAIGNvbnN0IHVpbnQ4X3QqIE5ldHdvcmtDYWNoZURhdGE6OmRh
dGEoKSAKICAgICByZXR1cm4gbV9kYXRhOwogfQogCi1ib29sIE5ldHdvcmtDYWNoZURhdGE6Omlz
TnVsbCgpIGNvbnN0Citib29sIERhdGE6OmlzTnVsbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFt
X2Rpc3BhdGNoRGF0YTsKIH0KIAogfQorfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29k
ZXIuY3BwCShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCAr
MzEsOSBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKIAogbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotTmV0d29ya0NhY2hlRGVjb2Rlcjo6
TmV0d29ya0NhY2hlRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKQorRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9idWZmZXJQb3NpdGlvbihi
dWZmZXIpCiAgICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQpAQCAtNDAsMTYg
KzQxLDE2IEBAIE5ldHdvcmtDYWNoZURlY29kZXI6Ok5ldHdvcmtDYWNoZURlY29kZXIKIHsKIH0K
IAotTmV0d29ya0NhY2hlRGVjb2Rlcjo6fk5ldHdvcmtDYWNoZURlY29kZXIoKQorRGVjb2Rlcjo6
fkRlY29kZXIoKQogewogfQogCi1ib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0Citib29sIERlY29kZXI6OmJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fYnVmZmVyUG9zaXRpb24gKyBzaXplIDw9IG1fYnVmZmVyRW5kOwogfQogCi1ib29sIE5ldHdv
cmtDYWNoZURlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQogewogICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
bihzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTcsMTIgKzU4LDEyIEBAIGJvb2wg
TmV0d29ya0NhY2hlRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW4KICAgICBtZW1jcHkoZGF0YSwgbV9i
dWZmZXJQb3NpdGlvbiwgc2l6ZSk7CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCi0g
ICAgTmV0d29ya0NhY2hlRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fY2hlY2tzdW0s
IGRhdGEsIHNpemUpOworICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX2NoZWNr
c3VtLCBkYXRhLCBzaXplKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLWJvb2wgTmV0d29ya0NhY2hlRGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZh
bHVlKQorYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYgdmFsdWUpCiB7CiAgICAgaWYg
KCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVvZih2YWx1ZSkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC03MCw1NiArNzEsNTYgQEAgYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVy
OjpkZWNvZGVOdW1iZXIoVAogICAgIG1lbWNweSgmdmFsdWUsIG1fYnVmZmVyUG9zaXRpb24sIHNp
emVvZih2YWx1ZSkpOwogICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFR5cGUpOwogCi0g
ICAgTmV0d29ya0NhY2hlRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9jaGVja3N1
bSwgdmFsdWUpOworICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fY2hlY2tz
dW0sIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGVEZWNv
ZGVyOjpkZWNvZGUoYm9vbCYgcmVzdWx0KQorYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9vbCYgcmVz
dWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBOZXR3
b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUodWludDhfdCYgcmVzdWx0KQorYm9vbCBEZWNvZGVyOjpk
ZWNvZGUodWludDhfdCYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0
KTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3Vs
dCkKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiByZXN1bHQpCiB7CiAgICAgcmV0dXJu
IGRlY29kZU51bWJlcihyZXN1bHQpOwogfQogCi1ib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRl
Y29kZSh1aW50MzJfdCYgcmVzdWx0KQorYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJl
c3VsdCkKIHsKICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7CiB9CiAKLWJvb2wgTmV0
d29ya0NhY2hlRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiByZXN1bHQpCitib29sIERlY29kZXI6
OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVz
dWx0KTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUoaW50MzJfdCYgcmVz
dWx0KQorYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50MzJfdCYgcmVzdWx0KQogewogICAgIHJldHVy
biBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpk
ZWNvZGUoaW50NjRfdCYgcmVzdWx0KQorYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50NjRfdCYgcmVz
dWx0KQogewogICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBOZXR3
b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUoZmxvYXQmIHJlc3VsdCkKK2Jvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGZsb2F0JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwog
fQogCi1ib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRlY29kZShkb3VibGUmIHJlc3VsdCkKK2Jv
b2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQogewogICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKIH0KIAotYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjp2ZXJpZnlDaGVj
a3N1bSgpCitib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKIHsKICAgICB1bnNpZ25lZCBj
b21wdXRlZENoZWNrc3VtID0gbV9jaGVja3N1bTsKICAgICB1bnNpZ25lZCBkZWNvZGVkQ2hlY2tz
dW07CkBAIC0xMjksNSArMTMwLDYgQEAgYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjp2ZXJpZnlD
aGVja3N1bQogfQogCiB9Cit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuaAkocmV2
aXNpb24gMTgxMDI0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTMgQEAKICNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBOZXR3b3JrQ2FjaGVEZWNvZGVyIHsKK2NsYXNz
IERlY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE5l
dHdvcmtDYWNoZURlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6
ZSk7Ci0gICAgdmlydHVhbCB+TmV0d29ya0NhY2hlRGVjb2RlcigpOworICAgIERlY29kZXIoY29u
c3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CisgICAgdmlydHVhbCB+RGVj
b2RlcigpOwogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyRW5k
IC0gbV9idWZmZXI7IH0KICAgICBzaXplX3QgY3VycmVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyUG9zaXRpb24gLSBtX2J1ZmZlcjsgfQpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShUJiB0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIE5ldHdvcmtDYWNoZUNvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAg
ICAgICByZXR1cm4gQ29kZXI8VD46OmRlY29kZSgqdGhpcywgdCk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KQEAgLTk4LDYgKzk5LDcgQEAgcHJpdmF0ZToKIH07CiAKIH0gCit9
CiAKICNlbmRpZgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAkocmV2aXNpb24g
MTgxMDI0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMyICsyOSwzMyBAQAogI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3
b3JrQ2FjaGUgewogCi1OZXR3b3JrQ2FjaGVFbmNvZGVyOjpOZXR3b3JrQ2FjaGVFbmNvZGVyKCkK
K0VuY29kZXI6OkVuY29kZXIoKQogICAgIDogbV9jaGVja3N1bSgwKQogewogfQogCi1OZXR3b3Jr
Q2FjaGVFbmNvZGVyOjp+TmV0d29ya0NhY2hlRW5jb2RlcigpCitFbmNvZGVyOjp+RW5jb2Rlcigp
CiB7CiB9CiAKLXVpbnQ4X3QqIE5ldHdvcmtDYWNoZUVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUp
Cit1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBuZXdQ
b3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKICAgICBtX2J1ZmZlci5ncm93KG1fYnVmZmVyLnNp
emUoKSArIHNpemUpOwogICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3NpdGlvbjsK
IH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEodW5z
aWduZWQmIGNoZWNrc3VtLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
RW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHVuc2lnbmVkJiBjaGVja3N1bSwgY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAgICAgLy8gRklYTUU6IGhhc2hNZW1vcnkg
c2hvdWxkIG5vdCByZXF1aXJlIGFsaWdubWVudC4KICAgICBzaXplX3QgaGFzaFNpemUgPSBzaXpl
IC0gc2l6ZSAlIDI7Ci0gICAgdW5zaWduZWQgaGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShkYXRhLCBoYXNoU2l6ZSkgXiBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PHVpbnQ4X3QqPjo6
dmFsdWU7CisgICAgdW5zaWduZWQgaGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShkYXRh
LCBoYXNoU2l6ZSkgXiBFbmNvZGVyOjpTYWx0PHVpbnQ4X3QqPjo6dmFsdWU7CiAgICAgY2hlY2tz
dW0gPSBXVEY6OnBhaXJJbnRIYXNoKGNoZWNrc3VtLCBoYXNoKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q2FjaGVFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKICAgICB1cGRhdGVDaGVja3N1bUZvckRhdGEo
bV9jaGVja3N1bSwgZGF0YSwgc2l6ZSk7CiAKQEAgLTYzLDY0ICs2NCw2NSBAQCB2b2lkIE5ldHdv
cmtDYWNoZUVuY29kZXI6OmVuY29kZUZpeGVkTGVuCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+Ci12b2lkIE5ldHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZU51bWJlcihUeXBlIHZhbHVlKQor
dm9pZCBFbmNvZGVyOjplbmNvZGVOdW1iZXIoVHlwZSB2YWx1ZSkKIHsKLSAgICBOZXR3b3JrQ2Fj
aGVFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihtX2NoZWNrc3VtLCB2YWx1ZSk7Cisg
ICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9jaGVja3N1bSwgdmFsdWUpOwog
CiAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwogICAgIG1lbWNweShi
dWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNv
ZGVyOjplbmNvZGUoYm9vbCB2YWx1ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUp
CiB7CiAgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNv
ZGVyOjplbmNvZGUodWludDhfdCB2YWx1ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3Qg
dmFsdWUpCiB7CiAgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2Fj
aGVFbmNvZGVyOjplbmNvZGUodWludDE2X3QgdmFsdWUpCit2b2lkIEVuY29kZXI6OmVuY29kZSh1
aW50MTZfdCB2YWx1ZSkKIHsKICAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIE5l
dHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKK3ZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKHVpbnQzMl90IHZhbHVlKQogewogICAgIGVuY29kZU51bWJlcih2YWx1ZSk7CiB9CiAK
LXZvaWQgTmV0d29ya0NhY2hlRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ2NF90IHZhbHVlKQordm9pZCBF
bmNvZGVyOjplbmNvZGUodWludDY0X3QgdmFsdWUpCiB7CiAgICAgZW5jb2RlTnVtYmVyKHZhbHVl
KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkK
K3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDMyX3QgdmFsdWUpCiB7CiAgICAgZW5jb2RlTnVtYmVy
KHZhbHVlKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGUoaW50NjRfdCB2
YWx1ZSkKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDY0X3QgdmFsdWUpCiB7CiAgICAgZW5jb2Rl
TnVtYmVyKHZhbHVlKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGUoZmxv
YXQgdmFsdWUpCit2b2lkIEVuY29kZXI6OmVuY29kZShmbG9hdCB2YWx1ZSkKIHsKICAgICBlbmNv
ZGVOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZShk
b3VibGUgdmFsdWUpCit2b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgdmFsdWUpCiB7CiAgICAg
ZW5jb2RlTnVtYmVyKHZhbHVlKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNv
ZGVDaGVja3N1bSgpCit2b2lkIEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKIHsKICAgICBlbmNv
ZGVOdW1iZXIobV9jaGVja3N1bSk7CiB9CiAKIH0KK30KIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW5jb2Rlci5oCShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE1
ICszNCwxNiBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotY2xhc3MgTmV0d29ya0NhY2hlRW5jb2RlcjsK
K2NsYXNzIEVuY29kZXI7CiBjbGFzcyBEYXRhUmVmZXJlbmNlOwogCi1jbGFzcyBOZXR3b3JrQ2Fj
aGVFbmNvZGVyIHsKK2NsYXNzIEVuY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIE5ldHdvcmtDYWNoZUVuY29kZXIoKTsKLSAgICB2aXJ0dWFsIH5OZXR3
b3JrQ2FjaGVFbmNvZGVyKCk7CisgICAgRW5jb2RlcigpOworICAgIHZpcnR1YWwgfkVuY29kZXIo
KTsKIAogICAgIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKICAgICB2b2lkIGVuY29kZUZpeGVkTGVu
Z3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKQEAgLTU2LDEwICs1NywxMCBAQCBwdWJs
aWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZShjb25zdCBUJiB0KQog
ICAgIHsKLSAgICAgICAgTmV0d29ya0NhY2hlQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Cisg
ICAgICAgIENvZGVyPFQ+OjplbmNvZGUoKnRoaXMsIHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IE5ldHdvcmtDYWNoZUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQp
CiAgICAgewogICAgICAgICBlbmNvZGUodCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTky
LDI1ICs5MywyNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY2hlY2tzdW07CiB9OwogCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29ya0NhY2hlRW5jb2Rlcjo6U2FsdDxib29sPiB7IHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29y
a0NhY2hlRW5jb2Rlcjo6U2FsdDx1aW50OF90PiB7IHN0YXRpYyBjb25zdCAgdW5zaWduZWQgdmFs
dWUgPSA1OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8
dWludDE2X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gNzsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PHVpbnQzMl90PiB7IHN0YXRpYyBj
b25zdCB1bnNpZ25lZCB2YWx1ZSA9IDExOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IE5ldHdvcmtD
YWNoZUVuY29kZXI6OlNhbHQ8dWludDY0X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVl
ID0gMTM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29ya0NhY2hlRW5jb2Rlcjo6U2FsdDxp
bnQzMl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDE3OyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8aW50NjRfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSAxOTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBOZXR3b3JrQ2Fj
aGVFbmNvZGVyOjpTYWx0PGZsb2F0PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDIz
OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8ZG91Ymxl
PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDI5OyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8dWludDhfdCo+IHsgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHZhbHVlID0gMTAxOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8
Ym9vbD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAzOyB9OwordGVtcGxhdGUgPD4g
c3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDhfdD4geyBzdGF0aWMgY29uc3QgIHVuc2lnbmVkIHZh
bHVlID0gNTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQxNl90PiB7
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDc7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
RW5jb2Rlcjo6U2FsdDx1aW50MzJfdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAx
MTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ2NF90PiB7IHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEzOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29k
ZXI6OlNhbHQ8aW50MzJfdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxNzsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGludDY0X3Q+IHsgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHZhbHVlID0gMTk7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2Fs
dDxmbG9hdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAyMzsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGRvdWJsZT4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQg
dmFsdWUgPSAyOTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ4X3Qq
PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEwMTsgfTsKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFR5cGU+Ci12b2lkIE5ldHdvcmtDYWNoZUVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9y
TnVtYmVyKHVuc2lnbmVkJiBjaGVja3N1bSwgVHlwZSB2YWx1ZSkKK3ZvaWQgRW5jb2Rlcjo6dXBk
YXRlQ2hlY2tzdW1Gb3JOdW1iZXIodW5zaWduZWQmIGNoZWNrc3VtLCBUeXBlIHZhbHVlKQogewot
ICAgIHVuc2lnbmVkIGhhc2ggPSBXVEY6OmludEhhc2goc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSkgXiBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PFR5cGU+Ojp2YWx1ZTsKKyAgICB1bnNp
Z25lZCBoYXNoID0gV1RGOjppbnRIYXNoKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIF4g
RW5jb2Rlcjo6U2FsdDxUeXBlPjo6dmFsdWU7CiAgICAgY2hlY2tzdW0gPSBXVEY6OnBhaXJJbnRI
YXNoKGNoZWNrc3VtLCBoYXNoKTsKIH0KIAogfQorfQogCiAjZW5kaWYKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgJKHJldmlzaW9uIDE4MTAyNCkKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Q
b3NpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CiBzdGF0aWMgdm9pZCB0cmF2ZXJz
ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ4X3QgdHlwZSwgY29uc3QgRnVuY3Rp
b24mIGZ1bmN0aW9uKQpAQCAtNTksMTQgKzYwLDE1IEBAIGlubGluZSB2b2lkIHRyYXZlcnNlQ2Fj
aGVGaWxlcyhjb25zdCBTdHIKICAgICB0cmF2ZXJzZURpcmVjdG9yeShjYWNoZVBhdGgsIERUX0RJ
UiwgWyZjYWNoZVBhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lKSB7CiAg
ICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlUGF0aCwgc3ViZGlyTmFtZSk7CiAgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5
KHBhcnRpdGlvblBhdGgsIERUX1JFRywgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAh
PSBOZXR3b3JrQ2FjaGVLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChm
aWxlTmFtZS5sZW5ndGgoKSAhPSBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0
aCk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30K
K30KIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWwuaAkocmV2aXNpb24gMTgxMDI0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDE5ICszNCwyMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBOZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya0NhY2hlSU9D
aGFubmVsPiB7CitjbGFzcyBJT0NoYW5uZWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SU9DaGFubmVsPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBlIHsgUmVhZCwgV3JpdGUs
IENyZWF0ZSB9OwotICAgIHN0YXRpYyBSZWY8TmV0d29ya0NhY2hlSU9DaGFubmVsPiBvcGVuKGNv
bnN0IFN0cmluZyYgZmlsZSwgVHlwZSk7CisgICAgc3RhdGljIFJlZjxJT0NoYW5uZWw+IG9wZW4o
Y29uc3QgU3RyaW5nJiBmaWxlLCBUeXBlKTsKIAotICAgIHZvaWQgcmVhZChzaXplX3Qgb2Zmc2V0
LCBzaXplX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoTmV0d29ya0NhY2hlRGF0YSYsIGludCBlcnJv
cik+KTsKLSAgICB2b2lkIHdyaXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IE5ldHdvcmtDYWNoZURh
dGEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGludCBlcnJvcik+KTsKKyAgICB2b2lkIHJlYWQoc2l6
ZV90IG9mZnNldCwgc2l6ZV90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3Ip
Pik7CisgICAgdm9pZCB3cml0ZShzaXplX3Qgb2Zmc2V0LCBjb25zdCBEYXRhJiwgc3RkOjpmdW5j
dGlvbjx2b2lkIChpbnQgZXJyb3IpPik7CiAKICAgICBpbnQgZmlsZURlc2NyaXB0b3IoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVEZXNjcmlwdG9yOyB9CiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya0Nh
Y2hlSU9DaGFubmVsKGludCBmZCk7CisgICAgSU9DaGFubmVsKGludCBmZCk7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBEaXNwYXRjaFB0cjxkaXNwYXRjaF9pb190PiBtX2Rpc3BhdGNoSU87
CkBAIC01NSw2ICs1Niw3IEBAIHByaXZhdGU6CiB9OwogCiB9Cit9CiAKICNlbmRpZgogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQkocmV2aXNpb24gMTgxMDI0
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9D
aGFubmVsQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNw
YWNlIE5ldHdvcmtDYWNoZSB7CiAKLU5ldHdvcmtDYWNoZUlPQ2hhbm5lbDo6TmV0d29ya0NhY2hl
SU9DaGFubmVsKGludCBmZCkKK0lPQ2hhbm5lbDo6SU9DaGFubmVsKGludCBmZCkKICAgICA6IG1f
ZmlsZURlc2NyaXB0b3IoZmQpCiB7CiAgICAgbV9kaXNwYXRjaElPID0gYWRvcHREaXNwYXRjaChk
aXNwYXRjaF9pb19jcmVhdGUoRElTUEFUQ0hfSU9fUkFORE9NLCBmZCwgZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW2ZkXShpbnQpIHsKQEAgLTQ5LDcgKzUwLDcgQEAgTmV0d29ya0NhY2hlSU9D
aGFubmVsOjpOZXR3b3JrQ2FjaGVJT0NoYQogICAgIGRpc3BhdGNoX2lvX3NldF9sb3dfd2F0ZXIo
bV9kaXNwYXRjaElPLmdldCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsK
IH0KIAotUmVmPE5ldHdvcmtDYWNoZUlPQ2hhbm5lbD4gTmV0d29ya0NhY2hlSU9DaGFubmVsOjpv
cGVuKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbDo6VHlwZSB0
eXBlKQorUmVmPElPQ2hhbm5lbD4gSU9DaGFubmVsOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIElPQ2hhbm5lbDo6VHlwZSB0eXBlKQogewogICAgIGludCBvZmxhZzsKICAgICBtb2RlX3Qg
bW9kZTsKQEAgLTcxLDMxICs3MiwzMSBAQCBSZWY8TmV0d29ya0NhY2hlSU9DaGFubmVsPiBOZXR3
b3JrQ2FjaGVJCiAgICAgQ1N0cmluZyBwYXRoID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGZpbGVQYXRoKTsKICAgICBpbnQgZmQgPSA6Om9wZW4ocGF0aC5kYXRhKCksIG9mbGFn
LCBtb2RlKTsKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtDYWNoZUlPQ2hhbm5l
bChmZCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElPQ2hhbm5lbChmZCkpOwogfQogCi12
b2lkIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbDo6cmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkICggTmV0d29ya0NhY2hlRGF0YSYsIGludCBlcnJvcik+IGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBJT0NoYW5uZWw6OnJlYWQoc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoIERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8TmV0d29ya0NhY2hlSU9DaGFubmVsPiBjaGFubmVs
KHRoaXMpOworICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7CiAgICAgYm9vbCBk
aWRDYWxsQ29tcGxldGlvbkhhbmRsZXIgPSBmYWxzZTsKICAgICBkaXNwYXRjaF9pb19yZWFkKG1f
ZGlzcGF0Y2hJTy5nZXQoKSwgb2Zmc2V0LCBzaXplLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbY2hhbm5lbCwgY29tcGxldGlvbkhhbmRsZXIsIGRpZENhbGxDb21wbGV0aW9uSGFuZGxlcl0o
Ym9vbCBkb25lLCBkaXNwYXRjaF9kYXRhX3QgZmlsZURhdGEsIGludCBlcnJvcikgbXV0YWJsZSB7
CiAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgICBpZiAoIWRpZENhbGxDb21wbGV0aW9u
SGFuZGxlcikgewotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNoZURhdGEgbnVsbERhdGE7Cisg
ICAgICAgICAgICAgICAgRGF0YSBudWxsRGF0YTsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxsRGF0YSwgZXJyb3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVCghZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVy
KTsKLSAgICAgICAgTmV0d29ya0NhY2hlRGF0YSBkYXRhKGZpbGVEYXRhKTsKKyAgICAgICAgRGF0
YSBkYXRhKGZpbGVEYXRhKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgZXJyb3Ip
OwogICAgICAgICBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIgPSB0cnVlOwogICAgIH0pOwogfQog
Ci12b2lkIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbDo6d3JpdGUoc2l6ZV90IG9mZnNldCwgY29uc3Qg
TmV0d29ya0NhY2hlRGF0YSYgZGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQgZXJyb3IpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgSU9DaGFubmVsOjp3cml0ZShzaXplX3Qgb2Zmc2V0LCBj
b25zdCBEYXRhJiBkYXRhLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGludCBlcnJvcik+IGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIFJlZlB0cjxOZXR3b3JrQ2FjaGVJT0NoYW5uZWw+IGNoYW5uZWwo
dGhpcyk7CisgICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKICAgICBhdXRvIGRp
c3BhdGNoRGF0YSA9IGRhdGEuZGlzcGF0Y2hEYXRhKCk7CiAgICAgZGlzcGF0Y2hfaW9fd3JpdGUo
bV9kaXNwYXRjaElPLmdldCgpLCBvZmZzZXQsIGRpc3BhdGNoRGF0YSwgZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW2NoYW5uZWwsIGNvbXBsZXRpb25IYW5kbGVyXShib29sIGRvbmUsIGRpc3Bh
dGNoX2RhdGFfdCBmaWxlRGF0YSwgaW50IGVycm9yKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
ZG9uZSwgZG9uZSk7CkBAIC0xMDQsNCArMTA1LDYgQEAgdm9pZCBOZXR3b3JrQ2FjaGVJT0NoYW5u
ZWw6OndyaXRlKHNpemVfdAogfQogCiB9Cit9CisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3Bw
CShyZXZpc2lvbiAxODEwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBACiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
K25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi1OZXR3b3JrQ2FjaGVLZXk6Ok5ldHdvcmtDYWNo
ZUtleShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIG8pCitLZXk6OktleShjb25zdCBLZXkmIG8pCiAg
ICAgOiBtX21ldGhvZChvLm1fbWV0aG9kLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9wYXJ0aXRp
b24oby5tX3BhcnRpdGlvbi5pc29sYXRlZENvcHkoKSkKICAgICAsIG1faWRlbnRpZmllcihvLm1f
aWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKQEAgLTQzLDcgKzQ0LDcgQEAgTmV0d29ya0NhY2hl
S2V5OjpOZXR3b3JrQ2FjaGVLZXkoY29uc3QgTgogewogfQogCi1OZXR3b3JrQ2FjaGVLZXk6Ok5l
dHdvcmtDYWNoZUtleShOZXR3b3JrQ2FjaGVLZXkmJiBvKQorS2V5OjpLZXkoS2V5JiYgbykKICAg
ICA6IG1fbWV0aG9kKFdURjo6bW92ZShvLm1fbWV0aG9kKSkKICAgICAsIG1fcGFydGl0aW9uKFdU
Rjo6bW92ZShvLm1fcGFydGl0aW9uKSkKICAgICAsIG1faWRlbnRpZmllcihXVEY6Om1vdmUoby5t
X2lkZW50aWZpZXIpKQpAQCAtNTEsNyArNTIsNyBAQCBOZXR3b3JrQ2FjaGVLZXk6Ok5ldHdvcmtD
YWNoZUtleShOZXR3b3JrCiB7CiB9CiAKLU5ldHdvcmtDYWNoZUtleTo6TmV0d29ya0NhY2hlS2V5
KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvbiwgY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyKQorS2V5OjpLZXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0
cmluZyYgcGFydGl0aW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiAgICAgOiBtX21ldGhv
ZChtZXRob2QuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3BhcnRpdGlvbihwYXJ0aXRpb24uaXNv
bGF0ZWRDb3B5KCkpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllci5pc29sYXRlZENvcHko
KSkKQEAgLTU5LDcgKzYwLDcgQEAgTmV0d29ya0NhY2hlS2V5OjpOZXR3b3JrQ2FjaGVLZXkoY29u
c3QgUwogewogfQogCi1OZXR3b3JrQ2FjaGVLZXkmIE5ldHdvcmtDYWNoZUtleTo6b3BlcmF0b3I9
KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYgb3RoZXIpCitLZXkmIEtleTo6b3BlcmF0b3I9KGNvbnN0
IEtleSYgb3RoZXIpCiB7CiAgICAgbV9tZXRob2QgPSBvdGhlci5tX21ldGhvZC5pc29sYXRlZENv
cHkoKTsKICAgICBtX3BhcnRpdGlvbiA9IG90aGVyLm1fcGFydGl0aW9uLmlzb2xhdGVkQ29weSgp
OwpAQCAtODEsNyArODIsNyBAQCBzdGF0aWMgdm9pZCBoYXNoU3RyaW5nKE1ENSYgbWQ1LCBjb25z
dCBTCiAgICAgbWQ1LmFkZEJ5dGVzKCZ6ZXJvLCAxKTsKIH0KIAotTmV0d29ya0NhY2hlS2V5OjpI
YXNoVHlwZSBOZXR3b3JrQ2FjaGVLZXk6OmNvbXB1dGVIYXNoKCkgY29uc3QKK0tleTo6SGFzaFR5
cGUgS2V5Ojpjb21wdXRlSGFzaCgpIGNvbnN0CiB7CiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5l
ZWQgYSBjcnlwdG9ncmFwaGljIGhhc2guIFRoZSBrZXkgaXMgYWx3YXlzIHZlcmlmaWVkIGFnYWlu
c3QgdGhlIGVudHJ5IGhlYWRlci4KICAgICAvLyBNRDUganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRh
Ymx5IHNpemVkLCBmYXN0IGFuZCBhdmFpbGFibGUuCkBAIC05NCw3ICs5NSw3IEBAIE5ldHdvcmtD
YWNoZUtleTo6SGFzaFR5cGUgTmV0d29ya0NhY2hlS2UKICAgICByZXR1cm4gaGFzaDsKIH0KIAot
U3RyaW5nIE5ldHdvcmtDYWNoZUtleTo6aGFzaEFzU3RyaW5nKCkgY29uc3QKK1N0cmluZyBLZXk6
Omhhc2hBc1N0cmluZygpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAg
IGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGhhc2hTdHJpbmdMZW5ndGgoKSk7CkBAIC0xMDUsNyAr
MTA2LDcgQEAgU3RyaW5nIE5ldHdvcmtDYWNoZUtleTo6aGFzaEFzU3RyaW5nKCkgYwogICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlw
ZT4gYm9vbCBoZXhEaWdpdHNUb0hhc2goQ2hhclR5cGUqIGNoYXJhY3RlcnMsIE5ldHdvcmtDYWNo
ZUtleTo6SGFzaFR5cGUmIGhhc2gpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IGJvb2wg
aGV4RGlnaXRzVG9IYXNoKENoYXJUeXBlKiBjaGFyYWN0ZXJzLCBLZXk6Okhhc2hUeXBlJiBoYXNo
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoaGFzaCk7ICsraSkgewog
ICAgICAgICBhdXRvIGhpZ2ggPSBjaGFyYWN0ZXJzWzIgKiBpXTsKQEAgLTExNyw3ICsxMTgsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IGJvb2wgaGV4RGlnCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goY29uc3QgU3RyaW5n
JiBzdHJpbmcsIEhhc2hUeXBlJiBoYXNoKQorYm9vbCBLZXk6OnN0cmluZ1RvSGFzaChjb25zdCBT
dHJpbmcmIHN0cmluZywgSGFzaFR5cGUmIGhhc2gpCiB7CiAgICAgaWYgKHN0cmluZy5sZW5ndGgo
KSAhPSBoYXNoU3RyaW5nTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNiwx
MiArMTI3LDEyIEBAIGJvb2wgTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goY29uc3QKICAg
ICByZXR1cm4gaGV4RGlnaXRzVG9IYXNoKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgaGFzaCk7CiB9
CiAKLWJvb2wgTmV0d29ya0NhY2hlS2V5OjpvcGVyYXRvcj09KGNvbnN0IE5ldHdvcmtDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Citib29sIEtleTo6b3BlcmF0b3I9PShjb25zdCBLZXkmIG90aGVyKSBj
b25zdAogewogICAgIHJldHVybiBtX2hhc2ggPT0gb3RoZXIubV9oYXNoICYmIG1fbWV0aG9kID09
IG90aGVyLm1fbWV0aG9kICYmIG1fcGFydGl0aW9uID09IG90aGVyLm1fcGFydGl0aW9uICYmIG1f
aWRlbnRpZmllciA9PSBvdGhlci5tX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hl
S2V5OjplbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgS2V5
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fbWV0
aG9kOwogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb247CkBAIC0xMzksMTEgKzE0MCwxMiBAQCB2
b2lkIE5ldHdvcmtDYWNoZUtleTo6ZW5jb2RlKE5ldHdvcmtDYWNoCiAgICAgZW5jb2RlciA8PCBt
X2hhc2g7CiB9CiAKLWJvb2wgTmV0d29ya0NhY2hlS2V5OjpkZWNvZGUoTmV0d29ya0NhY2hlRGVj
b2RlciYgZGVjb2RlciwgTmV0d29ya0NhY2hlS2V5JiBrZXkpCitib29sIEtleTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIEtleSYga2V5KQogewogICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShr
ZXkubV9tZXRob2QpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rl
ci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faGFzaCk7
CiB9CiAKIH0KK30KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAkocmV2aXNpb24gMTgxMDI0KQor
KysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDIwICszMiwyMSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUg
ewogCi1jbGFzcyBOZXR3b3JrQ2FjaGVFbmNvZGVyOwotY2xhc3MgTmV0d29ya0NhY2hlRGVjb2Rl
cjsKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOwogCi1jbGFzcyBOZXR3b3JrQ2FjaGVL
ZXkgeworY2xhc3MgS2V5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIE1ENTo6RGlnZXN0IEhhc2hU
eXBlOwogCi0gICAgTmV0d29ya0NhY2hlS2V5KCkgeyB9Ci0gICAgTmV0d29ya0NhY2hlS2V5KGNv
bnN0IE5ldHdvcmtDYWNoZUtleSYpOwotICAgIE5ldHdvcmtDYWNoZUtleShOZXR3b3JrQ2FjaGVL
ZXkmJik7Ci0gICAgTmV0d29ya0NhY2hlS2V5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBT
dHJpbmcmIHBhcnRpdGlvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICBLZXkoKSB7
IH0KKyAgICBLZXkoY29uc3QgS2V5Jik7CisgICAgS2V5KEtleSYmKTsKKyAgICBLZXkoY29uc3Qg
U3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uLCBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIpOwogCi0gICAgTmV0d29ya0NhY2hlS2V5JiBvcGVyYXRvcj0oY29uc3QgTmV0d29y
a0NhY2hlS2V5Jik7CisgICAgS2V5JiBvcGVyYXRvcj0oY29uc3QgS2V5Jik7CiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllci5pc051bGwoKTsgfQogCkBAIC02
MiwxMSArNjMsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBzaXplX3QgaGFzaFN0cmluZ0xlbmd0
aCgpIHsgcmV0dXJuIDIgKiBzaXplb2YobV9oYXNoKTsgfQogICAgIFN0cmluZyBoYXNoQXNTdHJp
bmcoKSBjb25zdDsKIAotICAgIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImKSBjb25z
dDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYsIE5ldHdvcmtD
YWNoZUtleSYpOworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIEtleSYpOwogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE5ldHdvcmtDYWNoZUtleSYpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBOZXR3
b3JrQ2FjaGVLZXkmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
IAogcHJpdmF0ZToKICAgICBIYXNoVHlwZSBjb21wdXRlSGFzaCgpIGNvbnN0OwpAQCAtNzgsNiAr
NzksNyBAQCBwcml2YXRlOgogfTsKIAogfQorfQogCiAjZW5kaWYKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuaAkocmV2aXNpb24gMTgxMDI0KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwyMCArMzgsMjEgQEAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzIHsKK2NsYXNzIFN0YXRpc3RpY3MgewogcHVibGljOgotICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gb3Blbihjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPiBv
cGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAg
IHZvaWQgcmVjb3JkTm90Q2FjaGluZ1Jlc3BvbnNlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIE5l
dHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbik7Ci0gICAgdm9pZCByZWNvcmROb3RVc2luZ0NhY2hl
Rm9yUmVxdWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNp
c2lvbik7Ci0gICAgdm9pZCByZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJ
RCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7Ci0gICAgdm9pZCByZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh1aW50NjRfdCB3ZWJQYWdl
SUQsIGNvbnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZhaWx1cmUpOworICAgIHZvaWQgcmVj
b3JkTm90Q2FjaGluZ1Jlc3BvbnNlKGNvbnN0IEtleSYsIFN0b3JlRGVjaXNpb24pOworICAgIHZv
aWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlELCBjb25z
dCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBSZXRyaWV2ZURlY2lzaW9u
KTsKKyAgICB2b2lkIHJlY29yZFJldHJpZXZhbEZhaWx1cmUodWludDY0X3Qgd2ViUGFnZUlELCBj
b25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJl
Y29yZFJldHJpZXZlZENhY2hlZEVudHJ5KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5Jiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUp
OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVBhdGgpOworICAgIGV4cGxpY2l0IFN0YXRpc3RpY3MoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VQYXRoKTsKICAgICB2b2lkIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3Qg
U3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKTsKQEAgLTU5LDcgKzYwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgYWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKTsKIAotICAgIHR5
cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc0V2ZXJSZXF1ZXN0ZWQsIGNvbnN0IE9w
dGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mKT4gUmVxdWVzdGVkQ29tcGxldGlv
bkhhbmRsZXI7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJl
cXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8U3RvcmVEZWNpc2lvbj4mKT4gUmVxdWVzdGVkQ29tcGxl
dGlvbkhhbmRsZXI7CiAgICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5n
JiwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImKTsKICAgICB2b2lkIG1hcmtBc1Jl
cXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpOwogCkBAIC03Nyw3ICs3OCw4IEBAIHByaXZhdGU6
CiAgICAgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKIH07CiAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAorfQorfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0JKHJldmlzaW9uIDE4MTAy
NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOSBAQAogI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzRGF0
YWJhc2VOYW1lID0gIldlYktpdENhY2hlU3RhdGlzdGljcy5kYiI7CitzdGF0aWMgY29uc3QgY2hh
ciogU3RhdGlzdGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOwog
CiBzdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYg
ZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtNzAsMTUgKzcxLDE1IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZToKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29ya0NhY2hl
U3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3N0ZDo6dW5pcXVlX3B0
cjxTdGF0aXN0aWNzPiBTdGF0aXN0aWNzOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTdHJpbmcgZGF0YWJhc2VQ
YXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgbmV0d29y
a0NhY2hlU3RhdGlzdGljc0RhdGFiYXNlTmFtZSk7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPihuZXcgTmV0d29ya0NhY2hlU3RhdGlzdGljcyhkYXRh
YmFzZVBhdGgpKTsKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgU3RhdGlzdGljc0RhdGFiYXNlTmFtZSk7CisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPihuZXcgU3RhdGlzdGljcyhkYXRhYmFz
ZVBhdGgpKTsKIH0KIAotTmV0d29ya0NhY2hlU3RhdGlzdGljczo6TmV0d29ya0NhY2hlU3RhdGlz
dGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKK1N0YXRpc3RpY3M6OlN0YXRpc3RpY3Mo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgOiBtX2JhY2tncm91bmRJT1F1ZXVlKGFk
b3B0RGlzcGF0Y2goZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hl
LlN0YXRpc3RpY3MuQmFja2dyb3VuZCIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpKQogewogICAg
IGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9CQUNLR1JPVU5E
LCAwKSk7CkBAIC04NiwxNCArODcsMTQgQEAgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6TmV0d29y
a0NhY2hlU3RhdAogICAgIGluaXRpYWxpemUoZGF0YWJhc2VQYXRoKTsKIH0KIAotdm9pZCBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRo
KQordm9pZCBTdGF0aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRo
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvIHN0YXJ0VGlt
ZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogCiAgICAgU3RyaW5nQ2FwdHVy
ZSBkYXRhYmFzZVBhdGhDYXB0dXJlKGRhdGFiYXNlUGF0aCk7Ci0gICAgU3RyaW5nQ2FwdHVyZSBu
ZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZShOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JhZ2VQ
YXRoKCkpOworICAgIFN0cmluZ0NhcHR1cmUgbmV0d29ya0NhY2hlUGF0aENhcHR1cmUoc2luZ2xl
dG9uKCkuc3RvcmFnZVBhdGgoKSk7CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9R
dWV1ZS5nZXQoKSwgW3RoaXMsIGRhdGFiYXNlUGF0aENhcHR1cmUsIG5ldHdvcmtDYWNoZVBhdGhD
YXB0dXJlLCBzdGFydFRpbWVdIHsKICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25J
blByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwogCkBAIC0xMzUsNyArMTM2
LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKAogICAgIH0pOwog
fQogCi12b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2Fj
aGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKQordm9pZCBTdGF0aXN0aWNzOjpib290
c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2hlUGF0aCkKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTUxLDcgKzE1Miw3IEBAIHZv
aWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9vdHN0cmFwRnIKICAgICBib290c3RyYXBUcmFu
c2FjdGlvbi5jb21taXQoKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpzaHJp
bmtJZk5lZWRlZCgpCit2b2lkIFN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIGNvbnN0IHNpemVfdCBtYXhFbnRyaWVzID0g
MTAwMDAwOwpAQCAtMTYzLDE2ICsxNjQsMTYgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
OjpzaHJpbmtJZk5lZQogCiAgICAgY2xlYXIoKTsKIAotICAgIFN0cmluZ0NhcHR1cmUgbmV0d29y
a0NhY2hlUGF0aENhcHR1cmUoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yYWdlUGF0aCgp
KTsKKyAgICBTdHJpbmdDYXB0dXJlIG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlKHNpbmdsZXRvbigp
LnN0b3JhZ2VQYXRoKCkpOwogICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUu
Z2V0KCksIFt0aGlzLCBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZV0gewogICAgICAgICBib290c3Ry
YXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKICAg
ICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc3RhdGlzdGljcyBjYWNo
ZSBzaHJpbmsgY29tcGxldGVkIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50PSVsdSIsIHN0YXRpY19j
YXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpKTsKICAgICB9KTsKIH0KIAotdm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2UoY29uc3Qg
TmV0d29ya0NhY2hlS2V5JiBrZXksIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbiBzdG9yZURl
Y2lzaW9uKQordm9pZCBTdGF0aXN0aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2UoY29uc3Qg
S2V5JiBrZXksIFN0b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbikKIHsKLSAgICBBU1NFUlQoc3Rv
cmVEZWNpc2lvbiAhPSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Olllcyk7CisgICAgQVNT
RVJUKHN0b3JlRGVjaXNpb24gIT0gU3RvcmVEZWNpc2lvbjo6WWVzKTsKIAogICAgIFN0cmluZ0Nh
cHR1cmUgaGFzaENhcHR1cmUoa2V5Lmhhc2hBc1N0cmluZygpKTsKICAgICBkaXNwYXRjaF9hc3lu
YyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmUsIHN0b3JlRGVj
aXNpb25dIHsKQEAgLTE4OCwzMSArMTg5LDMxIEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkTm90Q2EKICAgICB9KTsKIH0KIAotc3RhdGljIFN0cmluZyByZXRyaWV2ZURlY2lz
aW9uVG9EaWFnbm9zdGljS2V5KE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbiByZXRyaWV2
ZURlY2lzaW9uKQorc3RhdGljIFN0cmluZyByZXRyaWV2ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5
KFJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lvbikKIHsKICAgICBzd2l0Y2ggKHJldHJp
ZXZlRGVjaXNpb24pIHsKLSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbjo6
Tm9EdWVUb1Byb3RvY29sOgorICAgIGNhc2UgUmV0cmlldmVEZWNpc2lvbjo6Tm9EdWVUb1Byb3Rv
Y29sOgogICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub3RI
VFRQRmFtaWx5S2V5KCk7Ci0gICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb246
Ok5vRHVlVG9IVFRQTWV0aG9kOgorICAgIGNhc2UgUmV0cmlldmVEZWNpc2lvbjo6Tm9EdWVUb0hU
VFBNZXRob2Q6CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpOwotICAgIGNhc2UgTmV0d29ya0NhY2hlOjpSZXRy
aWV2ZURlY2lzaW9uOjpOb0R1ZVRvQ29uZGl0aW9uYWxSZXF1ZXN0OgorICAgIGNhc2UgUmV0cmll
dmVEZWNpc2lvbjo6Tm9EdWVUb0NvbmRpdGlvbmFsUmVxdWVzdDoKICAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNDb25kaXRpb25hbFJlcXVlc3RLZXkoKTsK
LSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbjo6Tm9EdWVUb1JlbG9hZEln
bm9yaW5nQ2FjaGU6CisgICAgY2FzZSBSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUmVsb2FkSWdu
b3JpbmdDYWNoZToKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5
czo6aXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YUtleSgpOwotICAgIGNhc2UgTmV0d29ya0NhY2hl
OjpSZXRyaWV2ZURlY2lzaW9uOjpZZXM6CisgICAgY2FzZSBSZXRyaWV2ZURlY2lzaW9uOjpZZXM6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlELCBjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lvbikK
K3ZvaWQgU3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qg
d2ViUGFnZUlELCBjb25zdCBLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXRyaWV2ZURlY2lzaW9uIHJldHJpZXZlRGVjaXNpb24pCiB7Ci0gICAgQVNT
RVJUKHJldHJpZXZlRGVjaXNpb24gIT0gTmV0d29ya0NhY2hlOjpSZXRyaWV2ZURlY2lzaW9uOjpZ
ZXMpOworICAgIEFTU0VSVChyZXRyaWV2ZURlY2lzaW9uICE9IFJldHJpZXZlRGVjaXNpb246Olll
cyk7CiAKICAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3Jl
OjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVz
dGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVj
aXNpb25dKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hl
OjpTdG9yZURlY2lzaW9uPiYpIHsKKyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3Ro
aXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRCwgcmV0cmlldmVEZWNpc2lvbl0oYm9vbCB3
YXNFdmVyUmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxTdG9yZURlY2lzaW9uPiYpIHsKICAgICAg
ICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKICAgICAgICAgICAgIFN0cmluZyBkaWFnbm9zdGlj
S2V5ID0gcmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShyZXRyaWV2ZURlY2lzaW9uKTsK
ICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJ
RCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgYnV0IHdlIGFyZSBub3QgdXNpbmcg
dGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjIyLDMxICsy
MjMsMzEgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RVcwogICAgIH0p
OwogfQogCi1zdGF0aWMgU3RyaW5nIHN0b3JlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkoTmV0d29y
a0NhY2hlOjpTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24pCitzdGF0aWMgU3RyaW5nIHN0b3Jl
RGVjaXNpb25Ub0RpYWdub3N0aWNLZXkoU3RvcmVEZWNpc2lvbiBzdG9yZURlY2lzaW9uKQogewog
ICAgIHN3aXRjaCAoc3RvcmVEZWNpc2lvbikgewotICAgIGNhc2UgTmV0d29ya0NhY2hlOjpTdG9y
ZURlY2lzaW9uOjpOb0R1ZVRvUHJvdG9jb2w6CisgICAgY2FzZSBTdG9yZURlY2lzaW9uOjpOb0R1
ZVRvUHJvdG9jb2w6CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om5vdEhUVFBGYW1pbHlLZXkoKTsKLSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNp
c2lvbjo6Tm9EdWVUb0hUVFBNZXRob2Q6CisgICAgY2FzZSBTdG9yZURlY2lzaW9uOjpOb0R1ZVRv
SFRUUE1ldGhvZDoKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5
czo6dW5zdXBwb3J0ZWRIVFRQTWV0aG9kS2V5KCk7Ci0gICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlN0
b3JlRGVjaXNpb246Ok5vRHVlVG9BdHRhY2htZW50UmVzcG9uc2U6CisgICAgY2FzZSBTdG9yZURl
Y2lzaW9uOjpOb0R1ZVRvQXR0YWNobWVudFJlc3BvbnNlOgogICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0F0dGFjaG1lbnRLZXkoKTsKLSAgICBjYXNlIE5l
dHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6Tm9EdWVUb05vU3RvcmVSZXNwb25zZToKKyAgICBj
YXNlIFN0b3JlRGVjaXNpb246Ok5vRHVlVG9Ob1N0b3JlUmVzcG9uc2U6CiAgICAgICAgIHJldHVy
biBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmNhY2hlQ29udHJvbE5vU3RvcmVLZXko
KTsKLSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBTdGF0
dXNDb2RlOgorICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBTdGF0dXNDb2RlOgog
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bmNhY2hlYWJs
ZVN0YXR1c0NvZGVLZXkoKTsKLSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6
WWVzOgorICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6WWVzOgogICAgICAgICAvLyBJdCB3YXMgc3Rv
cmVkIGJ1dCBjb3VsZCBub3QgYmUgcmV0cmlldmVkIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHBydW5l
ZCBmcm9tIHRoZSBjYWNoZS4KICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dn
aW5nS2V5czo6bm9Mb25nZXJJbkNhY2hlS2V5KCk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWls
dXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgU3RhdGlzdGljczo6cmVj
b3JkUmV0cmlldmFsRmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtleSYga2V5LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgU3RyaW5nIGhh
c2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSBy
ZXF1ZXN0LnVybCgpOwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFz
aCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNv
bnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3JlRGVjaXNpb24p
IHsKKyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gsIHJlcXVlc3RV
UkwsIHdlYlBhZ2VJRF0oYm9vbCB3YXNQcmV2aW91c2x5UmVxdWVzdGVkLCBjb25zdCBPcHRpb25h
bDxTdG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbikgewogICAgICAgICBpZiAod2FzUHJldmlv
dXNseVJlcXVlc3RlZCkgewogICAgICAgICAgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSBzdG9y
ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KHN0b3JlRGVjaXNpb24udmFsdWUoKSk7CiAgICAgICAg
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTog
JXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdCBidXQgaXMgbm90IGluIHRoZSBjYWNoZSwgcmVhc29u
OiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgZGlh
Z25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKQEAgLTI1NiwyNiArMjU3LDI2IEBAIHZvaWQgTmV0
d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmkKICAgICB9KTsKIH0KIAotc3RhdGljIFN0
cmluZyBjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleShOZXR3b3JrQ2FjaGU6
OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCitzdGF0aWMgU3RyaW5nIGNhY2hlZEVu
dHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlIGZh
aWx1cmUpCiB7CiAgICAgc3dpdGNoIChmYWlsdXJlKSB7Ci0gICAgY2FzZSBOZXR3b3JrQ2FjaGU6
OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpWYXJ5aW5nSGVhZGVyTWlzbWF0Y2g6CisgICAgY2Fz
ZSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6VmFyeWluZ0hlYWRlck1pc21hdGNoOgogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp2YXJ5aW5nSGVhZGVyTWlz
bWF0Y2hLZXkoKTsKLSAgICBjYXNlIE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZhaWx1
cmU6Ok1pc3NpbmdWYWxpZGF0b3JGaWVsZHM6CisgICAgY2FzZSBDYWNoZWRFbnRyeVJldXNlRmFp
bHVyZTo6TWlzc2luZ1ZhbGlkYXRvckZpZWxkczoKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRp
YWdub3N0aWNMb2dnaW5nS2V5czo6bWlzc2luZ1ZhbGlkYXRvckZpZWxkc0tleSgpOwotICAgIGNh
c2UgTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI6CisgICAgY2Fz
ZSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI6CiAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om90aGVyS2V5KCk7Ci0gICAgY2FzZSBOZXR3b3JrQ2Fj
aGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpOb25lOgorICAgIGNhc2UgQ2FjaGVkRW50cnlS
ZXVzZUZhaWx1cmU6Ok5vbmU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXZvaWQgTmV0
d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qg
d2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JrQ2FjaGU6OkNhY2hlZEVudHJ5UmV1c2VGYWls
dXJlIGZhaWx1cmUpCit2b2lkIFN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5
KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSkKIHsK
ICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgaWYgKGZh
aWx1cmUgPT0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6Tm9uZSkgewor
ICAgIGlmIChmYWlsdXJlID09IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpOb25lKSB7CiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAl
cyBpcyBpbiB0aGUgY2FjaGUgYW5kIGlzIHVzZWQiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9u
KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpyZXRyaWV2YWxLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdS
ZXN1bHRQYXNzLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olllcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI4Niw3ICsyODcsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFJl
dHJpCiAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpuZXR3
b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzYWJsZUNh
Y2hlZEVudHJ5S2V5KCksIGRpYWdub3N0aWNLZXksIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6WWVz
KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjptYXJrQXNSZXF1ZXN0ZWQoY29u
c3QgU3RyaW5nJiBoYXNoKQordm9pZCBTdGF0aXN0aWNzOjptYXJrQXNSZXF1ZXN0ZWQoY29uc3Qg
U3RyaW5nJiBoYXNoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTMw
MCw3ICszMDEsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1JlcXVlCiAg
ICAgc2hyaW5rSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpx
dWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBSZXF1ZXN0ZWRD
b21wbGV0aW9uSGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0YXRpc3RpY3M6OnF1
ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gsIGNvbnN0IFJlcXVlc3RlZENv
bXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCkBAIC0zMTAsMTQgKzMxMSwxNCBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlCiAgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9R
dWV1ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0gewogICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFu
c2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CiAgICAgICAg
IGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNlOwotICAgICAgICBPcHRpb25hbDxOZXR3
b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb247CisgICAgICAgIE9wdGlvbmFs
PFN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb247CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIEFscmVhZHlSZXF1ZXN0ZWQuaGFzaCwg
cmVhc29uIEZST00gQWxyZWFkeVJlcXVlc3RlZCBMRUZUIE9VVEVSIEpPSU4gVW5jYWNoZWRSZWFz
b24gT04gQWxyZWFkeVJlcXVlc3RlZC5oYXNoPVVuY2FjaGVkUmVhc29uLmhhc2ggV0hFUkUgQWxy
ZWFkeVJlcXVlc3RlZC5oYXNoPT8iKSk7CiAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgewogICAgICAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50
LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgICAgICAgICAgICAg
d2FzQWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlRGVj
aXNpb24gPSBzdGF0ZW1lbnQuaXNDb2x1bW5OdWxsKDEpID8gTmV0d29ya0NhY2hlOjpTdG9yZURl
Y2lzaW9uOjpZZXMgOiBzdGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZURlY2lz
aW9uID0gc3RhdGVtZW50LmlzQ29sdW1uTnVsbCgxKSA/IFN0b3JlRGVjaXNpb246OlllcyA6IHN0
YXRpY19jYXN0PFN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzI4LDcgKzMyOSw3
IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmUKICAgICB9KTsKIH0K
IAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpjbGVhcigpCit2b2lkIFN0YXRpc3RpY3M6
OmNsZWFyKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0zNDUsNyAr
MzQ2LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpjbGVhcigpCiAgICAgfSk7CiB9
CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkSGFzaFRvRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBoYXNoKQordm9pZCBTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShjb25zdCBT
dHJpbmcmIGhhc2gpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNT
RVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOwpAQCAtMzYyLDYgKzM2Myw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
YWRkSGFzaFRvRGEKICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OwogfQogCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKK30KK30KIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBQ0hFKQpJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkocmV2aXNpb24gMTgxMDI0KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwzMyArMzYsMjUgQEAKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
U2hhcmVkQnVmZmVyOwotfQotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEFyZ3VtZW50RW5jb2Rl
cjsKLWNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKLX0KLQogbmFtZXNwYWNlIFdlYktpdCB7CituYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKIAotY2xhc3MgTmV0d29ya0NhY2hlU3RvcmFnZSB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0NhY2hlU3RvcmFnZSk7CitjbGFzcyBTdG9yYWdl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5n
JiBjYWNoZVBhdGgpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gb3Blbihj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7CiAKICAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICBO
ZXR3b3JrQ2FjaGVLZXkga2V5OworICAgICAgICBLZXkga2V5OwogICAgICAgICBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVTdGFtcDsKLSAgICAgICAgTmV0d29ya0NhY2hlRGF0YSBoZWFk
ZXI7Ci0gICAgICAgIE5ldHdvcmtDYWNoZURhdGEgYm9keTsKKyAgICAgICAgRGF0YSBoZWFkZXI7
CisgICAgICAgIERhdGEgYm9keTsKICAgICB9OwogICAgIC8vIFRoaXMgbWF5IGNhbGwgY29tcGxl
dGlvbiBoYW5kbGVyIHN5bmNocm9ub3VzbHkgb24gZmFpbHVyZS4KICAgICB0eXBlZGVmIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IFJldHJpZXZlQ29tcGxldGlv
bkhhbmRsZXI7Ci0gICAgdm9pZCByZXRyaWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCB1bnNp
Z25lZCBwcmlvcml0eSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIHJl
dHJpZXZlKGNvbnN0IEtleSYsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25I
YW5kbGVyJiYpOwogCi0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vz
cywgY29uc3QgTmV0d29ya0NhY2hlRGF0YSYgbWFwcGVkQm9keSk+IFN0b3JlQ29tcGxldGlvbkhh
bmRsZXI7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2VzcywgY29u
c3QgRGF0YSYgbWFwcGVkQm9keSk+IFN0b3JlQ29tcGxldGlvbkhhbmRsZXI7CiAgICAgdm9pZCBz
dG9yZShjb25zdCBFbnRyeSYsIFN0b3JlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCB1
cGRhdGUoY29uc3QgRW50cnkmIHVwZGF0ZUVudHJ5LCBjb25zdCBFbnRyeSYgZXhpc3RpbmdFbnRy
eSwgU3RvcmVDb21wbGV0aW9uSGFuZGxlciYmKTsKIApAQCAtNzgsMTYgKzcwLDE2IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2Rp
cmVjdG9yeVBhdGg7IH0KIAogcHJpdmF0ZToKLSAgICBOZXR3b3JrQ2FjaGVTdG9yYWdlKGNvbnN0
IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7CisgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgdm9pZCBkZWxldGVPbGRW
ZXJzaW9ucygpOwogICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQoKTsKIAotICAgIHZvaWQgcmVtb3Zl
RW50cnkoY29uc3QgTmV0d29ya0NhY2hlS2V5Jik7CisgICAgdm9pZCByZW1vdmVFbnRyeShjb25z
dCBLZXkmKTsKIAogICAgIHN0cnVjdCBSZWFkT3BlcmF0aW9uIHsKLSAgICAgICAgTmV0d29ya0Nh
Y2hlS2V5IGtleTsKKyAgICAgICAgS2V5IGtleTsKICAgICAgICAgUmV0cmlldmVDb21wbGV0aW9u
SGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICB9OwogICAgIHZvaWQgZGlzcGF0Y2hSZWFk
T3BlcmF0aW9uKGNvbnN0IFJlYWRPcGVyYXRpb24mKTsKQEAgLTEyNSw1ICsxMTcsNiBAQCBwcml2
YXRlOgogfTsKIAogfQorfQogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlQ29jb2EubW0JKHJldmlzaW9uIDE4MTAyNCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2VDb2NvYS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDYsMjcgKzQ2LDI4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhY2hlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgbmV0d29ya0NhY2hlU3ViZGly
ZWN0b3J5W10gPSAiV2ViS2l0Q2FjaGUiOwogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbkRpcmVj
dG9yeVByZWZpeFtdID0gIlZlcnNpb24gIjsKIAotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNo
ZVN0b3JhZ2U+IE5ldHdvcmtDYWNoZVN0b3JhZ2U6Om9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBh
dGgpCitzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcm
IGNhY2hlUGF0aCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgU3Ry
aW5nIG5ldHdvcmtDYWNoZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y2FjaGVQYXRoLCBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkpOwogICAgIGlmICghV2ViQ29yZTo6
bWFrZUFsbERpcmVjdG9yaWVzKG5ldHdvcmtDYWNoZVBhdGgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhZ2U+KG5l
dyBOZXR3b3JrQ2FjaGVTdG9yYWdlKG5ldHdvcmtDYWNoZVBhdGgpKTsKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFN0b3JhZ2U+KG5ldyBTdG9yYWdlKG5ldHdvcmtDYWNoZVBhdGgpKTsKIH0K
IAogc3RhdGljIFN0cmluZyBtYWtlVmVyc2lvbmVkRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcm
IGJhc2VEaXJlY3RvcnlQYXRoKQogewotICAgIFN0cmluZyB2ZXJzaW9uU3ViZGlyZWN0b3J5ID0g
dmVyc2lvbkRpcmVjdG9yeVByZWZpeCArIFN0cmluZzo6bnVtYmVyKE5ldHdvcmtDYWNoZVN0b3Jh
Z2U6OnZlcnNpb24pOworICAgIFN0cmluZyB2ZXJzaW9uU3ViZGlyZWN0b3J5ID0gdmVyc2lvbkRp
cmVjdG9yeVByZWZpeCArIFN0cmluZzo6bnVtYmVyKFN0b3JhZ2U6OnZlcnNpb24pOwogICAgIHJl
dHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURpcmVjdG9yeVBhdGgs
IHZlcnNpb25TdWJkaXJlY3RvcnkpOwogfQogCi1OZXR3b3JrQ2FjaGVTdG9yYWdlOjpOZXR3b3Jr
Q2FjaGVTdG9yYWdlKGNvbnN0IFN0cmluZyYgYmFzZURpcmVjdG9yeVBhdGgpCitTdG9yYWdlOjpT
dG9yYWdlKGNvbnN0IFN0cmluZyYgYmFzZURpcmVjdG9yeVBhdGgpCiAgICAgOiBtX2Jhc2VEaXJl
Y3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKQogICAgICwgbV9kaXJlY3RvcnlQYXRoKG1ha2VW
ZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSkKICAgICAsIG1faW9RdWV1
ZShhZG9wdERpc3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5D
YWNoZS5TdG9yYWdlIiwgRElTUEFUQ0hfUVVFVUVfQ09OQ1VSUkVOVCkpKQpAQCAtNzgsNyArNzks
NyBAQCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpOZXR3b3JrQ2FjaGVTdG9yYWdlCiAgICAgaW5pdGlh
bGl6ZSgpOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmluaXRpYWxpemUoKQordm9p
ZCBTdG9yYWdlOjppbml0aWFsaXplKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCkBAIC04NywxMCArODgsMTAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjppbml0aWFs
aXplKCkKICAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhp
cywgY2FjaGVQYXRoQ2FwdHVyZV0gewogICAgICAgICBTdHJpbmcgY2FjaGVQYXRoID0gY2FjaGVQ
YXRoQ2FwdHVyZS5zdHJpbmcoKTsKICAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlUGF0
aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9u
UGF0aCkgewotICAgICAgICAgICAgTmV0d29ya0NhY2hlS2V5OjpIYXNoVHlwZSBoYXNoOwotICAg
ICAgICAgICAgaWYgKCFOZXR3b3JrQ2FjaGVLZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFz
aCkpCisgICAgICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CisgICAgICAgICAgICBpZiAoIUtl
eTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydEhhc2ggPSBOZXR3b3JrQ2FjaGVLZXk6OnRvU2hv
cnRIYXNoKGhhc2gpOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnRIYXNoID0gS2V5Ojp0b1No
b3J0SGFzaChoYXNoKTsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFt0aGlzLCBzaG9ydEhhc2hdIHsKICAgICAgICAgICAgICAgICBtX2NvbnRl
bnRzRmlsdGVyLmFkZChzaG9ydEhhc2gpOwogICAgICAgICAgICAgfSk7CkBAIC0xMDIsMjkgKzEw
MywyOSBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmluaXRpYWxpemUoKQogICAgIH0pOwog
fQogCi1zdGF0aWMgU3RyaW5nIGRpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hl
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQorc3RhdGljIFN0cmluZyBkaXJlY3Rv
cnlQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKIHsK
ICAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24oKS5pc0VtcHR5KCkpOwogICAgIHJldHVybiBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVQYXRoLCBrZXkucGFydGl0aW9uKCkp
OwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbGVOYW1lRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtl
eSYga2V5KQorc3RhdGljIFN0cmluZyBmaWxlTmFtZUZvcktleShjb25zdCBLZXkmIGtleSkKIHsK
ICAgICByZXR1cm4ga2V5Lmhhc2hBc1N0cmluZygpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbGVQ
YXRoRm9yS2V5KGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBTdHJpbmcmIGNhY2hl
UGF0aCkKK3N0YXRpYyBTdHJpbmcgZmlsZVBhdGhGb3JLZXkoY29uc3QgS2V5JiBrZXksIGNvbnN0
IFN0cmluZyYgY2FjaGVQYXRoKQogewogICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aEZvcktleShrZXksIGNhY2hlUGF0aCksIGZpbGVOYW1l
Rm9yS2V5KGtleSkpOwogfQogCi1zdGF0aWMgUmVmPE5ldHdvcmtDYWNoZUlPQ2hhbm5lbD4gb3Bl
bkZpbGVGb3JLZXkoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIE5ldHdvcmtDYWNoZUlPQ2hh
bm5lbDo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3N0YXRpYyBSZWY8SU9D
aGFubmVsPiBvcGVuRmlsZUZvcktleShjb25zdCBLZXkmIGtleSwgSU9DaGFubmVsOjpUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQogewogICAgIGF1dG8gZGlyZWN0b3J5UGF0aCA9
IGRpcmVjdG9yeVBhdGhGb3JLZXkoa2V5LCBjYWNoZVBhdGgpOwogICAgIGF1dG8gZmlsZVBhdGgg
PSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5UGF0aCwgZmlsZU5h
bWVGb3JLZXkoa2V5KSk7Ci0gICAgaWYgKHR5cGUgPT0gTmV0d29ya0NhY2hlSU9DaGFubmVsOjpU
eXBlOjpDcmVhdGUpCisgICAgaWYgKHR5cGUgPT0gSU9DaGFubmVsOjpUeXBlOjpDcmVhdGUpCiAg
ICAgICAgIFdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhkaXJlY3RvcnlQYXRoKTsKLSAgICBy
ZXR1cm4gTmV0d29ya0NhY2hlSU9DaGFubmVsOjpvcGVuKGZpbGVQYXRoLCB0eXBlKTsKKyAgICBy
ZXR1cm4gSU9DaGFubmVsOjpvcGVuKGZpbGVQYXRoLCB0eXBlKTsKIH0KIAogc3RhdGljIHVuc2ln
bmVkIGhhc2hEYXRhKGRpc3BhdGNoX2RhdGFfdCBkYXRhKQpAQCAtMTQxLDEwICsxNDIsMTMgQEAg
c3RhdGljIHVuc2lnbmVkIGhhc2hEYXRhKGRpc3BhdGNoX2RhdGFfdAogCiBzdHJ1Y3QgRW50cnlN
ZXRhRGF0YSB7CiAgICAgRW50cnlNZXRhRGF0YSgpIHsgfQotICAgIGV4cGxpY2l0IEVudHJ5TWV0
YURhdGEoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkpIDogY2FjaGVTdG9yYWdlVmVyc2lvbihO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjp2ZXJzaW9uKSwga2V5KGtleSkgeyB9CisgICAgZXhwbGljaXQg
RW50cnlNZXRhRGF0YShjb25zdCBLZXkmIGtleSkKKyAgICAgICAgOiBjYWNoZVN0b3JhZ2VWZXJz
aW9uKFN0b3JhZ2U6OnZlcnNpb24pCisgICAgICAgICwga2V5KGtleSkKKyAgICB7IH0KIAogICAg
IHVuc2lnbmVkIGNhY2hlU3RvcmFnZVZlcnNpb247Ci0gICAgTmV0d29ya0NhY2hlS2V5IGtleTsK
KyAgICBLZXkga2V5OwogICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVN0YW1wOwog
ICAgIHVuc2lnbmVkIGhlYWRlckNoZWNrc3VtOwogICAgIHVpbnQ2NF90IGhlYWRlck9mZnNldDsK
QEAgLTE1NCwxMSArMTU4LDExIEBAIHN0cnVjdCBFbnRyeU1ldGFEYXRhIHsKICAgICB1aW50NjRf
dCBib2R5U2l6ZTsKIH07CiAKLXN0YXRpYyBib29sIGRlY29kZUVudHJ5TWV0YURhdGEoRW50cnlN
ZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IE5ldHdvcmtDYWNoZURhdGEmIGZpbGVEYXRhKQorc3Rh
dGljIGJvb2wgZGVjb2RlRW50cnlNZXRhRGF0YShFbnRyeU1ldGFEYXRhJiBtZXRhRGF0YSwgY29u
c3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgZGlz
cGF0Y2hfZGF0YV9hcHBseShmaWxlRGF0YS5kaXNwYXRjaERhdGEoKSwgWyZtZXRhRGF0YSwgJnN1
Y2Nlc3NdKGRpc3BhdGNoX2RhdGFfdCwgc2l6ZV90LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
c2l6ZSkgewotICAgICAgICBOZXR3b3JrQ2FjaGVEZWNvZGVyIGRlY29kZXIocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOworICAgICAgICBEZWNvZGVyIGRlY29k
ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOwogICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24pKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFE
YXRhLmtleSkpCkBAIC0xOTQsMTEgKzE5OCwxMSBAQCBzdGF0aWMgRGlzcGF0Y2hQdHI8ZGlzcGF0
Y2hfZGF0YV90PiBtYXBGCiAgICAgcmV0dXJuIGJvZHlNYXA7CiB9CiAKLXN0YXRpYyBib29sIGRl
Y29kZUVudHJ5SGVhZGVyKGNvbnN0IE5ldHdvcmtDYWNoZURhdGEmIGZpbGVEYXRhLCBFbnRyeU1l
dGFEYXRhJiBtZXRhRGF0YSwgTmV0d29ya0NhY2hlRGF0YSYgZGF0YSkKK3N0YXRpYyBib29sIGRl
Y29kZUVudHJ5SGVhZGVyKGNvbnN0IERhdGEmIGZpbGVEYXRhLCBFbnRyeU1ldGFEYXRhJiBtZXRh
RGF0YSwgRGF0YSYgZGF0YSkKIHsKICAgICBpZiAoIWRlY29kZUVudHJ5TWV0YURhdGEobWV0YURh
dGEsIGZpbGVEYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZXRhRGF0YS5j
YWNoZVN0b3JhZ2VWZXJzaW9uICE9IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnZlcnNpb24pCisgICAg
aWYgKG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24gIT0gU3RvcmFnZTo6dmVyc2lvbikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtZXRhRGF0YS5oZWFkZXJPZmZzZXQgKyBtZXRh
RGF0YS5oZWFkZXJTaXplID4gbWV0YURhdGEuYm9keU9mZnNldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjEyLDEwICsyMTYsMTAgQEAgc3RhdGljIGJvb2wgZGVjb2RlRW50cnlIZWFkZXIo
Y29uc3QgTmV0dwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PiBkZWNvZGVFbnRyeShjb25zdCBOZXR3b3JrQ2Fj
aGVEYXRhJiBmaWxlRGF0YSwgaW50IGZkLCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSkKK3N0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6RW50cnk+IGRlY29kZUVudHJ5KGNvbnN0IERh
dGEmIGZpbGVEYXRhLCBpbnQgZmQsIGNvbnN0IEtleSYga2V5KQogewogICAgIEVudHJ5TWV0YURh
dGEgbWV0YURhdGE7Ci0gICAgTmV0d29ya0NhY2hlRGF0YSBoZWFkZXJEYXRhOworICAgIERhdGEg
aGVhZGVyRGF0YTsKICAgICBpZiAoIWRlY29kZUVudHJ5SGVhZGVyKGZpbGVEYXRhLCBtZXRhRGF0
YSwgaGVhZGVyRGF0YSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yMzUsMTcgKzIz
OSwxNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0b3JhCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+KG5ldyBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeSB7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpFbnRyeT4obmV3IFN0b3JhZ2U6
OkVudHJ5IHsKICAgICAgICAgbWV0YURhdGEua2V5LAogICAgICAgICBtZXRhRGF0YS50aW1lU3Rh
bXAsCiAgICAgICAgIGhlYWRlckRhdGEsCi0gICAgICAgIHsgYm9keURhdGEsIE5ldHdvcmtDYWNo
ZURhdGE6OkJhY2tpbmc6Ok1hcCB9CisgICAgICAgIHsgYm9keURhdGEsIERhdGE6OkJhY2tpbmc6
Ok1hcCB9CiAgICAgfSk7CiB9CiAKIHN0YXRpYyBEaXNwYXRjaFB0cjxkaXNwYXRjaF9kYXRhX3Q+
IGVuY29kZUVudHJ5TWV0YURhdGEoY29uc3QgRW50cnlNZXRhRGF0YSYgZW50cnkpCiB7Ci0gICAg
TmV0d29ya0NhY2hlRW5jb2RlciBlbmNvZGVyOworICAgIEVuY29kZXIgZW5jb2RlcjsKIAogICAg
IGVuY29kZXIgPDwgZW50cnkuY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICBlbmNvZGVyIDw8IGVu
dHJ5LmtleTsKQEAgLTI2MCw3ICsyNjQsNyBAQCBzdGF0aWMgRGlzcGF0Y2hQdHI8ZGlzcGF0Y2hf
ZGF0YV90PiBlbmNvCiAgICAgcmV0dXJuIGFkb3B0RGlzcGF0Y2goZGlzcGF0Y2hfZGF0YV9jcmVh
dGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCksIG51bGxwdHIsIERJU1BB
VENIX0RBVEFfREVTVFJVQ1RPUl9ERUZBVUxUKSk7CiB9CiAKLXN0YXRpYyBOZXR3b3JrQ2FjaGVE
YXRhIGVuY29kZUVudHJ5SGVhZGVyKGNvbnN0IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5JiBl
bnRyeSkKK3N0YXRpYyBEYXRhIGVuY29kZUVudHJ5SGVhZGVyKGNvbnN0IFN0b3JhZ2U6OkVudHJ5
JiBlbnRyeSkKIHsKICAgICBFbnRyeU1ldGFEYXRhIG1ldGFEYXRhKGVudHJ5LmtleSk7CiAgICAg
bWV0YURhdGEudGltZVN0YW1wID0gZW50cnkudGltZVN0YW1wOwpAQCAtMjgxLDcgKzI4NSw3IEBA
IHN0YXRpYyBOZXR3b3JrQ2FjaGVEYXRhIGVuY29kZUVudHJ5SGVhZGUKICAgICByZXR1cm4geyBh
ZG9wdERpc3BhdGNoKGRpc3BhdGNoX2RhdGFfY3JlYXRlX2NvbmNhdChoZWFkZXJEYXRhLmdldCgp
LCBhbGlnbm1lbnREYXRhLmdldCgpKSkgfTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdl
OjpyZW1vdmVFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSkKK3ZvaWQgU3RvcmFnZTo6
cmVtb3ZlRW50cnkoY29uc3QgS2V5JiBrZXkpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIApAQCAtMjk3LDE3ICszMDEsMTcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpy
ZW1vdmVFbnRyeShjbwogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmRp
c3BhdGNoUmVhZE9wZXJhdGlvbihjb25zdCBSZWFkT3BlcmF0aW9uJiByZWFkKQordm9pZCBTdG9y
YWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oY29uc3QgUmVhZE9wZXJhdGlvbiYgcmVhZCkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChtX2FjdGl2ZVJlYWRP
cGVyYXRpb25zLmNvbnRhaW5zKCZyZWFkKSk7CiAKICAgICBTdHJpbmdDYXB0dXJlIGNhY2hlUGF0
aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKICAgICBkaXNwYXRjaF9hc3luYyhtX2lvUXVldWUu
Z2V0KCksIFt0aGlzLCAmcmVhZCwgY2FjaGVQYXRoQ2FwdHVyZV0gewotICAgICAgICBhdXRvIGNo
YW5uZWwgPSBvcGVuRmlsZUZvcktleShyZWFkLmtleSwgTmV0d29ya0NhY2hlSU9DaGFubmVsOjpU
eXBlOjpSZWFkLCBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKKyAgICAgICAgYXV0byBjaGFu
bmVsID0gb3BlbkZpbGVGb3JLZXkocmVhZC5rZXksIElPQ2hhbm5lbDo6VHlwZTo6UmVhZCwgY2Fj
aGVQYXRoQ2FwdHVyZS5zdHJpbmcoKSk7CiAgICAgICAgIGludCBmZCA9IGNoYW5uZWwtPmZpbGVE
ZXNjcmlwdG9yKCk7CiAKLSAgICAgICAgY2hhbm5lbC0+cmVhZCgwLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpLCBbdGhpcywgJnJlYWQsIGZkXShOZXR3b3JrQ2FjaGVEYXRhJiBm
aWxlRGF0YSwgaW50IGVycm9yKSB7CisgICAgICAgIGNoYW5uZWwtPnJlYWQoMCwgc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgW3RoaXMsICZyZWFkLCBmZF0oRGF0YSYgZmlsZURh
dGEsIGludCBlcnJvcikgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAg
ICAgcmVtb3ZlRW50cnkocmVhZC5rZXkpOwogICAgICAgICAgICAgICAgIHJlYWQuY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7CkBAIC0zMjcsNyArMzMxLDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVT
dG9yYWdlOjpkaXNwYXRjaFJlYWRPcAogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1JlYWRPcGVyYXRpb25zKCkKK3ZvaWQgU3RvcmFnZTo6ZGlz
cGF0Y2hQZW5kaW5nUmVhZE9wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTM0OCwxNCArMzUyLDE0IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6
ZGlzcGF0Y2hQZW5kaW4KICAgICB9CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJldHJp
ZXZlRnJvbU1lbW9yeShjb25zdCBUJiBvcGVyYXRpb25zLCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
IGtleSwgTmV0d29ya0NhY2hlU3RvcmFnZTo6UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYgY29t
cGxldGlvbkhhbmRsZXIpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gYm9vbCByZXRyaWV2ZUZyb21NZW1v
cnkoY29uc3QgVCYgb3BlcmF0aW9ucywgY29uc3QgS2V5JiBrZXksIFN0b3JhZ2U6OlJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZvciAoYXV0byYg
b3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewogICAgICAgICBpZiAob3BlcmF0aW9uLT5lbnRyeS5r
ZXkgPT0ga2V5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3
b3JrUHJvY2VzcykgZm91bmQgd3JpdGUgb3BlcmF0aW9uIGluIHByb2dyZXNzIik7CiAgICAgICAg
ICAgICBhdXRvIGVudHJ5ID0gb3BlcmF0aW9uLT5lbnRyeTsKICAgICAgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtlbnRyeSwgY29tcGxldGlvbkhhbmRs
ZXJdIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om1ha2VfdW5pcXVl
PE5ldHdvcmtDYWNoZVN0b3JhZ2U6OkVudHJ5PihlbnRyeSkpOworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6RW50cnk+KGVudHJ5KSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBA
IC0zNjMsNyArMzY3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmV0cmlldmVGcm9tTWVt
bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRy
aWV2ZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJp
ZXZlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZTo6
cmV0cmlldmUoY29uc3QgS2V5JiBrZXksIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBs
ZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICBBU1NFUlQocHJpb3JpdHkgPD0gbWF4aW11bVJldHJpZXZlUHJpb3Jp
dHkpOwpAQCAtMzg4LDcgKzM5Miw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6cmV0cmll
dmUoY29uc3QKICAgICBkaXNwYXRjaFBlbmRpbmdSZWFkT3BlcmF0aW9ucygpOwogfQogCi12b2lk
IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OnN0b3JlKGNvbnN0IEVudHJ5JiBlbnRyeSwgU3RvcmVDb21w
bGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlOjpzdG9yZShj
b25zdCBFbnRyeSYgZW50cnksIFN0b3JlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVCghZW50
cnkua2V5LmlzTnVsbCgpKTsKQEAgLTQwNiw3ICs0MTAsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0
b3JhZ2U6OnN0b3JlKGNvbnN0IEVuCiAgICAgZGlzcGF0Y2hQZW5kaW5nV3JpdGVPcGVyYXRpb25z
KCk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dXBkYXRlKGNvbnN0IEVudHJ5JiB1
cGRhdGVFbnRyeSwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIFN0b3JlQ29tcGxldGlvbkhh
bmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZTo6dXBkYXRlKGNvbnN0IEVu
dHJ5JiB1cGRhdGVFbnRyeSwgY29uc3QgRW50cnkmIGV4aXN0aW5nRW50cnksIFN0b3JlQ29tcGxl
dGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIEFTU0VSVCghZXhpc3RpbmdFbnRyeS5rZXkuaXNOdWxsKCkpOwpAQCAt
NDIyLDcgKzQyNiw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dXBkYXRlKGNvbnN0IEUK
ICAgICBkaXNwYXRjaFBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEVudHJ5Kik+
JiYgdHJhdmVyc2VIYW5kbGVyKQordm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9u
PHZvaWQgKGNvbnN0IEVudHJ5Kik+JiYgdHJhdmVyc2VIYW5kbGVyKQogewogICAgIFN0cmluZ0Nh
cHR1cmUgY2FjaGVQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOwogICAgIGRpc3BhdGNoX2Fz
eW5jKG1faW9RdWV1ZS5nZXQoKSwgW3RoaXMsIGNhY2hlUGF0aENhcHR1cmUsIHRyYXZlcnNlSGFu
ZGxlcl0gewpAQCAtNDMwLDExICs0MzQsMTEgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjp0
cmF2ZXJzZShzdGQ6OgogICAgICAgICBhdXRvIHNlbWFwaG9yZSA9IGFkb3B0RGlzcGF0Y2goZGlz
cGF0Y2hfc2VtYXBob3JlX2NyZWF0ZSgwKSk7CiAgICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhj
YWNoZVBhdGgsIFt0aGlzLCAmc2VtYXBob3JlLCAmdHJhdmVyc2VIYW5kbGVyXShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAgICAgICAg
IGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0
aW9uUGF0aCwgZmlsZU5hbWUpOwotICAgICAgICAgICAgYXV0byBjaGFubmVsID0gTmV0d29ya0Nh
Y2hlSU9DaGFubmVsOjpvcGVuKGZpbGVQYXRoLCBOZXR3b3JrQ2FjaGVJT0NoYW5uZWw6OlR5cGU6
OlJlYWQpOworICAgICAgICAgICAgYXV0byBjaGFubmVsID0gSU9DaGFubmVsOjpvcGVuKGZpbGVQ
YXRoLCBJT0NoYW5uZWw6OlR5cGU6OlJlYWQpOwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGhl
YWRlclJlYWRTaXplID0gMTYgPDwgMTA7Ci0gICAgICAgICAgICBjaGFubmVsLT5yZWFkKDAsIGhl
YWRlclJlYWRTaXplLCBbdGhpcywgJnNlbWFwaG9yZSwgJnRyYXZlcnNlSGFuZGxlcl0oTmV0d29y
a0NhY2hlRGF0YSYgZmlsZURhdGEsIGludCkgeworICAgICAgICAgICAgY2hhbm5lbC0+cmVhZCgw
LCBoZWFkZXJSZWFkU2l6ZSwgW3RoaXMsICZzZW1hcGhvcmUsICZ0cmF2ZXJzZUhhbmRsZXJdKERh
dGEmIGZpbGVEYXRhLCBpbnQpIHsKICAgICAgICAgICAgICAgICBFbnRyeU1ldGFEYXRhIG1ldGFE
YXRhOwotICAgICAgICAgICAgICAgIE5ldHdvcmtDYWNoZURhdGEgaGVhZGVyRGF0YTsKKyAgICAg
ICAgICAgICAgICBEYXRhIGhlYWRlckRhdGE7CiAgICAgICAgICAgICAgICAgaWYgKGRlY29kZUVu
dHJ5SGVhZGVyKGZpbGVEYXRhLCBtZXRhRGF0YSwgaGVhZGVyRGF0YSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgRW50cnkgZW50cnkgeyBtZXRhRGF0YS5rZXksIG1ldGFEYXRhLnRpbWVTdGFtcCwg
aGVhZGVyRGF0YSwgeyB9IH07CiAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlSGFuZGxlcigm
ZW50cnkpOwpAQCAtNDQ5LDcgKzQ1Myw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dHJh
dmVyc2Uoc3RkOjoKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNw
YXRjaFBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoKQordm9pZCBTdG9yYWdlOjpkaXNwYXRjaFBlbmRp
bmdXcml0ZU9wZXJhdGlvbnMoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTQ3Miw3ICs0NzYsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoUGVu
ZGluCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmRpc3BhdGNoRnVsbFdy
aXRlT3BlcmF0aW9uKGNvbnN0IFdyaXRlT3BlcmF0aW9uJiB3cml0ZSkKK3ZvaWQgU3RvcmFnZTo6
ZGlzcGF0Y2hGdWxsV3JpdGVPcGVyYXRpb24oY29uc3QgV3JpdGVPcGVyYXRpb24mIHdyaXRlKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fYWN0aXZlV3Jp
dGVPcGVyYXRpb25zLmNvbnRhaW5zKCZ3cml0ZSkpOwpAQCAtNDg1LDkgKzQ4OSw5IEBAIHZvaWQg
TmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hGdWxsV3IKICAgICAgICAgYXV0byBlbmNvZGVk
SGVhZGVyID0gZW5jb2RlRW50cnlIZWFkZXIod3JpdGUuZW50cnkpOwogICAgICAgICBhdXRvIGhl
YWRlckFuZEJvZHlEYXRhID0gYWRvcHREaXNwYXRjaChkaXNwYXRjaF9kYXRhX2NyZWF0ZV9jb25j
YXQoZW5jb2RlZEhlYWRlci5kaXNwYXRjaERhdGEoKSwgd3JpdGUuZW50cnkuYm9keS5kaXNwYXRj
aERhdGEoKSkpOwogCi0gICAgICAgIE5ldHdvcmtDYWNoZURhdGEgd3JpdGVEYXRhKGhlYWRlckFu
ZEJvZHlEYXRhKTsKKyAgICAgICAgRGF0YSB3cml0ZURhdGEoaGVhZGVyQW5kQm9keURhdGEpOwog
Ci0gICAgICAgIGF1dG8gY2hhbm5lbCA9IG9wZW5GaWxlRm9yS2V5KHdyaXRlLmVudHJ5LmtleSwg
TmV0d29ya0NhY2hlSU9DaGFubmVsOjpUeXBlOjpDcmVhdGUsIGNhY2hlUGF0aENhcHR1cmUuc3Ry
aW5nKCkpOworICAgICAgICBhdXRvIGNoYW5uZWwgPSBvcGVuRmlsZUZvcktleSh3cml0ZS5lbnRy
eS5rZXksIElPQ2hhbm5lbDo6VHlwZTo6Q3JlYXRlLCBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygp
KTsKICAgICAgICAgaW50IGZkID0gY2hhbm5lbC0+ZmlsZURlc2NyaXB0b3IoKTsKICAgICAgICAg
c2l6ZV90IGJvZHlPZmZzZXQgPSBlbmNvZGVkSGVhZGVyLnNpemUoKTsKIApAQCAtNTA1LDcgKzUw
OSw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hGdWxsV3IKICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkTWFwQm9keSA9ICFlcnJvciAmJiBib2R5U2l6ZSA+PSB2bV9wYWdlX3Np
emU7CiAgICAgICAgICAgICBhdXRvIGJvZHlNYXAgPSBzaG91bGRNYXBCb2R5ID8gbWFwRmlsZShm
ZCwgYm9keU9mZnNldCwgYm9keVNpemUpIDogbnVsbHB0cjsKIAotICAgICAgICAgICAgTmV0d29y
a0NhY2hlRGF0YSBib2R5RGF0YShib2R5TWFwLCBOZXR3b3JrQ2FjaGVEYXRhOjpCYWNraW5nOjpN
YXApOworICAgICAgICAgICAgRGF0YSBib2R5RGF0YShib2R5TWFwLCBEYXRhOjpCYWNraW5nOjpN
YXApOwogICAgICAgICAgICAgd3JpdGUuY29tcGxldGlvbkhhbmRsZXIoIWVycm9yLCBib2R5RGF0
YSk7CiAKICAgICAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVdyaXRlT3BlcmF0aW9ucy5jb250YWlu
cygmd3JpdGUpKTsKQEAgLTUxNyw3ICs1MjEsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6
OmRpc3BhdGNoRnVsbFdyCiAgICAgc2hyaW5rSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpkaXNwYXRjaEhlYWRlcldyaXRlT3BlcmF0aW9uKGNvbnN0IFdyaXRlT3Bl
cmF0aW9uJiB3cml0ZSkKK3ZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hIZWFkZXJXcml0ZU9wZXJhdGlv
bihjb25zdCBXcml0ZU9wZXJhdGlvbiYgd3JpdGUpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICBBU1NFUlQod3JpdGUuZXhpc3RpbmdFbnRyeSk7CkBAIC01MzksNyArNTQz
LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaEhlYWRlcgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjaGFubmVsID0gb3BlbkZpbGVG
b3JLZXkod3JpdGUuZW50cnkua2V5LCBOZXR3b3JrQ2FjaGVJT0NoYW5uZWw6OlR5cGU6OldyaXRl
LCBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKKyAgICAgICAgYXV0byBjaGFubmVsID0gb3Bl
bkZpbGVGb3JLZXkod3JpdGUuZW50cnkua2V5LCBJT0NoYW5uZWw6OlR5cGU6OldyaXRlLCBjYWNo
ZVBhdGhDYXB0dXJlLnN0cmluZygpKTsKICAgICAgICAgY2hhbm5lbC0+d3JpdGUoMCwgaGVhZGVy
RGF0YSwgW3RoaXMsICZ3cml0ZV0oaW50IGVycm9yKSB7CiAgICAgICAgICAgICBMT0coTmV0d29y
a0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgdXBkYXRlIGNvbXBsZXRlIGVycm9yPSVk
IiwgZXJyb3IpOwogCkBAIC01NTUsNyArNTU5LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdl
OjpkaXNwYXRjaEhlYWRlcgogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0b3JhZ2U6
OnNldE1heGltdW1TaXplKHNpemVfdCBzaXplKQordm9pZCBTdG9yYWdlOjpzZXRNYXhpbXVtU2l6
ZShzaXplX3Qgc2l6ZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIG1f
bWF4aW11bVNpemUgPSBzaXplOwpAQCAtNTYzLDcgKzU2Nyw3IEBAIHZvaWQgTmV0d29ya0NhY2hl
U3RvcmFnZTo6c2V0TWF4aW11bVNpemUKICAgICBzaHJpbmtJZk5lZWRlZCgpOwogfQogCi12b2lk
IE5ldHdvcmtDYWNoZVN0b3JhZ2U6OmNsZWFyKCkKK3ZvaWQgU3RvcmFnZTo6Y2xlYXIoKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3Jh
Z2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CkBAIC01ODUsNyArNTg5LDcg
QEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpjbGVhcigpCiAgICAgfSk7CiB9CiAKLXZvaWQg
TmV0d29ya0NhY2hlU3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQoKQordm9pZCBTdG9yYWdlOjpzaHJp
bmtJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNjE2
LDEwICs2MjAsMTAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzaHJpbmtJZk5lZWRlZAog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRo
KTsKLSAgICAgICAgICAgIE5ldHdvcmtDYWNoZUtleTo6SGFzaFR5cGUgaGFzaDsKLSAgICAgICAg
ICAgIGlmICghTmV0d29ya0NhY2hlS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQor
ICAgICAgICAgICAgS2V5OjpIYXNoVHlwZSBoYXNoOworICAgICAgICAgICAgaWYgKCFLZXk6OnN0
cmluZ1RvSGFzaChmaWxlTmFtZSwgaGFzaCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnRIYXNoID0gTmV0d29ya0NhY2hlS2V5Ojp0b1Nob3J0SGFz
aChoYXNoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0SGFzaCA9IEtleTo6dG9TaG9ydEhh
c2goaGFzaCk7CiAgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbdGhpcywgc2hvcnRIYXNoXSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fY29udGVu
dHNGaWx0ZXIubWF5Q29udGFpbihzaG9ydEhhc2gpKQogICAgICAgICAgICAgICAgICAgICBtX2Nv
bnRlbnRzRmlsdGVyLnJlbW92ZShzaG9ydEhhc2gpOwpAQCAtNjM4LDcgKzY0Miw3IEBAIHZvaWQg
TmV0d29ya0NhY2hlU3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQKICAgICB9KTsKIH0KIAotdm9pZCBO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9ucygpCit2b2lkIFN0b3JhZ2U6OmRl
bGV0ZU9sZFZlcnNpb25zKCkKIHsKICAgICAvLyBEZWxldGUgVjEgY2FjaGUuCiAgICAgU3RyaW5n
Q2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fYmFzZURpcmVjdG9yeVBhdGgpOwpAQCAtNjU3LDUg
KzY2MSw2IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGVsZXRlT2xkVmVyc2kKIH0KIAog
fQorfQogCiAjZW5kaWYK
</data>
<flag name="review"
          id="272877"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>