<?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>113100</bug_id>
          
          <creation_ts>2013-03-22 14:33:50 -0700</creation_ts>
          <short_desc>Split ResourceHandleMac into multiple files</short_desc>
          <delta_ts>2013-03-22 15:46:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>861849</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-22 14:33:50 -0700</bug_when>
    <thetext>It&apos;s grown too big to navigate, and I&apos;m going to make WebCoreResourceHandleAsDelegate substantially more complicated yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861856</commentid>
    <comment_count>1</comment_count>
      <attachid>194634</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-22 14:40:06 -0700</bug_when>
    <thetext>Created attachment 194634
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861858</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-22 14:42:19 -0700</bug_when>
    <thetext>Attachment 194634 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.cpp&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/SynchronousLoaderClient.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.h&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;]&quot; exit_code: 1
Source/WebCore/platform/network/SynchronousLoaderClient.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861902</commentid>
    <comment_count>3</comment_count>
      <attachid>194641</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-22 15:22:34 -0700</bug_when>
    <thetext>Created attachment 194641
with Windows fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861912</commentid>
    <comment_count>4</comment_count>
      <attachid>194641</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-22 15:29:31 -0700</bug_when>
    <thetext>Comment on attachment 194641
with Windows fixes

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861913</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-22 15:30:55 -0700</bug_when>
    <thetext>Attachment 194641 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.cpp&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.h&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/platform/network/mac/SynchronousLoaderClient.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.h&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm&apos;]&quot; exit_code: 1
Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861922</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-22 15:46:43 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r146667&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194634</attachid>
            <date>2013-03-22 14:40:06 -0700</date>
            <delta_ts>2013-03-22 15:22:34 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>SplitResourceHandle.txt</filename>
            <type>text/plain</type>
            <size>57803</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTIyICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFJlc291cmNlSGFu
ZGxlTWFjIGludG8gbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzEwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEl0J3MgZ3Jvd24gdG9vIGJpZyB0byBuYXZpZ2F0ZSwgYW5kIEkn
bSBnb2luZyB0byBtYWtlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUKKyAgICAgICAg
c3Vic3RhbnRpYWxseSBtb3JlIGNvbXBsaWNhdGVkIHlldC4KKworICAgICAgICAxLiBNZWNoYW5p
Y2FsbHkgbW92ZWQgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBpbnRvIHNlcGFyYXRl
IGZpbGVzLgorICAgICAgICAyLiBSZWZhY3RvcmVkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNs
aWVudCB0byBiZSBjcm9zcy1wbGF0Zm9ybSwgYW5kIG1vdmVkIGl0IGludG8KKyAgICAgICAgc2Vw
YXJhdGUgZmlsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLm1tOiBBZGRlZC4KKwogMjAxMy0wMy0yMiAgUm9nZXIgRm9uZyAgPHJv
Z2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZvcmNlIGtpbGwgZ2Nj
LTMuZXhlIGR1cmluZyBiaW5kaW5ncyBnZW5lcmF0aW9uIHRlc3RzIHRvIGF2b2lkIHByb2Nlc3Mg
aGFuZ3MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gMTQ2NTQ2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMjgxLDYgKzMzMjgxLDE0IEBACiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cbmV0d29ya1xTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgogCQkJCTxGaWx0ZXIKIAkJCQkJTmFtZT0iY2YiCiAJCQkJCT4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTQ2NTQ2
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDY0OSw2ICs0NjQ5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1FcnJvckJh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNG
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTE5NDAsNiArMTE5NDEsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU29ja2V0U3RyZWFt
SGFuZGxlQmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0
d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIgLz4KICAg
ICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcQXV0aGVu
dGljYXRpb25DRi5oIiAvPgogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxEb3dubG9hZEJ1bmRsZS5oIiAvPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQ2NTQ2KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzE4LDYgKzMzMTgsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0
d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3Jt
XG5ldHdvcms8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29yazwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNh
dGlvbkNGLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY2Y8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KQEAgLTEwMTUyLDYgKzEwMTU1LDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmgi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGNmXERvd25sb2FkQnVuZGxlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxu
ZXR3b3JrXGNmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDY1
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTYyMzIsNiArNjIzMiwxMSBAQAogCQlFMTdCNDkxNjE2QTlCMDk0
MDAxQzg4MzkgLyogVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTdCNDkxNDE2QTlCMDkzMDAxQzg4MzkgLyogVHJhbnNpdGlv
bkV2ZW50LmggKi87IH07CiAJCUUxN0I0OTIxMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE3QjQ5MUYxNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50LmggKi87IH07CiAJ
CUUxN0I0OTIyMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTdCNDkyMDE2QTlCOEZG
MDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OworCQlFMTgwODEwRTE2RkNF
Q0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODA4MTBDMTZGQ0VDREYw
MEI4MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tICovOyB9OworCQlF
MTgwODEwRjE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgx
MEQxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCAq
LzsgfTsKKwkJRTE4MDgxMTIxNkZDRjQyRjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
ODA4MTEwMTZGQ0Y0MkUwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAgKi87
IH07CisJCUUxODA4MTE2MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODA4
MTE0MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbSAqLzsgfTsK
KwkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExNTE2
RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJRTE4
MjU2OEYwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNTY4RDBFRjJCMDJEMDA5MzMy
NDIgLyogSlNXb3JrZXJDb250ZXh0LmNwcCAqLzsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAwOTMz
MjQyIC8qIEpTV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE4MjU2OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4
dC5oICovOyB9OwogCQlFMTgyNThBQzBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxODI1OEFCMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckNvbnRleHRDdXN0b20uY3BwICov
OyB9OwpAQCAtMTM5NDQsNiArMTM5NDksMTEgQEAKIAkJRTE3QjQ5MTQxNkE5QjA5MzAwMUM4ODM5
IC8qIFRyYW5zaXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFuc2l0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3QjQ5MUYx
NkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTVHJhbnNpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxN0I0OTIwMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyYW5zaXRpb25FdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxODA4MTBDMTZGQ0VDREYwMEI4
MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4MDgxMEQxNkZDRUNERjAwQjgw
RDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTgwODExMDE2RkNGNDJFMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMTgwODExNDE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGll
bnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeW5jaHJvbm91
c0xvYWRlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4MDgxMTUx
NkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3Jr
ZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MjU2OEUwRUYy
QjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMTYsNiArMTYzMjYsOCBA
QAogCQkJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
LmNwcCAqLywKIAkJCQk1MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQuaCAqLywKKwkJCQlFMTgwODExMDE2RkNGNDJFMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAorCQkJCUUxODA4MTE1MTZGQ0Y5Q0IwMEI4MEQw
NyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBuZXR3
b3JrOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2MzM3LDYgKzE2MzQ5LDkgQEAK
IAkJCQk1MTRDNzY0QjBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSAq
LywKIAkJCQkxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi8sCiAJ
CQkJMUZBRkJGMTcxNUE1RkE1MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5tbSAqLywKKwkJCQlF
MTgwODEwQzE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5tbSAqLywKKwkJCQlFMTgwODEwRDE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNl
SGFuZGxlQXNEZWxlZ2F0ZS5oICovLAorCQkJCUUxODA4MTE0MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBT
eW5jaHJvbm91c0xvYWRlckNsaWVudC5tbSAqLywKIAkJCQkzN0Y4MThGQjBENjU3NjA2MDA1RTFG
MDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8sCiAJCQkJMzdGODE4RkMwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLywKIAkJCSk7CkBAIC0yNjc2Nyw2ICsyNjc4
Miw4IEBACiAJCQkJREFFRDIwMzExNkYyNDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xp
Y3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTBFMThDREExNkY5Mjg1ODAw
QzY1NDg2IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMTgwODEwRjE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNE
ZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8q
IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI5OTc1LDYgKzI5
OTkyLDkgQEAKIAkJCQlFMUJBMDAzMTE2RkI5MkFDMDBCQTdBMzUgLyogUmVzb3VyY2VIYW5kbGVD
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBFMThDRDgxNkY5Mjg1ODAwQzY1NDg2IC8q
IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEUxOENE
OTE2RjkyODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTE4MDgxMEUxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMTgwODExMjE2RkNG
NDJGMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTE4MDgxMTYxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgor
CisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6flN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50KCkKK3sKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRlckNs
aWVudDo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNl
Ki8pCit7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRo
ZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgorICAg
IGlmIChwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKSwgcmVxdWVzdC51cmwoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2Vy
cm9yLmlzTnVsbCgpKTsKKyAgICBtX2Vycm9yID0gcGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7
CisgICAgbV9pc0RvbmUgPSB0cnVlOworICAgIHJlcXVlc3QgPSAwOworfQorCitib29sIFN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhh
bmRsZSopCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQg
d2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgor
ICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Cit9CisKKyNpZiBVU0UoUFJPVEVD
VElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorYm9vbCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJh
bWVMb2FkZXJDbGllbnQuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY1MTk2PgorICAgIHJldHVybiB0
cnVlOworfQorI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQordm9pZCBTeW5jaHJvbm91c0xv
YWRlckNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICAv
LyBGSVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBjcmVkZW50aWFscywgYXMgaW4g
YXN5bmMgY2FzZS4KKyAgICBDRlVSTENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGhhbmRsZS0+Y29u
bmVjdGlvbigpLCAwLCBjaGFsbGVuZ2UuY2ZVUkxBdXRoQ2hhbGxlbmdlUmVmKCkpOworfQorI2Vu
ZGlmCisKK3ZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IG1fcmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKQoreworICAgIG1fZGF0YS5hcHBlbmQo
ZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKK3sKKyAgICBtX2lzRG9uZSA9IHRy
dWU7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9lcnJv
ci5pc051bGwoKSk7CisKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgbV9pc0RvbmUgPSB0cnVl
OworfQorCisjaWYgVVNFKENGTkVUV09SSykKK1Jlc291cmNlRXJyb3IgU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OnBsYXRmb3JtQmFkUmVzcG9uc2VFcnJvcigpCit7CisgICAgUmV0YWluUHRyPENG
RXJyb3JSZWY+IGNmRXJyb3IoQWRvcHRDRiwgQ0ZFcnJvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZFcnJvckRvbWFpbkNGTmV0d29yaywga0NGVVJMRXJyb3JCYWRTZXJ2ZXJSZXNwb25z
ZSwgMCkpOworICAgIHJldHVybiBjZkVycm9yLmdldCgpOworfQorI2VuZGlmCisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50X2gK
KyNkZWZpbmUgU3luY2hyb25vdXNMb2FkZXJDbGllbnRfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3luY2hyb25vdXNMb2FkZXJDbGll
bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgflN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KCk7CisK
KyAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9vbCBhbGxvdykgeyBtX2FsbG93
U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQorICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorICAgIFZlY3RvcjxjaGFy
PiYgbXV0YWJsZURhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKyAgICBib29sIGlzRG9uZSgp
IHsgcmV0dXJuIG1faXNEb25lOyB9CisKK3ByaXZhdGU6CisgICAgU3luY2hyb25vdXNMb2FkZXJD
bGllbnQoKQorICAgICAgICA6IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyhmYWxzZSkKKyAgICAg
ICAgLCBtX2lzRG9uZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCAvKmVuY29k
ZWREYXRhTGVuZ3RoKi8pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImKSBPVkVSUklERTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQor
ICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJikgT1ZFUlJJREU7CisjZW5kaWYK
KworICAgIFJlc291cmNlRXJyb3IgcGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7CisKKyAgICBi
b29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVz
cG9uc2U7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBSZXNvdXJjZUVycm9yIG1fZXJy
b3I7CisgICAgYm9vbCBtX2lzRG9uZTsKK307Cit9CisKKyNlbmRpZiAvLyBTeW5jaHJvbm91c0xv
YWRlckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDE0NjU0NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDQ1ICs3Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFVTRShDRk5FVFdPUkspCiAKLWNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50PiBjcmVhdGUoUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQo
cmVzcG9uc2UsIGVycm9yKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRl
bnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0K
LSAgICBib29sIGlzRG9uZSgpIHsgcmV0dXJuIG1faXNEb25lOyB9Ci0KLSAgICBDRk11dGFibGVE
YXRhUmVmIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgICAgICA6IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFs
cyhmYWxzZSkKLSAgICAgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQotICAgICAgICAsIG1fZXJy
b3IoZXJyb3IpCi0gICAgICAgICwgbV9pc0RvbmUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLyk7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAv
KmZpbmlzaFRpbWUqLyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9D
QUxMQkFDSykKLSAgICB2aXJ0dWFsIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOwotI2VuZGlm
Ci0KLSAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICBSZXNvdXJjZVJlc3Bv
bnNlJiBtX3Jlc3BvbnNlOwotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7
Ci0gICAgUmVzb3VyY2VFcnJvciYgbV9lcnJvcjsKLSAgICBib29sIG1faXNEb25lOwotfTsKLQog
c3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgaG9zdHMsICgpKTsK
QEAgLTcxNSw3ICs2NzYsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNv
dXJjCiAgICAgQVNTRVJUKHJlc3BvbnNlLmlzTnVsbCgpKTsKICAgICBBU1NFUlQoZXJyb3IuaXNO
dWxsKCkpOwogCi0gICAgT3duUHRyPFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY2xp
ZW50ID0gV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpjcmVhdGUocmVzcG9uc2UsIGVy
cm9yKTsKKyAgICBPd25QdHI8U3luY2hyb25vdXNMb2FkZXJDbGllbnQ+IGNsaWVudCA9IFN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpjcmVhdGUoKTsKICAgICBjbGllbnQtPnNldEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7
CiAKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNv
dXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCBjbGllbnQuZ2V0KCksIGZhbHNlIC8qZGVmZXJz
TG9hZGluZyovLCB0cnVlIC8qc2hvdWxkQ29udGVudFNuaWZmKi8pKTsKQEAgLTczNiwyOSArNjk3
LDI3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmMKICAgICB3aGls
ZSAoIWNsaWVudC0+aXNEb25lKCkpCiAgICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShzeW5jaHJv
bm91c0xvYWRSdW5Mb29wTW9kZSgpLCBVSU5UX01BWCwgdHJ1ZSk7CiAKKyAgICBlcnJvciA9IGNs
aWVudC0+ZXJyb3IoKTsKKwogICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChoYW5kbGUtPmNvbm5l
Y3Rpb24oKSk7Ci0gICAgCisKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgcmVzcG9uc2UubWlt
ZVR5cGUoKS5pc051bGwoKSkKICAgICAgICAgc2V0RGVmYXVsdE1JTUVUeXBlKHJlc3BvbnNlLmNm
VVJMUmVzcG9uc2UoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gY2xpZW50
LT5kYXRhKCk7CiAgICAgCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgeworICAgIGlmIChlcnJv
ci5pc051bGwoKSkKKyAgICAgICAgcmVzcG9uc2UgPSBjbGllbnQtPnJlc3BvbnNlKCk7CisgICAg
ZWxzZSB7CiAgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0LnVybCgp
LCBTdHJpbmcoKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKTsKLQotICAgICAgICBDRkVycm9yUmVm
IGNmRXJyb3IgPSBlcnJvcjsKLSAgICAgICAgQ0ZTdHJpbmdSZWYgZG9tYWluID0gQ0ZFcnJvckdl
dERvbWFpbihjZkVycm9yKTsKLSAgICAgICAgLy8gRklYTUU6IFJldHVybiB0aGUgYWN0dWFsIHJl
c3BvbnNlIGZvciBmYWlsZWQgYXV0aGVudGljYXRpb24uCi0gICAgICAgIGlmIChkb21haW4gPT0g
a0NGRXJyb3JEb21haW5DRk5ldHdvcmspCi0gICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQU3Rh
dHVzQ29kZShDRkVycm9yR2V0Q29kZShjZkVycm9yKSk7CisgICAgICAgIC8vIEZJWE1FOiBSZXNv
dXJjZUhhbmRsZU1hYyBhbHNvIGhhbmRsZXMgYXV0aGVudGljYXRpb24gZXJyb3JzIGJ5IHNldHRp
bmcgY29kZSB0byA0MDEuIENGTmV0IHZlcnNpb24gc2hvdWxkIHByb2JhYmx5IGRvIHRoZSBzYW1l
LgorICAgICAgICBpZiAoZXJyb3IuZG9tYWluKCkgPT0gU3RyaW5nKGtDRkVycm9yRG9tYWluQ0ZO
ZXR3b3JrKSkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGVycm9yLmVy
cm9yQ29kZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0
dXNDb2RlKDQwNCk7CiAgICAgfQogCi0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAgQVNTRVJUKHZl
Y3Rvci5pc0VtcHR5KCkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIo
ZGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKSk7Ci0gICAgfQorICAgIGRh
dGEuc3dhcChjbGllbnQtPm11dGFibGVEYXRhKCkpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxl
OjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCkBA
IC04MTEsNjIgKzc3MCw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUoU2NoZWR1
bGUKIH0KICNlbmRpZgogCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6d2ls
bFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVj
dCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgIGlmICghcHJv
dG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIHJl
cXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9lcnJvci5jZkVycm9yKCkpOwotICAg
ICAgICBSZXRhaW5QdHI8Q0ZFcnJvclJlZj4gY2ZFcnJvcihBZG9wdENGLCBDRkVycm9yQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZVUkxFcnJv
ckJhZFNlcnZlclJlc3BvbnNlLCAwKSk7Ci0gICAgICAgIG1fZXJyb3IgPSBjZkVycm9yLmdldCgp
OwotICAgICAgICBtX2lzRG9uZSA9IHRydWU7Ci0gICAgICAgIENGVVJMUmVxdWVzdFJlZiBudWxs
UmVxdWVzdCA9IDA7Ci0gICAgICAgIHJlcXVlc3QgPSBudWxsUmVxdWVzdDsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRS
ZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Ci19Ci0KLXZvaWQgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8p
Ci17Ci0gICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIG1fZGF0YS5hZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIENGRGF0YUFwcGVuZEJ5dGVz
KG1fZGF0YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBsZW5n
dGgpOwotfQotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmluaXNo
TG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKLXsKLSAgICBtX2lzRG9uZSA9IHRydWU7
Ci19Ci0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGYWlsKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgbV9lcnJvciA9
IGVycm9yOwotICAgIG1faXNEb25lID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
KQotewotICAgIC8vIEZJWE1FOiBUaGUgdXNlciBzaG91bGQgYmUgYXNrZWQgZm9yIGNyZWRlbnRp
YWxzLCBhcyBpbiBhc3luYyBjYXNlLgotICAgIENGVVJMQ29ubmVjdGlvblVzZUNyZWRlbnRpYWwo
aGFuZGxlLT5jb25uZWN0aW9uKCksIDAsIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYo
KSk7Ci19Ci0KLWJvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSopCi17Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQgd2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0b3Jh
Z2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgotICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7Ci19Ci0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotYm9v
bCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKQot
ewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50LiA8aHR0cDov
L3dlYmtpdC5vcmcvYi82NTE5Nj4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiAjZW5k
aWYgLy8gVVNFKENGTkVUV09SSykKIAogI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxM
QkFDSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
SGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAxNDY2NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQAogI2ltcG9ydCAiU2V0dGluZ3MuaCIKICNpbXBvcnQg
IlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbXBvcnQg
IldlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1w
b3J0ICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKICNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIuaD4K
QEAgLTU2LDEzICs1OCw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1AaW50ZXJm
YWNlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxDb25u
ZWN0aW9uRGVsZWdhdGU+IHsKLSAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci19Ci0tIChp
ZClpbml0V2l0aEhhbmRsZTooUmVzb3VyY2VIYW5kbGUqKWhhbmRsZTsKLS0gKHZvaWQpZGV0YWNo
SGFuZGxlOwotQGVuZAotCiAvLyBXZWJDb3JlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSBl
eGlzdHMgc28gdGhhdCB3ZSBjYW4gY2FzdCBtX3Byb3h5IHRvIGl0IGluIG9yZGVyCiAvLyB0byBk
aXNhbWJpZ3VhdGUgdGhlIGFyZ3VtZW50IHR5cGUgaW4gdGhlIC1zZXREZWxlZ2F0ZTogY2FsbC4g
IFRoaXMgYXZvaWRzIGEgc3B1cmlvdXMKIC8vIHdhcm5pbmcgdGhhdCB0aGUgY29tcGlsZXIgd291
bGQgb3RoZXJ3aXNlIGVtaXQuCkBAIC03NCw1MyArNjksNiBAQCBAaW50ZXJmYWNlIE5TVVJMQ29u
bmVjdGlvbiAoRGV0YWlscykKIC0oaWQpX2luaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICop
cmVxdWVzdCBkZWxlZ2F0ZTooaWQpZGVsZWdhdGUgdXNlc0NhY2hlOihCT09MKXVzZXNDYWNoZUZs
YWcgbWF4Q29udGVudExlbmd0aDoobG9uZyBsb25nKW1heENvbnRlbnRMZW5ndGggc3RhcnRJbW1l
ZGlhdGVseTooQk9PTClzdGFydEltbWVkaWF0ZWx5IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOihOU0Rp
Y3Rpb25hcnkgKiljb25uZWN0aW9uUHJvcGVydGllczsKIEBlbmQKIAotQGludGVyZmFjZSBOU1VS
TFJlcXVlc3QgKERldGFpbHMpCi0tIChpZClfcHJvcGVydHlGb3JLZXk6KE5TU3RyaW5nICopa2V5
OwotQGVuZAotCi1jbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQgOiBwdWJsaWMg
UmVzb3VyY2VIYW5kbGVDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdl
YkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIH5XZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKTsKLQotICAg
IHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFsbG93KSB7IG1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscyA9IGFsbG93OyB9Ci0gICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UoKSB7
IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0gICAgTlNNdXRhYmxlRGF0YSAqZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQotICAgIE5TRXJyb3IgKmVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQotICAg
IGJvb2wgaXNEb25lKCkgeyByZXR1cm4gbV9pc0RvbmU7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKQotICAgICAgICA6IG1fYWxsb3dTdG9yZWRDcmVk
ZW50aWFscyhmYWxzZSkKLSAgICAgICAgLCBtX3Jlc3BvbnNlKDApCi0gICAgICAgICwgbV9kYXRh
KDApCi0gICAgICAgICwgbV9lcnJvcigwKQotICAgICAgICAsIG1faXNEb25lKGZhbHNlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFu
ZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVj
dFJlc3BvbnNlKi8pOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShSZXNvdXJjZUhhbmRsZSopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8qZW5jb2RlZERh
dGFMZW5ndGgqLyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotI2lmIFVTRShQUk9URUNU
SU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi0gICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9u
U3BhY2UmKTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0g
ICAgTlNVUkxSZXNwb25zZSAqbV9yZXNwb25zZTsKLSAgICBOU011dGFibGVEYXRhICptX2RhdGE7
Ci0gICAgTlNFcnJvciAqbV9lcnJvcjsKLSAgICBib29sIG1faXNEb25lOwotfTsKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRl
cihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
CkBAIC0zNTUsMTMgKzMwMyw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJl
c291cmMKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHk6JUAgYWxsb3dTdG9yZWRDcmVkZW50aWFsczoldSIsIHJlcXVl
c3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpLCBzdG9yZWRDcmVkZW50aWFscyk7
CiAKLSAgICBOU0Vycm9yICpuc0Vycm9yID0gbmlsOwotICAgIE5TVVJMUmVzcG9uc2UgKm5zVVJM
UmVzcG9uc2UgPSBuaWw7Ci0gICAgTlNEYXRhICpyZXN1bHQgPSBuaWw7Ci0KICAgICBBU1NFUlQo
IXJlcXVlc3QuaXNFbXB0eSgpKTsKICAgICAKLSAgICBPd25QdHI8V2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50PiBjbGllbnQgPSBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNy
ZWF0ZSgpOworICAgIE93blB0cjxTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY2xpZW50ID0gU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQ6OmNyZWF0ZSgpOwogICAgIGNsaWVudC0+c2V0QWxsb3dTdG9y
ZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJl
c291cmNlSGFuZGxlKGNvbnRleHQsIHJlcXVlc3QsIGNsaWVudC5nZXQoKSwgZmFsc2UgLypkZWZl
cnNMb2FkaW5nKi8sIHRydWUgLypzaG91bGRDb250ZW50U25pZmYqLykpOwpAQCAtMzg0LDM0ICsz
MjgsMjggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyYwogICAgIHdo
aWxlICghY2xpZW50LT5pc0RvbmUoKSkKICAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxv
b3BdIHJ1bk1vZGU6KE5TU3RyaW5nICopc3luY2hyb25vdXNMb2FkUnVuTG9vcE1vZGUoKSBiZWZv
cmVEYXRlOltOU0RhdGUgZGlzdGFudEZ1dHVyZV1dOwogCi0gICAgcmVzdWx0ID0gY2xpZW50LT5k
YXRhKCk7Ci0gICAgbnNVUkxSZXNwb25zZSA9IGNsaWVudC0+cmVzcG9uc2UoKTsKLSAgICBuc0Vy
cm9yID0gY2xpZW50LT5lcnJvcigpOworICAgIGVycm9yID0gY2xpZW50LT5lcnJvcigpOwogICAg
IAogICAgIFtoYW5kbGUtPmNvbm5lY3Rpb24oKSBjYW5jZWxdOwogCi0KLSAgICBpZiAoIW5zRXJy
b3IpCi0gICAgICAgIHJlc3BvbnNlID0gbnNVUkxSZXNwb25zZTsKKyAgICBpZiAoZXJyb3IuaXNO
dWxsKCkpCisgICAgICAgIHJlc3BvbnNlID0gY2xpZW50LT5yZXNwb25zZSgpOwogICAgIGVsc2Ug
ewogICAgICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVxdWVzdC51cmwoKSwgU3Ry
aW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7Ci0gICAgICAgIGlmIChbbnNFcnJvciBkb21h
aW5dID09IE5TVVJMRXJyb3JEb21haW4pCi0gICAgICAgICAgICBzd2l0Y2ggKFtuc0Vycm9yIGNv
ZGVdKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBOU1VSTEVycm9yVXNlckNhbmNlbGxlZEF1dGhl
bnRpY2F0aW9uOgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHJlYWxs
eSByZXR1cm4gdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlLCBidXQgc2VuZFN5bmNocm9ub3VzUmVx
dWVzdCBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBvbmUuCi0gICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDQwMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBTdGF0dXNDb2RlKFtuc0Vycm9yIGNvZGVdKTsKKyAgICAgICAgaWYgKGVycm9yLmRv
bWFpbigpID09IFN0cmluZyhOU1VSTEVycm9yRG9tYWluKSkKKyAgICAgICAgICAgIHN3aXRjaCAo
ZXJyb3IuZXJyb3JDb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTlNVUkxFcnJvclVzZXJDYW5j
ZWxsZWRBdXRoZW50aWNhdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxk
IHJlYWxseSByZXR1cm4gdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlLCBidXQgc2VuZFN5bmNocm9u
b3VzUmVxdWVzdCBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBvbmUuCisgICAgICAgICAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoNDAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUoZXJyb3IuZXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSg0MDQpOwogICAgIH0KLSAg
ICAKLSAgICBkYXRhLnJlc2l6ZShbcmVzdWx0IGxlbmd0aF0pOwotICAgIG1lbWNweShkYXRhLmRh
dGEoKSwgW3Jlc3VsdCBieXRlc10sIFtyZXN1bHQgbGVuZ3RoXSk7Ci0gICAgCi0gICAgZXJyb3Ig
PSBuc0Vycm9yOworCisgICAgZGF0YS5zd2FwKGNsaWVudC0+bXV0YWJsZURhdGEoKSk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC02MTcs
Mjk1ICs1NTUsNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhIYW5kbGU6KFJlc291cmNlSGFuZGxl
KiloYW5kbGUKLXsKLSAgICBzZWxmID0gW3NlbGYgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRldGFjaEhhbmRsZQotewotICAgIG1faGFuZGxlID0gMDsKLX0KLQot
LSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKW5ld1JlcXVlc3QgcmVkaXJlY3RSZXNw
b25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UKLXsKLSAgICBVTlVTRURfUEFS
QU0oY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50
KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxl
bS81MzgwNjk3Pi4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYmVoYXZpb3IgY2hhbmdlIGlu
IENGTmV0d29yayB3aGVyZSB3aWxsU2VuZFJlcXVlc3QgZ2V0cyBjYWxsZWQgbW9yZSBvZnRlbi4K
LSAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgIHJldHVybiBuZXdSZXF1ZXN0Owot
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChbcmVkaXJlY3RSZXNwb25zZSBpc0tpbmRPZkNs
YXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKQotICAgICAgICBMT0coTmV0d29yaywgIkhh
bmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTZW5kUmVxdWVzdDolQCByZWRpcmVj
dFJlc3BvbnNlOiVkLCBMb2NhdGlvbjo8JUA+IiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIFtuZXdS
ZXF1ZXN0IGRlc2NyaXB0aW9uXSwgc3RhdGljX2Nhc3Q8aW50PihbKGlkKXJlZGlyZWN0UmVzcG9u
c2Ugc3RhdHVzQ29kZV0pLCBbWyhpZClyZWRpcmVjdFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10g
b2JqZWN0Rm9yS2V5OkAiTG9jYXRpb24iXSk7Ci0gICAgZWxzZQotICAgICAgICBMT0coTmV0d29y
aywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTZW5kUmVxdWVzdDolQCBy
ZWRpcmVjdFJlc3BvbnNlOm5vbi1IVFRQIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIFtuZXdSZXF1
ZXN0IGRlc2NyaXB0aW9uXSk7IAotI2VuZGlmCi0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dCA9IG5ld1JlcXVlc3Q7Ci0KLSAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwotCi0gICAgcmV0dXJuIHJlcXVlc3QubnNVUkxSZXF1ZXN0KFVw
ZGF0ZUhUVFBCb2R5KTsKLX0KLQotLSAoQk9PTCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2U6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KLXsKLSAgICBVTlVTRURfUEFS
QU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBj
b25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6JXAiLCBtX2hhbmRsZSwgY29ubmVj
dGlvbik7Ci0KLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBy
ZXR1cm4gbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Ci19Ci0KLS0gKHZv
aWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFs
bGVuZ2UKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29y
aywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBjaGFsbGVuZ2UpOwotCi0g
ICAgaWYgKCFtX2hhbmRsZSkgewotICAgICAgICBbW2NoYWxsZW5nZSBzZW5kZXJdIGNhbmNlbEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxsZW5nZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb3JlKGNo
YWxsZW5nZSkpOwotfQotCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNv
bm5lY3Rpb24gZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKLXsKLSAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkg
ZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYwMTI0
PikuCi0KLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywg
IkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGNoYWxsZW5nZSk7Ci0KLSAgICBp
ZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYW5kbGUtPmRpZENhbmNlbEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Ci19Ci0KLSNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotLSAoQk9PTCljb25uZWN0aW9uOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdh
dGUgY29ubmVjdGlvbjolcCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOiVA
Oi8vJUA6JXUgcmVhbG06JUAgbWV0aG9kOiVAICVAJUAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwg
W3Byb3RlY3Rpb25TcGFjZSBwcm90b2NvbF0sIFtwcm90ZWN0aW9uU3BhY2UgaG9zdF0sIFtwcm90
ZWN0aW9uU3BhY2UgcG9ydF0sIFtwcm90ZWN0aW9uU3BhY2UgcmVhbG1dLCBbcHJvdGVjdGlvblNw
YWNlIGF1dGhlbnRpY2F0aW9uTWV0aG9kXSwgW3Byb3RlY3Rpb25TcGFjZSBpc1Byb3h5XSA/IEAi
cHJveHk6IiA6IEAiIiwgW3Byb3RlY3Rpb25TcGFjZSBpc1Byb3h5XSA/IFtwcm90ZWN0aW9uU3Bh
Y2UgcHJveHlUeXBlXSA6IEAiIik7Ci0KLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1
cm4gTk87Ci0KLSAgICByZXR1cm4gbV9oYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoY29yZShwcm90ZWN0aW9uU3BhY2UpKTsKLX0KLSNlbmRpZgotCi0tICh2b2lk
KWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVJlc3Bv
bnNlOihOU1VSTFJlc3BvbnNlICopcgotewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsK
LQotICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlk
UmVjZWl2ZVJlc3BvbnNlOiVwIChIVFRQIHN0YXR1cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUgJyVz
JykiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwgW3IgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzdGF0dXNDb2RlKV0gPyBbKGlkKXIgc3RhdHVzQ29kZV0gOiAwLCBbW3IgTUlNRVR5cGVd
IFVURjhTdHJpbmddKTsKLQotICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5nIGlm
IHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMwNCBOb3QgTW9kaWZpZWQuCi0gICAgaW50IHN0
YXR1c0NvZGUgPSBbciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YXR1c0NvZGUpXSA/
IFsoaWQpciBzdGF0dXNDb2RlXSA6IDA7Ci0gICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQotICAg
ICAgICBhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5KFtyIF9DRlVSTFJlc3BvbnNlXSk7Ci0KLSAg
ICBpZiAoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVI
VFRQQm9keSkgX3Byb3BlcnR5Rm9yS2V5OkAiRm9yY2VIVE1MTUlNRVR5cGUiXSkKLSAgICAgICAg
W3IgX3NldE1JTUVUeXBlOkAidGV4dC9odG1sIl07Ci0KLSAgICBtX2hhbmRsZS0+Y2xpZW50KCkt
PmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgcik7Ci19Ci0KLSNpZiBVU0UoTkVUV09SS19D
RkRBVEFfQVJSQVlfQ0FMTEJBQ0spCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlv
biAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFBcnJheQot
ewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBMT0coTmV0d29yaywgIkhhbmRs
ZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVEYXRhQXJyYXk6JXAgYXJyYXlT
aXplOiVkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGFBcnJheSwgW2RhdGFBcnJheSBjb3Vu
dF0pOwotCi0gICAgaWYgKCFkYXRhQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9oYW5kbGUtPmhhbmRsZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+KGRh
dGFBcnJheSkpOwotICAgIC8vIFRoZSBjYWxsIHRvIGRpZFJlY2VpdmVEYXRhIGFib3ZlIGNhbiBj
YW5jZWwgYSBsb2FkLCBhbmQgaWYgc28sIHRoZSBkZWxlZ2F0ZSAoc2VsZikgY291bGQgaGF2ZSBi
ZWVuIGRlYWxsb2NhdGVkIGJ5IHRoaXMgcG9pbnQuCi19Ci0jZW5kaWYKLQotLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0Rh
dGEgKilkYXRhIGxlbmd0aFJlY2VpdmVkOihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQKLXsKLSAg
ICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aFJlY2Vp
dmVkKTsKLQotICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246
JXAgZGlkUmVjZWl2ZURhdGE6JXAgbGVuZ3RoUmVjZWl2ZWQ6JWxsZCIsIG1faGFuZGxlLCBjb25u
ZWN0aW9uLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Ci0KLSAgICBpZiAoIW1faGFuZGxlIHx8ICFt
X2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSWYgd2Ug
Z2V0IG1vcmUgdGhhbiAyQiBieXRlcyBpbiBhIHNpbmdsZSBjaHVuaywgdGhpcyBjb2RlIHdvbid0
IGRvIHRoZSByaWdodCB0aGluZy4KLSAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29tcHV0
ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2Uu
Ci0gICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZpbGUuCi0KLSAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzkz
Ci0gICAgLy8gLTEgbWVhbnMgd2UgZG8gbm90IHByb3ZpZGUgYW55IGRhdGEgYWJvdXQgdHJhbnNm
ZXIgc2l6ZSB0byBpbnNwZWN0b3Igc28gaXQgd291bGQgdXNlCi0gICAgLy8gQ29udGVudC1MZW5n
dGggaGVhZGVycyBvciBjb250ZW50IHNpemUgdG8gc2hvdyB0cmFuc2ZlciBzaXplLgotICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVy
Ojp3cmFwTlNEYXRhKGRhdGEpLCAtMSk7Ci19Ci0KLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxD
b25uZWN0aW9uICopY29ubmVjdGlvbiB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGE6KE5TRGF0YSAqKWRh
dGEKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywg
IkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTdG9wQnVmZmVyaW5nRGF0YTol
cCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBkYXRhKTsKLQotICAgIGlmICghbV9oYW5kbGUgfHwg
IW1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBJZiB3
ZSBnZXQgYSByZXNvdXJjZSB3aXRoIG1vcmUgdGhhbiAyQiBieXRlcywgdGhpcyBjb2RlIHdvbid0
IGRvIHRoZSByaWdodCB0aGluZy4KLSAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29tcHV0
ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2Uu
Ci0gICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZpbGUuCi0gICAg
bV9oYW5kbGUtPmNsaWVudCgpLT53aWxsU3RvcEJ1ZmZlcmluZ0RhdGEobV9oYW5kbGUsIChjb25z
dCBjaGFyKilbZGF0YSBieXRlc10sIHN0YXRpY19jYXN0PGludD4oW2RhdGEgbGVuZ3RoXSkpOwot
fQotCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlk
U2VuZEJvZHlEYXRhOihOU0ludGVnZXIpYnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNXcml0dGVuOihO
U0ludGVnZXIpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTooTlNJ
bnRlZ2VyKXRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUKLXsKLSAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVzV3JpdHRlbik7Ci0KLSAgICBMT0coTmV0
d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFNlbmRCb2R5RGF0YTol
ZCB0b3RhbEJ5dGVzV3JpdHRlbjolZCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlOiVkIiwgbV9o
YW5kbGUsIGNvbm5lY3Rpb24sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFs
Qnl0ZXNFeHBlY3RlZFRvV3JpdGUpOwotCi0gICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUt
PmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRT
ZW5kRGF0YShtX2hhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3RlZFRv
V3JpdGUpOwotfQotCi0tICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwot
Ci0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbkRpZEZpbmlz
aExvYWRpbmc6JXAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFuZGxl
IHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxl
LT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSwgMCk7Ci19Ci0KLS0gKHZvaWQp
Y29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRGYWlsV2l0aEVycm9y
OihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAg
ICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZEZhaWxX
aXRoRXJyb3I6JUAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgZXJyb3IpOwotCi0gICAgaWYgKCFt
X2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIGVycm9yKTsKLX0KLQotCi0tIChO
U0NhY2hlZFVSTFJlc3BvbnNlICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKWNhY2hlZFJlc3Bv
bnNlCi17Ci0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbjol
cCB3aWxsQ2FjaGVSZXNwb25zZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBjYWNoZWRSZXNw
b25zZSk7Ci0KLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFu
ZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAv
LyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNjMwMDk5MD4gQ2FjaGluZyBkb2VzIG5v
dCByZXNwZWN0IFZhcnkgSFRUUCBoZWFkZXIuCi0gICAgLy8gRklYTUU6IFdlYkNvcmUgY2FjaGUg
aGFzIGlzc3VlcyB3aXRoIFZhcnksIHRvbyAoYnVnIDU4Nzk3LCBidWcgNzE1MDkpLgotICAgIGlm
IChbW2NhY2hlZFJlc3BvbnNlIHJlc3BvbnNlXSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNw
b25zZSBjbGFzc11dCi0gICAgICAgICYmIFtbKE5TSFRUUFVSTFJlc3BvbnNlICopW2NhY2hlZFJl
c3BvbnNlIHJlc3BvbnNlXSBhbGxIZWFkZXJGaWVsZHNdIG9iamVjdEZvcktleTpAIlZhcnkiXSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKm5ld1Jlc3Bv
bnNlID0gbV9oYW5kbGUtPmNsaWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZShtX2hhbmRsZSwgY2Fj
aGVkUmVzcG9uc2UpOwotICAgIGlmIChuZXdSZXNwb25zZSAhPSBjYWNoZWRSZXNwb25zZSkKLSAg
ICAgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOwotICAgIAotICAgIHJldHVybiBuZXdSZXNwb25zZTsK
LX0KLQotQGVuZAotCi0KLVdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6fldlYkNvcmVT
eW5jaHJvbm91c0xvYWRlckNsaWVudCgpCi17Ci0gICAgW21fcmVzcG9uc2UgcmVsZWFzZV07Ci0g
ICAgW21fZGF0YSByZWxlYXNlXTsKLSAgICBbbV9lcnJvciByZWxlYXNlXTsKLX0KLQotdm9pZCBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKQotewotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRz
IHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5IGV2ZW4gZm9yIGNy
b3NzLWRvbWFpbiByZXF1ZXN0cy4KLSAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LnVybCgpKSkgewotICAgICAg
ICBBU1NFUlQoIW1fZXJyb3IpOwotICAgICAgICBtX2Vycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBp
bml0V2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluIGNvZGU6TlNVUkxFcnJvckJhZFNlcnZlclJl
c3BvbnNlIHVzZXJJbmZvOm5pbF07Ci0gICAgICAgIG1faXNEb25lID0gdHJ1ZTsKLSAgICAgICAg
cmVxdWVzdCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJj
ZUhhbmRsZSopCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGll
bnQgd2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVu
LgotICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci19Ci0KLSNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotYm9vbCBXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50LiA8aHR0cDovL3dlYmtpdC5vcmcvYi82NTE5Nj4KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICAvLyBG
SVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBjcmVkZW50aWFscywgYXMgaW4gYXN5
bmMgY2FzZS4KLSAgICBbY2hhbGxlbmdlLnNlbmRlcigpIGNvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQotewotICAgIFttX3Jlc3BvbnNlIHJlbGVhc2VdOwotICAgIG1fcmVzcG9u
c2UgPSBbcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpIGNvcHldOwotfQotCi12b2lkIFdlYkNvcmVT
eW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKQot
ewotICAgIGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBbW05TTXV0YWJsZURhdGEgYWxs
b2NdIGluaXRdOwotICAgIFttX2RhdGEgYXBwZW5kQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXTsK
LX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExvYWRp
bmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCi17Ci0gICAgbV9pc0RvbmUgPSB0cnVlOwotfQot
Ci12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIEFTU0VSVCghbV9lcnJv
cik7Ci0KLSAgICBtX2Vycm9yID0gW2Vycm9yIGNvcHldOwotICAgIG1faXNEb25lID0gdHJ1ZTsK
LX0KLQotCiAjZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRl
ckNsaWVudC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50LmgiCisKKyNpZiAhVVNFKENGTkVUV09SSykKKworI2luY2x1ZGUg
IkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSkKK3sKKyAgICAvLyBGSVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBjcmVk
ZW50aWFscywgYXMgaW4gYXN5bmMgY2FzZS4KKyAgICBbY2hhbGxlbmdlLnNlbmRlcigpIGNvbnRp
bnVlV2l0aG91dENyZWRlbnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2Uu
bnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKK30KKworI2lmICFVU0UoQ0ZORVRXT1JL
KQorUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRSZXNw
b25zZUVycm9yKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3IgPSBhZG9wdE5TKFtb
TlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJM
RXJyb3JCYWRTZXJ2ZXJSZXNwb25zZSB1c2VySW5mbzpuaWxdKTsKKyAgICByZXR1cm4gZXJyb3Iu
Z2V0KCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5k
bGVBc0RlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFu
ZGxlQXNEZWxlZ2F0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlX2gKKyNkZWZpbmUgV2Vi
Q29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZV9oCisKKyNpZiAhVVNFKENGTkVUV09SSykKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOworfQorCitAaW50
ZXJmYWNlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxD
b25uZWN0aW9uRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogbV9oYW5k
bGU7Cit9CistIChpZClpbml0V2l0aEhhbmRsZTooV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKWhh
bmRsZTsKKy0gKHZvaWQpZGV0YWNoSGFuZGxlOworQGVuZAorCisjZW5kaWYgLy8gIVVTRShDRk5F
VFdPUkspCisjZW5kaWYgLy8gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5k
bGVBc0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5oIgorCisjaWYgIVVTRShDRk5FVFdPUkspCisKKyNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgiCisjaW1wb3J0ICJBdXRoZW50aWNhdGlvbk1hYy5oIgorI2ltcG9ydCAiTG9nZ2lu
Zy5oIgorI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbXBvcnQgIlJlc291cmNlSGFuZGxl
Q2xpZW50LmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbXBvcnQgIlJlc291cmNl
UmVzcG9uc2UuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2ltcG9ydCAiV2ViQ29yZVVS
TFJlc3BvbnNlLmgiCisKK0BpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChEZXRhaWxzKQorLSAoaWQp
X3Byb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKWtleTsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlCisKKy0gKGlkKWluaXRXaXRoSGFuZGxlOihSZXNvdXJjZUhhbmRsZSopaGFuZGxlCit7Cisg
ICAgc2VsZiA9IFtzZWxmIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZXRhY2hIYW5kbGUKK3sKKyAgICBtX2hhbmRsZSA9IDA7Cit9CisKKy0gKE5TVVJMUmVxdWVz
dCAqKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gd2lsbFNlbmRSZXF1
ZXN0OihOU1VSTFJlcXVlc3QgKiluZXdSZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKilyZWRpcmVjdFJlc3BvbnNlCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24p
OworCisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUzODA2OTc+LiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBiZWhhdmlvciBjaGFuZ2UgaW4gQ0ZOZXR3b3JrIHdoZXJlIHdpbGxTZW5kUmVxdWVzdCBnZXRz
IGNhbGxlZCBtb3JlIG9mdGVuLgorICAgIGlmICghcmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAg
cmV0dXJuIG5ld1JlcXVlc3Q7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKFtyZWRpcmVj
dFJlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCisgICAg
ICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgd2lsbFNl
bmRSZXF1ZXN0OiVAIHJlZGlyZWN0UmVzcG9uc2U6JWQsIExvY2F0aW9uOjwlQD4iLCBtX2hhbmRs
ZSwgY29ubmVjdGlvbiwgW25ld1JlcXVlc3QgZGVzY3JpcHRpb25dLCBzdGF0aWNfY2FzdDxpbnQ+
KFsoaWQpcmVkaXJlY3RSZXNwb25zZSBzdGF0dXNDb2RlXSksIFtbKGlkKXJlZGlyZWN0UmVzcG9u
c2UgYWxsSGVhZGVyRmllbGRzXSBvYmplY3RGb3JLZXk6QCJMb2NhdGlvbiJdKTsKKyAgICBlbHNl
CisgICAgICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAg
d2lsbFNlbmRSZXF1ZXN0OiVAIHJlZGlyZWN0UmVzcG9uc2U6bm9uLUhUVFAiLCBtX2hhbmRsZSwg
Y29ubmVjdGlvbiwgW25ld1JlcXVlc3QgZGVzY3JpcHRpb25dKTsgCisjZW5kaWYKKworICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0ID0gbmV3UmVxdWVzdDsKKworICAgIG1faGFuZGxlLT53aWxs
U2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisKKyAgICByZXR1cm4gcmVx
dWVzdC5uc1VSTFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpOworfQorCistIChCT09MKWNvbm5lY3Rp
b25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
bgoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKworICAgIExPRyhOZXR3b3JrLCAi
SGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTol
cCIsIG1faGFuZGxlLCBjb25uZWN0aW9uKTsKKworICAgIGlmICghbV9oYW5kbGUpCisgICAgICAg
IHJldHVybiBOTzsKKworICAgIHJldHVybiBtX2hhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25u
ZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rp
b24sIGNoYWxsZW5nZSk7CisKKyAgICBpZiAoIW1faGFuZGxlKSB7CisgICAgICAgIFtbY2hhbGxl
bmdlIHNlbmRlcl0gY2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjoo
TlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQoreworICAgIC8v
IEZJWE1FOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIChzZWUgPHJk
YXI6Ly9wcm9ibGVtLzg5NjAxMjQ+KS4KKworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsK
KworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlk
Q2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6JXAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwg
Y2hhbGxlbmdlKTsKKworICAgIGlmICghbV9oYW5kbGUpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2hhbmRsZS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29yZShjaGFsbGVuZ2Up
KTsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCistIChCT09M
KWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gY2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9u
U3BhY2UKK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisKKyAgICBMT0coTmV0d29y
aywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2U6JUA6Ly8lQDoldSByZWFsbTolQCBtZXRob2Q6JUAgJUAlQCIsIG1f
aGFuZGxlLCBjb25uZWN0aW9uLCBbcHJvdGVjdGlvblNwYWNlIHByb3RvY29sXSwgW3Byb3RlY3Rp
b25TcGFjZSBob3N0XSwgW3Byb3RlY3Rpb25TcGFjZSBwb3J0XSwgW3Byb3RlY3Rpb25TcGFjZSBy
ZWFsbV0sIFtwcm90ZWN0aW9uU3BhY2UgYXV0aGVudGljYXRpb25NZXRob2RdLCBbcHJvdGVjdGlv
blNwYWNlIGlzUHJveHldID8gQCJwcm94eToiIDogQCIiLCBbcHJvdGVjdGlvblNwYWNlIGlzUHJv
eHldID8gW3Byb3RlY3Rpb25TcGFjZSBwcm94eVR5cGVdIDogQCIiKTsKKworICAgIGlmICghbV9o
YW5kbGUpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBtX2hhbmRsZS0+Y2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlKHByb3RlY3Rpb25TcGFjZSkpOwor
fQorI2VuZGlmCisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCit7CisgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOworCisgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdh
dGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlUmVzcG9uc2U6JXAgKEhUVFAgc3RhdHVzICVkLCBy
ZXBvcnRlZCBNSU1FVHlwZSAnJXMnKSIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCByLCBbciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YXR1c0NvZGUpXSA/IFsoaWQpciBzdGF0dXNDb2Rl
XSA6IDAsIFtbciBNSU1FVHlwZV0gVVRGOFN0cmluZ10pOworCisgICAgaWYgKCFtX2hhbmRsZSB8
fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdm9pZCBN
SU1FIHR5cGUgc25pZmZpbmcgaWYgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5vdCBN
b2RpZmllZC4KKyAgICBpbnQgc3RhdHVzQ29kZSA9IFtyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc3RhdHVzQ29kZSldID8gWyhpZClyIHN0YXR1c0NvZGVdIDogMDsKKyAgICBpZiAoc3Rh
dHVzQ29kZSAhPSAzMDQpCisgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoW3IgX0NG
VVJMUmVzcG9uc2VdKTsKKworICAgIGlmIChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJM
UmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBfcHJvcGVydHlGb3JLZXk6QCJGb3JjZUhUTUxN
SU1FVHlwZSJdKQorICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiXTsKKworICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCByKTsKK30K
KworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKy0gKHZvaWQpY29ubmVj
dGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0YUFycmF5OihO
U0FycmF5ICopZGF0YUFycmF5Cit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAg
IExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2
ZURhdGFBcnJheTolcCBhcnJheVNpemU6JWQiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgZGF0YUFy
cmF5LCBbZGF0YUFycmF5IGNvdW50XSk7CisKKyAgICBpZiAoIWRhdGFBcnJheSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFycmF5KHJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSk7CisgICAgLy8gVGhlIGNhbGwgdG8gZGlkUmVj
ZWl2ZURhdGEgYWJvdmUgY2FuIGNhbmNlbCBhIGxvYWQsIGFuZCBpZiBzbywgdGhlIGRlbGVnYXRl
IChzZWxmKSBjb3VsZCBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYnkgdGhpcyBwb2ludC4KK30KKyNl
bmRpZgorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAqKWRhdGEgbGVuZ3RoUmVjZWl2ZWQ6KGxvbmcgbG9uZyls
ZW5ndGhSZWNlaXZlZAoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBVTlVT
RURfUEFSQU0obGVuZ3RoUmVjZWl2ZWQpOworCisgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAg
ZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlRGF0YTolcCBsZW5ndGhSZWNlaXZlZDol
bGxkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKKworICAg
IGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQgbW9yZSB0aGFuIDJCIGJ5dGVzIGluIGEgc2luZ2xlIGNo
dW5rLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgIC8vIEhvd2V2ZXIs
IHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdvbid0
IGhhcHBlbiBpbiBwcmFjdGljZS4KKyAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRoIGEgZ2lh
bnQgbG9jYWwgZmlsZS4KKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk3OTMKKyAgICAvLyAtMSBtZWFucyB3ZSBkbyBub3QgcHJvdmlkZSBh
bnkgZGF0YSBhYm91dCB0cmFuc2ZlciBzaXplIHRvIGluc3BlY3RvciBzbyBpdCB3b3VsZCB1c2UK
KyAgICAvLyBDb250ZW50LUxlbmd0aCBoZWFkZXJzIG9yIGNvbnRlbnQgc2l6ZSB0byBzaG93IHRy
YW5zZmVyIHNpemUuCisgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1f
aGFuZGxlLCBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSksIC0xKTsKK30KKworLSAodm9p
ZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxTdG9wQnVmZmVy
aW5nRGF0YTooTlNEYXRhICopZGF0YQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsK
KworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgd2ls
bFN0b3BCdWZmZXJpbmdEYXRhOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEpOworCisg
ICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm47
CisgICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNlIHdpdGggbW9yZSB0aGFuIDJCIGJ5
dGVzLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgIC8vIEhvd2V2ZXIs
IHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdvbid0
IGhhcHBlbiBpbiBwcmFjdGljZS4KKyAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRoIGEgZ2lh
bnQgbG9jYWwgZmlsZS4KKyAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxTdG9wQnVmZmVyaW5n
RGF0YShtX2hhbmRsZSwgKGNvbnN0IGNoYXIqKVtkYXRhIGJ5dGVzXSwgc3RhdGljX2Nhc3Q8aW50
PihbZGF0YSBsZW5ndGhdKSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0
aW9uICopY29ubmVjdGlvbiBkaWRTZW5kQm9keURhdGE6KE5TSW50ZWdlcilieXRlc1dyaXR0ZW4g
dG90YWxCeXRlc1dyaXR0ZW46KE5TSW50ZWdlcil0b3RhbEJ5dGVzV3JpdHRlbiB0b3RhbEJ5dGVz
RXhwZWN0ZWRUb1dyaXRlOihOU0ludGVnZXIpdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZQorewor
ICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZXNXcml0
dGVuKTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246
JXAgZGlkU2VuZEJvZHlEYXRhOiVkIHRvdGFsQnl0ZXNXcml0dGVuOiVkIHRvdGFsQnl0ZXNFeHBl
Y3RlZFRvV3JpdGU6JWQiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgYnl0ZXNXcml0dGVuLCB0b3Rh
bEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7CisKKyAgICBpZiAoIW1f
aGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hh
bmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFuZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwg
dG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbkRpZEZp
bmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KK3sKKyAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7CisKKyAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0
ZSBjb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uKTsK
KworICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxl
LCAwKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0
aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIFVOVVNFRF9QQVJB
TShjb25uZWN0aW9uKTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNv
bm5lY3Rpb246JXAgZGlkRmFpbFdpdGhFcnJvcjolQCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBl
cnJvcik7CisKKyAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwg
ZXJyb3IpOworfQorCisKKy0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKiljb25uZWN0aW9uOihOU1VS
TENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVSTFJl
c3BvbnNlICopY2FjaGVkUmVzcG9uc2UKK3sKKyAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBk
ZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxDYWNoZVJlc3BvbnNlOiVwIiwgbV9oYW5kbGUsIGNv
bm5lY3Rpb24sIGNhY2hlZFJlc3BvbnNlKTsKKworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKKworICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS82MzAw
OTkwPiBDYWNoaW5nIGRvZXMgbm90IHJlc3BlY3QgVmFyeSBIVFRQIGhlYWRlci4KKyAgICAvLyBG
SVhNRTogV2ViQ29yZSBjYWNoZSBoYXMgaXNzdWVzIHdpdGggVmFyeSwgdG9vIChidWcgNTg3OTcs
IGJ1ZyA3MTUwOSkuCisgICAgaWYgKFtbY2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIGlzS2luZE9m
Q2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0KKyAgICAgICAgJiYgW1soTlNIVFRQVVJM
UmVzcG9uc2UgKilbY2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIGFsbEhlYWRlckZpZWxkc10gb2Jq
ZWN0Rm9yS2V5OkAiVmFyeSJdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNDYWNoZWRV
UkxSZXNwb25zZSAqbmV3UmVzcG9uc2UgPSBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxDYWNoZVJl
c3BvbnNlKG1faGFuZGxlLCBjYWNoZWRSZXNwb25zZSk7CisgICAgaWYgKG5ld1Jlc3BvbnNlICE9
IGNhY2hlZFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gbmV3UmVzcG9uc2U7CisgICAgCisgICAg
cmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCitAZW5kCisKKyNlbmRpZiAvLyAhVVNFKENGTkVUV09S
SykKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194641</attachid>
            <date>2013-03-22 15:22:34 -0700</date>
            <delta_ts>2013-03-22 15:29:31 -0700</delta_ts>
            <desc>with Windows fixes</desc>
            <filename>SplitResourceHandle.txt</filename>
            <type>text/plain</type>
            <size>58889</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTIyICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFJlc291cmNlSGFu
ZGxlTWFjIGludG8gbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzEwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEl0J3MgZ3Jvd24gdG9vIGJpZyB0byBuYXZpZ2F0ZSwgYW5kIEkn
bSBnb2luZyB0byBtYWtlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUKKyAgICAgICAg
c3Vic3RhbnRpYWxseSBtb3JlIGNvbXBsaWNhdGVkIHlldC4KKworICAgICAgICAxLiBNZWNoYW5p
Y2FsbHkgbW92ZWQgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBpbnRvIHNlcGFyYXRl
IGZpbGVzLgorICAgICAgICAyLiBSZWZhY3RvcmVkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNs
aWVudCB0byBiZSBjcm9zcy1wbGF0Zm9ybSwgYW5kIG1vdmVkIGl0IGludG8KKyAgICAgICAgc2Vw
YXJhdGUgZmlsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLm1tOiBBZGRlZC4KKwogMjAxMy0wMy0yMiAgUm9nZXIgRm9uZyAgPHJv
Z2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZvcmNlIGtpbGwgZ2Nj
LTMuZXhlIGR1cmluZyBiaW5kaW5ncyBnZW5lcmF0aW9uIHRlc3RzIHRvIGF2b2lkIHByb2Nlc3Mg
aGFuZ3MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gMTQ2NTQ2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMjgxLDYgKzMzMjgxLDE0IEBACiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cbmV0d29ya1xTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgogCQkJCTxGaWx0ZXIKIAkJCQkJTmFtZT0iY2YiCiAJCQkJCT4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTQ2NTQ2
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDY0OSw2ICs0NjQ5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1FcnJvckJh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNG
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTE5NDAsNiArMTE5NDEsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU29ja2V0U3RyZWFt
SGFuZGxlQmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0
d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIgLz4KICAg
ICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcQXV0aGVu
dGljYXRpb25DRi5oIiAvPgogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxEb3dubG9hZEJ1bmRsZS5oIiAvPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQ2NTQ2KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzE4LDYgKzMzMTgsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0
d29ya1xTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3Jt
XG5ldHdvcms8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29yazwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNh
dGlvbkNGLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY2Y8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KQEAgLTEwMTUyLDYgKzEwMTU1LDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmgi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGNmXERvd25sb2FkQnVuZGxlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxu
ZXR3b3JrXGNmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDY1
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTYyMzIsNiArNjIzMiwxMSBAQAogCQlFMTdCNDkxNjE2QTlCMDk0
MDAxQzg4MzkgLyogVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTdCNDkxNDE2QTlCMDkzMDAxQzg4MzkgLyogVHJhbnNpdGlv
bkV2ZW50LmggKi87IH07CiAJCUUxN0I0OTIxMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE3QjQ5MUYxNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50LmggKi87IH07CiAJ
CUUxN0I0OTIyMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTdCNDkyMDE2QTlCOEZG
MDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuY3BwICovOyB9OworCQlFMTgwODEwRTE2RkNF
Q0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODA4MTBDMTZGQ0VDREYw
MEI4MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tICovOyB9OworCQlF
MTgwODEwRjE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgx
MEQxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCAq
LzsgfTsKKwkJRTE4MDgxMTIxNkZDRjQyRjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
ODA4MTEwMTZGQ0Y0MkUwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAgKi87
IH07CisJCUUxODA4MTE2MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODA4
MTE0MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbSAqLzsgfTsK
KwkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExNTE2
RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJRTE4
MjU2OEYwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNTY4RDBFRjJCMDJEMDA5MzMy
NDIgLyogSlNXb3JrZXJDb250ZXh0LmNwcCAqLzsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAwOTMz
MjQyIC8qIEpTV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE4MjU2OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4
dC5oICovOyB9OwogCQlFMTgyNThBQzBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxODI1OEFCMEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckNvbnRleHRDdXN0b20uY3BwICov
OyB9OwpAQCAtMTM5NDQsNiArMTM5NDksMTEgQEAKIAkJRTE3QjQ5MTQxNkE5QjA5MzAwMUM4ODM5
IC8qIFRyYW5zaXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFuc2l0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3QjQ5MUYx
NkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTVHJhbnNpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxN0I0OTIwMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyYW5zaXRpb25FdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxODA4MTBDMTZGQ0VDREYwMEI4
MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4MDgxMEQxNkZDRUNERjAwQjgw
RDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTgwODExMDE2RkNGNDJFMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMTgwODExNDE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGll
bnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeW5jaHJvbm91
c0xvYWRlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4MDgxMTUx
NkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3Jr
ZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MjU2OEUwRUYy
QjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMTYsNiArMTYzMjYsOCBA
QAogCQkJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
LmNwcCAqLywKIAkJCQk1MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQuaCAqLywKKwkJCQlFMTgwODExMDE2RkNGNDJFMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAorCQkJCUUxODA4MTE1MTZGQ0Y5Q0IwMEI4MEQw
NyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBuZXR3
b3JrOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2MzM3LDYgKzE2MzQ5LDkgQEAK
IAkJCQk1MTRDNzY0QjBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSAq
LywKIAkJCQkxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmggKi8sCiAJ
CQkJMUZBRkJGMTcxNUE1RkE1MjAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5tbSAqLywKKwkJCQlF
MTgwODEwQzE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0
ZS5tbSAqLywKKwkJCQlFMTgwODEwRDE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNl
SGFuZGxlQXNEZWxlZ2F0ZS5oICovLAorCQkJCUUxODA4MTE0MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBT
eW5jaHJvbm91c0xvYWRlckNsaWVudC5tbSAqLywKIAkJCQkzN0Y4MThGQjBENjU3NjA2MDA1RTFG
MDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8sCiAJCQkJMzdGODE4RkMwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLywKIAkJCSk7CkBAIC0yNjc2Nyw2ICsyNjc4
Miw4IEBACiAJCQkJREFFRDIwMzExNkYyNDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xp
Y3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTBFMThDREExNkY5Mjg1ODAw
QzY1NDg2IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMTgwODEwRjE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNE
ZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8q
IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI5OTc1LDYgKzI5
OTkyLDkgQEAKIAkJCQlFMUJBMDAzMTE2RkI5MkFDMDBCQTdBMzUgLyogUmVzb3VyY2VIYW5kbGVD
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBFMThDRDgxNkY5Mjg1ODAwQzY1NDg2IC8q
IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEUxOENE
OTE2RjkyODU4MDBDNjU0ODYgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTE4MDgxMEUxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMTgwODExMjE2RkNG
NDJGMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTE4MDgxMTYxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgor
CisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorCisjaWYgVVNFKENGTkVU
V09SSykKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxDb25uZWN0aW9uUHJpdi5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6On5TeW5j
aHJvbm91c0xvYWRlckNsaWVudCgpCit7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSov
KQoreworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUg
cmVkaXJlY3QgY29ycmVjdGx5IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KKyAgICBp
ZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCksIHJlcXVlc3QudXJsKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9lcnJv
ci5pc051bGwoKSk7CisgICAgbV9lcnJvciA9IHBsYXRmb3JtQmFkUmVzcG9uc2VFcnJvcigpOwor
ICAgIG1faXNEb25lID0gdHJ1ZTsKKyAgICByZXF1ZXN0ID0gMDsKK30KKworYm9vbCBTeW5jaHJv
bm91c0xvYWRlckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5k
bGUqKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50IHdo
ZXRoZXIgdXNpbmcgY3JlZGVudGlhbCBzdG9yYWdlIGlzIGdsb2JhbGx5IGZvcmJpZGRlbi4KKyAg
ICByZXR1cm4gbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworfQorCisjaWYgVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK2Jvb2wgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBQcm90ZWN0aW9uU3BhY2UmKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIEZyYW1l
TG9hZGVyQ2xpZW50LiA8aHR0cDovL3dlYmtpdC5vcmcvYi82NTE5Nj4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKK3ZvaWQgU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQorewor
ICAgIC8vIEZJWE1FOiBUaGUgdXNlciBzaG91bGQgYmUgYXNrZWQgZm9yIGNyZWRlbnRpYWxzLCBh
cyBpbiBhc3luYyBjYXNlLgorICAgIENGVVJMQ29ubmVjdGlvblVzZUNyZWRlbnRpYWwoaGFuZGxl
LT5jb25uZWN0aW9uKCksIDAsIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSk7Cit9
CisjZW5kaWYKKwordm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOworfQorCit2b2lkIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pCit7CisgICAgbV9kYXRhLmFw
cGVuZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpk
aWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlKQoreworICAgIG1faXNEb25l
ID0gdHJ1ZTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVCht
X2Vycm9yLmlzTnVsbCgpKTsKKworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX2lzRG9uZSA9
IHRydWU7Cit9CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZFcnJvclJlZj4gY2ZFcnJvcihBZG9wdENGLCBDRkVycm9yQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZVUkxFcnJvckJhZFNlcnZlclJl
c3BvbnNlLCAwKSk7CisgICAgcmV0dXJuIGNmRXJyb3IuZ2V0KCk7Cit9CisjZW5kaWYKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3luY2hyb25vdXNMb2FkZXJDbGll
bnRfaAorI2RlZmluZSBTeW5jaHJvbm91c0xvYWRlckNsaWVudF9oCisKKyNpbmNsdWRlICJSZXNv
dXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTeW5jaHJvbm91c0xvYWRl
ckNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB+U3luY2hyb25vdXNMb2FkZXJDbGllbnQo
KTsKKworICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFsbG93KSB7IG1f
YWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9CisgICAgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisgICAgVmVjdG9y
PGNoYXI+JiBtdXRhYmxlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorICAgIGJvb2wgaXNE
b25lKCkgeyByZXR1cm4gbV9pc0RvbmU7IH0KKworcHJpdmF0ZToKKyAgICBTeW5jaHJvbm91c0xv
YWRlckNsaWVudCgpCisgICAgICAgIDogbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKGZhbHNlKQor
ICAgICAgICAsIG1faXNEb25lKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8q
ZW5jb2RlZERhdGFMZW5ndGgqLykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpIE9WRVJSSURFOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCisgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKSBPVkVSUklERTsKKyNl
bmRpZgorCisgICAgUmVzb3VyY2VFcnJvciBwbGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3IoKTsKKwor
ICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIFJlc291cmNlUmVzcG9uc2Ug
bV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIFJlc291cmNlRXJyb3Ig
bV9lcnJvcjsKKyAgICBib29sIG1faXNEb25lOworfTsKK30KKworI2VuZGlmIC8vIFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMTQ2
NTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRs
ZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgogI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC03Nyw0NSArNzgsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogCi1jbGFzcyBXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXJDbGllbnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY3Jl
YXRlKFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50KHJlc3BvbnNlLCBlcnJvcikpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QWxsb3dTdG9y
ZWRDcmVkZW50aWFscyhib29sIGFsbG93KSB7IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IGFs
bG93OyB9Ci0gICAgYm9vbCBpc0RvbmUoKSB7IHJldHVybiBtX2lzRG9uZTsgfQotCi0gICAgQ0ZN
dXRhYmxlRGF0YVJlZiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLSAgICAgICAgOiBtX2FsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMoZmFsc2UpCi0gICAgICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKLSAgICAgICAg
LCBtX2Vycm9yKGVycm9yKQotICAgICAgICAsIG1faXNEb25lKGZhbHNlKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNl
Ki8pOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJj
ZUhhbmRsZSopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgq
Lyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBk
b3VibGUgLypmaW5pc2hUaW1lKi8pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNF
X0FVVEhfQ0FMTEJBQ0spCi0gICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsK
LSNlbmRpZgotCi0gICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0gICAgUmVzb3Vy
Y2VSZXNwb25zZSYgbV9yZXNwb25zZTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4g
bV9kYXRhOwotICAgIFJlc291cmNlRXJyb3ImIG1fZXJyb3I7Ci0gICAgYm9vbCBtX2lzRG9uZTsK
LX07Ci0KIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVI
b3N0cygpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGhvc3Rz
LCAoKSk7CkBAIC03MDYsNyArNjY4LDcgQEAgQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5
bmNocm9ub3VzTAogICAgIHJldHVybiBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVu
TG9vcE1vZGUiKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjxj
aGFyPiYgdmVjdG9yKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFy
PiYgZGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JXMgYWxsb3dTdG9yZWRDcmVkZW50aWFsczoldSIsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RvcmVkQ3JlZGVudGlhbHMpOwog
CkBAIC03MTUsNyArNjc3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVz
b3VyYwogICAgIEFTU0VSVChyZXNwb25zZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKGVycm9yLmlz
TnVsbCgpKTsKIAotICAgIE93blB0cjxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ+IGNs
aWVudCA9IFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6Y3JlYXRlKHJlc3BvbnNlLCBl
cnJvcik7CisgICAgT3duUHRyPFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50PiBjbGllbnQgPSBTeW5j
aHJvbm91c0xvYWRlckNsaWVudDo6Y3JlYXRlKCk7CiAgICAgY2xpZW50LT5zZXRBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMp
OwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgUmVz
b3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwgY2xpZW50LmdldCgpLCBmYWxzZSAvKmRlZmVy
c0xvYWRpbmcqLywgdHJ1ZSAvKnNob3VsZENvbnRlbnRTbmlmZiovKSk7CkBAIC03MzYsMjkgKzY5
OCwyNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjCiAgICAgd2hp
bGUgKCFjbGllbnQtPmlzRG9uZSgpKQogICAgICAgICBDRlJ1bkxvb3BSdW5Jbk1vZGUoc3luY2hy
b25vdXNMb2FkUnVuTG9vcE1vZGUoKSwgVUlOVF9NQVgsIHRydWUpOwogCisgICAgZXJyb3IgPSBj
bGllbnQtPmVycm9yKCk7CisKICAgICBDRlVSTENvbm5lY3Rpb25DYW5jZWwoaGFuZGxlLT5jb25u
ZWN0aW9uKCkpOwotICAgIAorCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpICYmIHJlc3BvbnNlLm1p
bWVUeXBlKCkuaXNOdWxsKCkpCiAgICAgICAgIHNldERlZmF1bHRNSU1FVHlwZShyZXNwb25zZS5j
ZlVSTFJlc3BvbnNlKCkpOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGNsaWVu
dC0+ZGF0YSgpOwogICAgIAotICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICBpZiAoZXJy
b3IuaXNOdWxsKCkpCisgICAgICAgIHJlc3BvbnNlID0gY2xpZW50LT5yZXNwb25zZSgpOworICAg
IGVsc2UgewogICAgICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVxdWVzdC51cmwo
KSwgU3RyaW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7Ci0KLSAgICAgICAgQ0ZFcnJvclJl
ZiBjZkVycm9yID0gZXJyb3I7Ci0gICAgICAgIENGU3RyaW5nUmVmIGRvbWFpbiA9IENGRXJyb3JH
ZXREb21haW4oY2ZFcnJvcik7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gdGhlIGFjdHVhbCBy
ZXNwb25zZSBmb3IgZmFpbGVkIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICBpZiAoZG9tYWluID09
IGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrKQotICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUoQ0ZFcnJvckdldENvZGUoY2ZFcnJvcikpOworICAgICAgICAvLyBGSVhNRTogUmVz
b3VyY2VIYW5kbGVNYWMgYWxzbyBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGVycm9ycyBieSBzZXR0
aW5nIGNvZGUgdG8gNDAxLiBDRk5ldCB2ZXJzaW9uIHNob3VsZCBwcm9iYWJseSBkbyB0aGUgc2Ft
ZS4KKyAgICAgICAgaWYgKGVycm9yLmRvbWFpbigpID09IFN0cmluZyhrQ0ZFcnJvckRvbWFpbkNG
TmV0d29yaykpCisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShlcnJvci5l
cnJvckNvZGUoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBT
dGF0dXNDb2RlKDQwNCk7CiAgICAgfQogCi0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAgQVNTRVJU
KHZlY3Rvci5pc0VtcHR5KCkpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKENGRGF0YUdldEJ5dGVQ
dHIoZGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKSk7Ci0gICAgfQorICAg
IGRhdGEuc3dhcChjbGllbnQtPm11dGFibGVEYXRhKCkpOwogfQogCiB2b2lkIFJlc291cmNlSGFu
ZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3Qp
CkBAIC04MTEsNjIgKzc2OSw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnVuc2NoZWR1bGUoU2No
ZWR1bGUKIH0KICNlbmRpZgogCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6
d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRp
cmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgIGlmICgh
cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCks
IHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9lcnJvci5jZkVycm9yKCkpOwot
ICAgICAgICBSZXRhaW5QdHI8Q0ZFcnJvclJlZj4gY2ZFcnJvcihBZG9wdENGLCBDRkVycm9yQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZVUkxF
cnJvckJhZFNlcnZlclJlc3BvbnNlLCAwKSk7Ci0gICAgICAgIG1fZXJyb3IgPSBjZkVycm9yLmdl
dCgpOwotICAgICAgICBtX2lzRG9uZSA9IHRydWU7Ci0gICAgICAgIENGVVJMUmVxdWVzdFJlZiBu
dWxsUmVxdWVzdCA9IDA7Ci0gICAgICAgIHJlcXVlc3QgPSBudWxsUmVxdWVzdDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLX0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Ci19Ci0KLXZvaWQgV2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3Ro
Ki8pCi17Ci0gICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIG1fZGF0YS5hZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIENGRGF0YUFwcGVuZEJ5
dGVzKG1fZGF0YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKLXsKLSAgICBtX2lzRG9uZSA9IHRy
dWU7Ci19Ci0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGYWlsKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgbV9lcnJv
ciA9IGVycm9yOwotICAgIG1faXNEb25lID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlKQotewotICAgIC8vIEZJWE1FOiBUaGUgdXNlciBzaG91bGQgYmUgYXNrZWQgZm9yIGNyZWRl
bnRpYWxzLCBhcyBpbiBhc3luYyBjYXNlLgotICAgIENGVVJMQ29ubmVjdGlvblVzZUNyZWRlbnRp
YWwoaGFuZGxlLT5jb25uZWN0aW9uKCksIDAsIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VS
ZWYoKSk7Ci19Ci0KLWJvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSopCi17Ci0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQgd2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0
b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgotICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3Jl
ZGVudGlhbHM7Ci19Ci0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQot
Ym9vbCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2Um
KQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50LiA8aHR0
cDovL3dlYmtpdC5vcmcvYi82NTE5Nj4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiAj
ZW5kaWYgLy8gVVNFKENGTkVUV09SSykKIAogI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9D
QUxMQkFDSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAxNDY2NDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBAQAogI2ltcG9ydCAiU2V0dGluZ3MuaCIKICNpbXBv
cnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbXBv
cnQgIldlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAj
aW1wb3J0ICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKICNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIu
aD4KQEAgLTU2LDEzICs1OCw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1AaW50
ZXJmYWNlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxD
b25uZWN0aW9uRGVsZWdhdGU+IHsKLSAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci19Ci0t
IChpZClpbml0V2l0aEhhbmRsZTooUmVzb3VyY2VIYW5kbGUqKWhhbmRsZTsKLS0gKHZvaWQpZGV0
YWNoSGFuZGxlOwotQGVuZAotCiAvLyBXZWJDb3JlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94
eSBleGlzdHMgc28gdGhhdCB3ZSBjYW4gY2FzdCBtX3Byb3h5IHRvIGl0IGluIG9yZGVyCiAvLyB0
byBkaXNhbWJpZ3VhdGUgdGhlIGFyZ3VtZW50IHR5cGUgaW4gdGhlIC1zZXREZWxlZ2F0ZTogY2Fs
bC4gIFRoaXMgYXZvaWRzIGEgc3B1cmlvdXMKIC8vIHdhcm5pbmcgdGhhdCB0aGUgY29tcGlsZXIg
d291bGQgb3RoZXJ3aXNlIGVtaXQuCkBAIC03NCw1MyArNjksNiBAQCBAaW50ZXJmYWNlIE5TVVJM
Q29ubmVjdGlvbiAoRGV0YWlscykKIC0oaWQpX2luaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdCBkZWxlZ2F0ZTooaWQpZGVsZWdhdGUgdXNlc0NhY2hlOihCT09MKXVzZXNDYWNo
ZUZsYWcgbWF4Q29udGVudExlbmd0aDoobG9uZyBsb25nKW1heENvbnRlbnRMZW5ndGggc3RhcnRJ
bW1lZGlhdGVseTooQk9PTClzdGFydEltbWVkaWF0ZWx5IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOihO
U0RpY3Rpb25hcnkgKiljb25uZWN0aW9uUHJvcGVydGllczsKIEBlbmQKIAotQGludGVyZmFjZSBO
U1VSTFJlcXVlc3QgKERldGFpbHMpCi0tIChpZClfcHJvcGVydHlGb3JLZXk6KE5TU3RyaW5nICop
a2V5OwotQGVuZAotCi1jbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQgOiBwdWJs
aWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIH5XZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKTsKLQot
ICAgIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFsbG93KSB7IG1fYWxsb3dT
dG9yZWRDcmVkZW50aWFscyA9IGFsbG93OyB9Ci0gICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2Uo
KSB7IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0gICAgTlNNdXRhYmxlRGF0YSAqZGF0YSgpIHsgcmV0
dXJuIG1fZGF0YTsgfQotICAgIE5TRXJyb3IgKmVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQot
ICAgIGJvb2wgaXNEb25lKCkgeyByZXR1cm4gbV9pc0RvbmU7IH0KLQotcHJpdmF0ZToKLSAgICBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKQotICAgICAgICA6IG1fYWxsb3dTdG9yZWRD
cmVkZW50aWFscyhmYWxzZSkKLSAgICAgICAgLCBtX3Jlc3BvbnNlKDApCi0gICAgICAgICwgbV9k
YXRhKDApCi0gICAgICAgICwgbV9lcnJvcigwKQotICAgICAgICAsIG1faXNEb25lKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
SGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRp
cmVjdFJlc3BvbnNlKi8pOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShSZXNvdXJjZUhhbmRsZSopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8qZW5jb2Rl
ZERhdGFMZW5ndGgqLyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3Vy
Y2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi0gICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0
aW9uU3BhY2UmKTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7
Ci0gICAgTlNVUkxSZXNwb25zZSAqbV9yZXNwb25zZTsKLSAgICBOU011dGFibGVEYXRhICptX2Rh
dGE7Ci0gICAgTlNFcnJvciAqbV9lcnJvcjsKLSAgICBib29sIG1faXNEb25lOwotfTsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhl
YWRlcihSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpCkBAIC0zNTUsMTMgKzMwMyw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmMKIHsKICAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6JUAgYWxsb3dTdG9yZWRDcmVkZW50aWFsczoldSIsIHJl
cXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpLCBzdG9yZWRDcmVkZW50aWFs
cyk7CiAKLSAgICBOU0Vycm9yICpuc0Vycm9yID0gbmlsOwotICAgIE5TVVJMUmVzcG9uc2UgKm5z
VVJMUmVzcG9uc2UgPSBuaWw7Ci0gICAgTlNEYXRhICpyZXN1bHQgPSBuaWw7Ci0KICAgICBBU1NF
UlQoIXJlcXVlc3QuaXNFbXB0eSgpKTsKICAgICAKLSAgICBPd25QdHI8V2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50PiBjbGllbnQgPSBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OmNyZWF0ZSgpOworICAgIE93blB0cjxTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY2xpZW50ID0g
U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNyZWF0ZSgpOwogICAgIGNsaWVudC0+c2V0QWxsb3dT
dG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzKTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3
IFJlc291cmNlSGFuZGxlKGNvbnRleHQsIHJlcXVlc3QsIGNsaWVudC5nZXQoKSwgZmFsc2UgLypk
ZWZlcnNMb2FkaW5nKi8sIHRydWUgLypzaG91bGRDb250ZW50U25pZmYqLykpOwpAQCAtMzg0LDM0
ICszMjgsMjggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyYwogICAg
IHdoaWxlICghY2xpZW50LT5pc0RvbmUoKSkKICAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1
bkxvb3BdIHJ1bk1vZGU6KE5TU3RyaW5nICopc3luY2hyb25vdXNMb2FkUnVuTG9vcE1vZGUoKSBi
ZWZvcmVEYXRlOltOU0RhdGUgZGlzdGFudEZ1dHVyZV1dOwogCi0gICAgcmVzdWx0ID0gY2xpZW50
LT5kYXRhKCk7Ci0gICAgbnNVUkxSZXNwb25zZSA9IGNsaWVudC0+cmVzcG9uc2UoKTsKLSAgICBu
c0Vycm9yID0gY2xpZW50LT5lcnJvcigpOworICAgIGVycm9yID0gY2xpZW50LT5lcnJvcigpOwog
ICAgIAogICAgIFtoYW5kbGUtPmNvbm5lY3Rpb24oKSBjYW5jZWxdOwogCi0KLSAgICBpZiAoIW5z
RXJyb3IpCi0gICAgICAgIHJlc3BvbnNlID0gbnNVUkxSZXNwb25zZTsKKyAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCisgICAgICAgIHJlc3BvbnNlID0gY2xpZW50LT5yZXNwb25zZSgpOwogICAgIGVs
c2UgewogICAgICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVxdWVzdC51cmwoKSwg
U3RyaW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7Ci0gICAgICAgIGlmIChbbnNFcnJvciBk
b21haW5dID09IE5TVVJMRXJyb3JEb21haW4pCi0gICAgICAgICAgICBzd2l0Y2ggKFtuc0Vycm9y
IGNvZGVdKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBOU1VSTEVycm9yVXNlckNhbmNlbGxlZEF1
dGhlbnRpY2F0aW9uOgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHJl
YWxseSByZXR1cm4gdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlLCBidXQgc2VuZFN5bmNocm9ub3Vz
UmVxdWVzdCBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBvbmUuCi0gICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDQwMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKFtuc0Vycm9yIGNvZGVdKTsKKyAgICAgICAgaWYgKGVycm9y
LmRvbWFpbigpID09IFN0cmluZyhOU1VSTEVycm9yRG9tYWluKSkKKyAgICAgICAgICAgIHN3aXRj
aCAoZXJyb3IuZXJyb3JDb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTlNVUkxFcnJvclVzZXJD
YW5jZWxsZWRBdXRoZW50aWNhdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIHJlYWxseSByZXR1cm4gdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlLCBidXQgc2VuZFN5bmNo
cm9ub3VzUmVxdWVzdCBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBvbmUuCisgICAgICAgICAgICAg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoNDAxKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c0NvZGUoZXJyb3IuZXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSg0MDQpOwogICAgIH0K
LSAgICAKLSAgICBkYXRhLnJlc2l6ZShbcmVzdWx0IGxlbmd0aF0pOwotICAgIG1lbWNweShkYXRh
LmRhdGEoKSwgW3Jlc3VsdCBieXRlc10sIFtyZXN1bHQgbGVuZ3RoXSk7Ci0gICAgCi0gICAgZXJy
b3IgPSBuc0Vycm9yOworCisgICAgZGF0YS5zd2FwKGNsaWVudC0+bXV0YWJsZURhdGEoKSk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC02
MTcsMjk1ICs1NTUsNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlv
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUKLQotLSAoaWQpaW5pdFdpdGhIYW5kbGU6KFJlc291cmNlSGFu
ZGxlKiloYW5kbGUKLXsKLSAgICBzZWxmID0gW3NlbGYgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRldGFjaEhhbmRsZQotewotICAgIG1faGFuZGxlID0gMDsKLX0K
LQotLSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKW5ld1JlcXVlc3QgcmVkaXJlY3RS
ZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UKLXsKLSAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJv
YmxlbS81MzgwNjk3Pi4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYmVoYXZpb3IgY2hhbmdl
IGluIENGTmV0d29yayB3aGVyZSB3aWxsU2VuZFJlcXVlc3QgZ2V0cyBjYWxsZWQgbW9yZSBvZnRl
bi4KLSAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgIHJldHVybiBuZXdSZXF1ZXN0
OwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChbcmVkaXJlY3RSZXNwb25zZSBpc0tpbmRP
ZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKQotICAgICAgICBMT0coTmV0d29yaywg
IkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTZW5kUmVxdWVzdDolQCByZWRp
cmVjdFJlc3BvbnNlOiVkLCBMb2NhdGlvbjo8JUA+IiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIFtu
ZXdSZXF1ZXN0IGRlc2NyaXB0aW9uXSwgc3RhdGljX2Nhc3Q8aW50PihbKGlkKXJlZGlyZWN0UmVz
cG9uc2Ugc3RhdHVzQ29kZV0pLCBbWyhpZClyZWRpcmVjdFJlc3BvbnNlIGFsbEhlYWRlckZpZWxk
c10gb2JqZWN0Rm9yS2V5OkAiTG9jYXRpb24iXSk7Ci0gICAgZWxzZQotICAgICAgICBMT0coTmV0
d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTZW5kUmVxdWVzdDol
QCByZWRpcmVjdFJlc3BvbnNlOm5vbi1IVFRQIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIFtuZXdS
ZXF1ZXN0IGRlc2NyaXB0aW9uXSk7IAotI2VuZGlmCi0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCA9IG5ld1JlcXVlc3Q7Ci0KLSAgICBtX2hhbmRsZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotCi0gICAgcmV0dXJuIHJlcXVlc3QubnNVUkxSZXF1ZXN0
KFVwZGF0ZUhUVFBCb2R5KTsKLX0KLQotLSAoQk9PTCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2U6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KLXsKLSAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0
ZSBjb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6JXAiLCBtX2hhbmRsZSwgY29u
bmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAg
ICByZXR1cm4gbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Ci19Ci0KLS0g
KHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKilj
aGFsbGVuZ2UKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0
d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBjaGFsbGVuZ2UpOwot
Ci0gICAgaWYgKCFtX2hhbmRsZSkgewotICAgICAgICBbW2NoYWxsZW5nZSBzZW5kZXJdIGNhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxsZW5nZV07Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb3Jl
KGNoYWxsZW5nZSkpOwotfQotCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAq
KWNvbm5lY3Rpb24gZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKLXsKLSAgICAvLyBGSVhNRTogV2UgcHJvYmFi
bHkgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYw
MTI0PikuCi0KLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29y
aywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZENhbmNlbEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGNoYWxsZW5nZSk7Ci0KLSAg
ICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYW5kbGUtPmRpZENhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Ci19Ci0KLSNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotLSAoQk9PTCljb25uZWN0aW9uOihOU1VS
TENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVs
ZWdhdGUgY29ubmVjdGlvbjolcCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
OiVAOi8vJUA6JXUgcmVhbG06JUAgbWV0aG9kOiVAICVAJUAiLCBtX2hhbmRsZSwgY29ubmVjdGlv
biwgW3Byb3RlY3Rpb25TcGFjZSBwcm90b2NvbF0sIFtwcm90ZWN0aW9uU3BhY2UgaG9zdF0sIFtw
cm90ZWN0aW9uU3BhY2UgcG9ydF0sIFtwcm90ZWN0aW9uU3BhY2UgcmVhbG1dLCBbcHJvdGVjdGlv
blNwYWNlIGF1dGhlbnRpY2F0aW9uTWV0aG9kXSwgW3Byb3RlY3Rpb25TcGFjZSBpc1Byb3h5XSA/
IEAicHJveHk6IiA6IEAiIiwgW3Byb3RlY3Rpb25TcGFjZSBpc1Byb3h5XSA/IFtwcm90ZWN0aW9u
U3BhY2UgcHJveHlUeXBlXSA6IEAiIik7Ci0KLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICBy
ZXR1cm4gTk87Ci0KLSAgICByZXR1cm4gbV9oYW5kbGUtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoY29yZShwcm90ZWN0aW9uU3BhY2UpKTsKLX0KLSNlbmRpZgotCi0tICh2
b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcgotewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKLQotICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAg
ZGlkUmVjZWl2ZVJlc3BvbnNlOiVwIChIVFRQIHN0YXR1cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUg
JyVzJykiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgciwgW3IgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihzdGF0dXNDb2RlKV0gPyBbKGlkKXIgc3RhdHVzQ29kZV0gOiAwLCBbW3IgTUlNRVR5
cGVdIFVURjhTdHJpbmddKTsKLQotICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGll
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXZvaWQgTUlNRSB0eXBlIHNuaWZmaW5n
IGlmIHRoZSByZXNwb25zZSBjb21lcyBiYWNrIGFzIDMwNCBOb3QgTW9kaWZpZWQuCi0gICAgaW50
IHN0YXR1c0NvZGUgPSBbciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YXR1c0NvZGUp
XSA/IFsoaWQpciBzdGF0dXNDb2RlXSA6IDA7Ci0gICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQot
ICAgICAgICBhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5KFtyIF9DRlVSTFJlc3BvbnNlXSk7Ci0K
LSAgICBpZiAoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSkgX3Byb3BlcnR5Rm9yS2V5OkAiRm9yY2VIVE1MTUlNRVR5cGUiXSkKLSAgICAg
ICAgW3IgX3NldE1JTUVUeXBlOkAidGV4dC9odG1sIl07Ci0KLSAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgcik7Ci19Ci0KLSNpZiBVU0UoTkVUV09S
S19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVj
dGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGFBcnJheTooTlNBcnJheSAqKWRhdGFBcnJh
eQotewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBMT0coTmV0d29yaywgIkhh
bmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVEYXRhQXJyYXk6JXAgYXJy
YXlTaXplOiVkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGFBcnJheSwgW2RhdGFBcnJheSBj
b3VudF0pOwotCi0gICAgaWYgKCFkYXRhQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9oYW5kbGUtPmhhbmRsZURhdGFBcnJheShyZWludGVycHJldF9jYXN0PENGQXJyYXlSZWY+
KGRhdGFBcnJheSkpOwotICAgIC8vIFRoZSBjYWxsIHRvIGRpZFJlY2VpdmVEYXRhIGFib3ZlIGNh
biBjYW5jZWwgYSBsb2FkLCBhbmQgaWYgc28sIHRoZSBkZWxlZ2F0ZSAoc2VsZikgY291bGQgaGF2
ZSBiZWVuIGRlYWxsb2NhdGVkIGJ5IHRoaXMgcG9pbnQuCi19Ci0jZW5kaWYKLQotLSAodm9pZClj
b25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihO
U0RhdGEgKilkYXRhIGxlbmd0aFJlY2VpdmVkOihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQKLXsK
LSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aFJl
Y2VpdmVkKTsKLQotICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rp
b246JXAgZGlkUmVjZWl2ZURhdGE6JXAgbGVuZ3RoUmVjZWl2ZWQ6JWxsZCIsIG1faGFuZGxlLCBj
b25uZWN0aW9uLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Ci0KLSAgICBpZiAoIW1faGFuZGxlIHx8
ICFtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSWYg
d2UgZ2V0IG1vcmUgdGhhbiAyQiBieXRlcyBpbiBhIHNpbmdsZSBjaHVuaywgdGhpcyBjb2RlIHdv
bid0IGRvIHRoZSByaWdodCB0aGluZy4KLSAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29t
cHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3Rp
Y2UuCi0gICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZpbGUuCi0K
LSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NzkzCi0gICAgLy8gLTEgbWVhbnMgd2UgZG8gbm90IHByb3ZpZGUgYW55IGRhdGEgYWJvdXQgdHJh
bnNmZXIgc2l6ZSB0byBpbnNwZWN0b3Igc28gaXQgd291bGQgdXNlCi0gICAgLy8gQ29udGVudC1M
ZW5ndGggaGVhZGVycyBvciBjb250ZW50IHNpemUgdG8gc2hvdyB0cmFuc2ZlciBzaXplLgotICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVm
ZmVyOjp3cmFwTlNEYXRhKGRhdGEpLCAtMSk7Ci19Ci0KLS0gKHZvaWQpY29ubmVjdGlvbjooTlNV
UkxDb25uZWN0aW9uICopY29ubmVjdGlvbiB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGE6KE5TRGF0YSAq
KWRhdGEKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29y
aywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxTdG9wQnVmZmVyaW5nRGF0
YTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBkYXRhKTsKLQotICAgIGlmICghbV9oYW5kbGUg
fHwgIW1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBnZXQgYSByZXNvdXJjZSB3aXRoIG1vcmUgdGhhbiAyQiBieXRlcywgdGhpcyBjb2RlIHdv
bid0IGRvIHRoZSByaWdodCB0aGluZy4KLSAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29t
cHV0ZXJzIGFuZCBuZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3Rp
Y2UuCi0gICAgLy8gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBhIGdpYW50IGxvY2FsIGZpbGUuCi0g
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT53aWxsU3RvcEJ1ZmZlcmluZ0RhdGEobV9oYW5kbGUsIChj
b25zdCBjaGFyKilbZGF0YSBieXRlc10sIHN0YXRpY19jYXN0PGludD4oW2RhdGEgbGVuZ3RoXSkp
OwotfQotCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24g
ZGlkU2VuZEJvZHlEYXRhOihOU0ludGVnZXIpYnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNXcml0dGVu
OihOU0ludGVnZXIpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZToo
TlNJbnRlZ2VyKXRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUKLXsKLSAgICBVTlVTRURfUEFSQU0o
Y29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVzV3JpdHRlbik7Ci0KLSAgICBMT0co
TmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFNlbmRCb2R5RGF0
YTolZCB0b3RhbEJ5dGVzV3JpdHRlbjolZCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlOiVkIiwg
bV9oYW5kbGUsIGNvbm5lY3Rpb24sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc1dyaXR0ZW4sIHRv
dGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUpOwotCi0gICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5k
bGUtPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5k
aWRTZW5kRGF0YShtX2hhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3Rl
ZFRvV3JpdGUpOwotfQotCi0tICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VS
TENvbm5lY3Rpb24gKiljb25uZWN0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24p
OwotCi0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlvbkRpZEZp
bmlzaExvYWRpbmc6JXAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1faGFu
ZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSwgMCk7Ci19Ci0KLS0gKHZv
aWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRGYWlsV2l0aEVy
cm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0K
LSAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZEZh
aWxXaXRoRXJyb3I6JUAiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgZXJyb3IpOwotCi0gICAgaWYg
KCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIGVycm9yKTsKLX0KLQotCi0t
IChOU0NhY2hlZFVSTFJlc3BvbnNlICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29u
bmVjdGlvbiB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKWNhY2hlZFJl
c3BvbnNlCi17Ci0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVsZWdhdGUgY29ubmVjdGlv
bjolcCB3aWxsQ2FjaGVSZXNwb25zZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCBjYWNoZWRS
ZXNwb25zZSk7Ci0KLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIW1f
aGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNjMwMDk5MD4gQ2FjaGluZyBkb2Vz
IG5vdCByZXNwZWN0IFZhcnkgSFRUUCBoZWFkZXIuCi0gICAgLy8gRklYTUU6IFdlYkNvcmUgY2Fj
aGUgaGFzIGlzc3VlcyB3aXRoIFZhcnksIHRvbyAoYnVnIDU4Nzk3LCBidWcgNzE1MDkpLgotICAg
IGlmIChbW2NhY2hlZFJlc3BvbnNlIHJlc3BvbnNlXSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxS
ZXNwb25zZSBjbGFzc11dCi0gICAgICAgICYmIFtbKE5TSFRUUFVSTFJlc3BvbnNlICopW2NhY2hl
ZFJlc3BvbnNlIHJlc3BvbnNlXSBhbGxIZWFkZXJGaWVsZHNdIG9iamVjdEZvcktleTpAIlZhcnki
XSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKm5ld1Jl
c3BvbnNlID0gbV9oYW5kbGUtPmNsaWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZShtX2hhbmRsZSwg
Y2FjaGVkUmVzcG9uc2UpOwotICAgIGlmIChuZXdSZXNwb25zZSAhPSBjYWNoZWRSZXNwb25zZSkK
LSAgICAgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOwotICAgIAotICAgIHJldHVybiBuZXdSZXNwb25z
ZTsKLX0KLQotQGVuZAotCi0KLVdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6fldlYkNv
cmVTeW5jaHJvbm91c0xvYWRlckNsaWVudCgpCi17Ci0gICAgW21fcmVzcG9uc2UgcmVsZWFzZV07
Ci0gICAgW21fZGF0YSByZWxlYXNlXTsKLSAgICBbbV9lcnJvciByZWxlYXNlXTsKLX0KLQotdm9p
ZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKQotewotICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5IGV2ZW4gZm9y
IGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KLSAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVF
cXVhbChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LnVybCgpKSkgewotICAg
ICAgICBBU1NFUlQoIW1fZXJyb3IpOwotICAgICAgICBtX2Vycm9yID0gW1tOU0Vycm9yIGFsbG9j
XSBpbml0V2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluIGNvZGU6TlNVUkxFcnJvckJhZFNlcnZl
clJlc3BvbnNlIHVzZXJJbmZvOm5pbF07Ci0gICAgICAgIG1faXNEb25lID0gdHJ1ZTsKLSAgICAg
ICAgcmVxdWVzdCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNv
dXJjZUhhbmRsZSopCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJD
bGllbnQgd2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlk
ZGVuLgotICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci19Ci0KLSNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotYm9vbCBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKQotewotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50LiA8aHR0cDovL3dlYmtpdC5vcmcvYi82NTE5Nj4K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlckNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICAv
LyBGSVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBjcmVkZW50aWFscywgYXMgaW4g
YXN5bmMgY2FzZS4KLSAgICBbY2hhbGxlbmdlLnNlbmRlcigpIGNvbnRpbnVlV2l0aG91dENyZWRl
bnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQotewotICAgIFttX3Jlc3BvbnNlIHJlbGVhc2VdOwotICAgIG1fcmVz
cG9uc2UgPSBbcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpIGNvcHldOwotfQotCi12b2lkIFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCov
KQotewotICAgIGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBbW05TTXV0YWJsZURhdGEg
YWxsb2NdIGluaXRdOwotICAgIFttX2RhdGEgYXBwZW5kQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3Ro
XTsKLX0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZpbmlzaExv
YWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCi17Ci0gICAgbV9pc0RvbmUgPSB0cnVlOwot
fQotCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbChSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIEFTU0VSVCghbV9l
cnJvcik7Ci0KLSAgICBtX2Vycm9yID0gW2Vycm9yIGNvcHldOwotICAgIG1faXNEb25lID0gdHJ1
ZTsKLX0KLQotCiAjZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xv
YWRlckNsaWVudC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCisKKyNpZiAhVVNFKENGTkVUV09SSykKKworI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZSkKK3sKKyAgICAvLyBGSVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBj
cmVkZW50aWFscywgYXMgaW4gYXN5bmMgY2FzZS4KKyAgICBbY2hhbGxlbmdlLnNlbmRlcigpIGNv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVu
Z2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKK30KKworI2lmICFVU0UoQ0ZORVRX
T1JLKQorUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRS
ZXNwb25zZUVycm9yKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3IgPSBhZG9wdE5T
KFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5T
VVJMRXJyb3JCYWRTZXJ2ZXJSZXNwb25zZSB1c2VySW5mbzpuaWxdKTsKKyAgICByZXR1cm4gZXJy
b3IuZ2V0KCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJlc291cmNl
SGFuZGxlQXNEZWxlZ2F0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlX2gKKyNkZWZpbmUg
V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZV9oCisKKyNpZiAhVVNFKENGTkVUV09SSykK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOworfQorCitA
aW50ZXJmYWNlIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgOiBOU09iamVjdCA8TlNV
UkxDb25uZWN0aW9uRGVsZWdhdGU+IHsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogbV9o
YW5kbGU7Cit9CistIChpZClpbml0V2l0aEhhbmRsZTooV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
KWhhbmRsZTsKKy0gKHZvaWQpZGV0YWNoSGFuZGxlOworQGVuZAorCisjZW5kaWYgLy8gIVVTRShD
Rk5FVFdPUkspCisjZW5kaWYgLy8gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3Vy
Y2VIYW5kbGVBc0RlbGVnYXRlLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5oIgorCisjaWYgIVVTRShDRk5FVFdPUkspCisKKyNpbXBvcnQgIkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmgiCisjaW1wb3J0ICJBdXRoZW50aWNhdGlvbk1hYy5oIgorI2ltcG9ydCAiTG9n
Z2luZy5oIgorI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbXBvcnQgIlJlc291cmNlSGFu
ZGxlQ2xpZW50LmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbXBvcnQgIlJlc291
cmNlUmVzcG9uc2UuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2ltcG9ydCAiV2ViQ29y
ZVVSTFJlc3BvbnNlLmgiCisKK0BpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChEZXRhaWxzKQorLSAo
aWQpX3Byb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKWtleTsKK0BlbmQKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0Rl
bGVnYXRlCisKKy0gKGlkKWluaXRXaXRoSGFuZGxlOihSZXNvdXJjZUhhbmRsZSopaGFuZGxlCit7
CisgICAgc2VsZiA9IFtzZWxmIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZXRhY2hIYW5kbGUKK3sKKyAgICBtX2hhbmRsZSA9IDA7Cit9CisKKy0gKE5TVVJMUmVx
dWVzdCAqKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gd2lsbFNlbmRS
ZXF1ZXN0OihOU1VSTFJlcXVlc3QgKiluZXdSZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJM
UmVzcG9uc2UgKilyZWRpcmVjdFJlc3BvbnNlCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rp
b24pOworCisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUzODA2OTc+LiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBm
b3IgYSBiZWhhdmlvciBjaGFuZ2UgaW4gQ0ZOZXR3b3JrIHdoZXJlIHdpbGxTZW5kUmVxdWVzdCBn
ZXRzIGNhbGxlZCBtb3JlIG9mdGVuLgorICAgIGlmICghcmVkaXJlY3RSZXNwb25zZSkKKyAgICAg
ICAgcmV0dXJuIG5ld1JlcXVlc3Q7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKFtyZWRp
cmVjdFJlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCisg
ICAgICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgd2ls
bFNlbmRSZXF1ZXN0OiVAIHJlZGlyZWN0UmVzcG9uc2U6JWQsIExvY2F0aW9uOjwlQD4iLCBtX2hh
bmRsZSwgY29ubmVjdGlvbiwgW25ld1JlcXVlc3QgZGVzY3JpcHRpb25dLCBzdGF0aWNfY2FzdDxp
bnQ+KFsoaWQpcmVkaXJlY3RSZXNwb25zZSBzdGF0dXNDb2RlXSksIFtbKGlkKXJlZGlyZWN0UmVz
cG9uc2UgYWxsSGVhZGVyRmllbGRzXSBvYmplY3RGb3JLZXk6QCJMb2NhdGlvbiJdKTsKKyAgICBl
bHNlCisgICAgICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246
JXAgd2lsbFNlbmRSZXF1ZXN0OiVAIHJlZGlyZWN0UmVzcG9uc2U6bm9uLUhUVFAiLCBtX2hhbmRs
ZSwgY29ubmVjdGlvbiwgW25ld1JlcXVlc3QgZGVzY3JpcHRpb25dKTsgCisjZW5kaWYKKworICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gbmV3UmVxdWVzdDsKKworICAgIG1faGFuZGxlLT53
aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisKKyAgICByZXR1cm4g
cmVxdWVzdC5uc1VSTFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpOworfQorCistIChCT09MKWNvbm5l
Y3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbgoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKworICAgIExPRyhOZXR3b3Jr
LCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZTolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9uKTsKKworICAgIGlmICghbV9oYW5kbGUpCisgICAg
ICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBtX2hhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKilj
b25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246
JXAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiVwIiwgbV9oYW5kbGUsIGNvbm5l
Y3Rpb24sIGNoYWxsZW5nZSk7CisKKyAgICBpZiAoIW1faGFuZGxlKSB7CisgICAgICAgIFtbY2hh
bGxlbmdlIHNlbmRlcl0gY2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlv
bjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQoreworICAg
IC8vIEZJWE1FOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIChzZWUg
PHJkYXI6Ly9wcm9ibGVtLzg5NjAxMjQ+KS4KKworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAg
ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6JXAiLCBtX2hhbmRsZSwgY29ubmVjdGlv
biwgY2hhbGxlbmdlKTsKKworICAgIGlmICghbV9oYW5kbGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2hhbmRsZS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29yZShjaGFsbGVu
Z2UpKTsKK30KKworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCistIChC
T09MKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gY2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0
aW9uU3BhY2UKK3sKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisKKyAgICBMT0coTmV0
d29yaywgIkhhbmRsZSAlcCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2U6JUA6Ly8lQDoldSByZWFsbTolQCBtZXRob2Q6JUAgJUAlQCIs
IG1faGFuZGxlLCBjb25uZWN0aW9uLCBbcHJvdGVjdGlvblNwYWNlIHByb3RvY29sXSwgW3Byb3Rl
Y3Rpb25TcGFjZSBob3N0XSwgW3Byb3RlY3Rpb25TcGFjZSBwb3J0XSwgW3Byb3RlY3Rpb25TcGFj
ZSByZWFsbV0sIFtwcm90ZWN0aW9uU3BhY2UgYXV0aGVudGljYXRpb25NZXRob2RdLCBbcHJvdGVj
dGlvblNwYWNlIGlzUHJveHldID8gQCJwcm94eToiIDogQCIiLCBbcHJvdGVjdGlvblNwYWNlIGlz
UHJveHldID8gW3Byb3RlY3Rpb25TcGFjZSBwcm94eVR5cGVdIDogQCIiKTsKKworICAgIGlmICgh
bV9oYW5kbGUpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBtX2hhbmRsZS0+Y2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlKHByb3RlY3Rpb25TcGFjZSkp
OworfQorI2VuZGlmCisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29u
bmVjdGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCit7CisgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOworCisgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVs
ZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlUmVzcG9uc2U6JXAgKEhUVFAgc3RhdHVzICVk
LCByZXBvcnRlZCBNSU1FVHlwZSAnJXMnKSIsIG1faGFuZGxlLCBjb25uZWN0aW9uLCByLCBbciBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YXR1c0NvZGUpXSA/IFsoaWQpciBzdGF0dXND
b2RlXSA6IDAsIFtbciBNSU1FVHlwZV0gVVRGOFN0cmluZ10pOworCisgICAgaWYgKCFtX2hhbmRs
ZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdm9p
ZCBNSU1FIHR5cGUgc25pZmZpbmcgaWYgdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgYXMgMzA0IE5v
dCBNb2RpZmllZC4KKyAgICBpbnQgc3RhdHVzQ29kZSA9IFtyIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc3RhdHVzQ29kZSldID8gWyhpZClyIHN0YXR1c0NvZGVdIDogMDsKKyAgICBpZiAo
c3RhdHVzQ29kZSAhPSAzMDQpCisgICAgICAgIGFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkoW3Ig
X0NGVVJMUmVzcG9uc2VdKTsKKworICAgIGlmIChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5z
VVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSBfcHJvcGVydHlGb3JLZXk6QCJGb3JjZUhU
TUxNSU1FVHlwZSJdKQorICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiXTsKKwor
ICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCByKTsK
K30KKworI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykKKy0gKHZvaWQpY29u
bmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0YUFycmF5
OihOU0FycmF5ICopZGF0YUFycmF5Cit7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwor
ICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVj
ZWl2ZURhdGFBcnJheTolcCBhcnJheVNpemU6JWQiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgZGF0
YUFycmF5LCBbZGF0YUFycmF5IGNvdW50XSk7CisKKyAgICBpZiAoIWRhdGFBcnJheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2hhbmRsZS0+aGFuZGxlRGF0YUFycmF5KHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZBcnJheVJlZj4oZGF0YUFycmF5KSk7CisgICAgLy8gVGhlIGNhbGwgdG8gZGlk
UmVjZWl2ZURhdGEgYWJvdmUgY2FuIGNhbmNlbCBhIGxvYWQsIGFuZCBpZiBzbywgdGhlIGRlbGVn
YXRlIChzZWxmKSBjb3VsZCBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYnkgdGhpcyBwb2ludC4KK30K
KyNlbmRpZgorCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rp
b24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0YSAqKWRhdGEgbGVuZ3RoUmVjZWl2ZWQ6KGxvbmcgbG9u
ZylsZW5ndGhSZWNlaXZlZAoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBV
TlVTRURfUEFSQU0obGVuZ3RoUmVjZWl2ZWQpOworCisgICAgTE9HKE5ldHdvcmssICJIYW5kbGUg
JXAgZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlRGF0YTolcCBsZW5ndGhSZWNlaXZl
ZDolbGxkIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKKwor
ICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQgbW9yZSB0aGFuIDJCIGJ5dGVzIGluIGEgc2luZ2xl
IGNodW5rLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgIC8vIEhvd2V2
ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdv
bid0IGhhcHBlbiBpbiBwcmFjdGljZS4KKyAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRoIGEg
Z2lhbnQgbG9jYWwgZmlsZS4KKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3OTMKKyAgICAvLyAtMSBtZWFucyB3ZSBkbyBub3QgcHJvdmlk
ZSBhbnkgZGF0YSBhYm91dCB0cmFuc2ZlciBzaXplIHRvIGluc3BlY3RvciBzbyBpdCB3b3VsZCB1
c2UKKyAgICAvLyBDb250ZW50LUxlbmd0aCBoZWFkZXJzIG9yIGNvbnRlbnQgc2l6ZSB0byBzaG93
IHRyYW5zZmVyIHNpemUuCisgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVy
KG1faGFuZGxlLCBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSksIC0xKTsKK30KKworLSAo
dm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxTdG9wQnVm
ZmVyaW5nRGF0YTooTlNEYXRhICopZGF0YQoreworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAg
d2lsbFN0b3BCdWZmZXJpbmdEYXRhOiVwIiwgbV9oYW5kbGUsIGNvbm5lY3Rpb24sIGRhdGEpOwor
CisgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQorICAgICAgICByZXR1
cm47CisgICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNlIHdpdGggbW9yZSB0aGFuIDJC
IGJ5dGVzLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgIC8vIEhvd2V2
ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdv
bid0IGhhcHBlbiBpbiBwcmFjdGljZS4KKyAgICAvLyBDb3VsZCBiZSBhbiBpc3N1ZSB3aXRoIGEg
Z2lhbnQgbG9jYWwgZmlsZS4KKyAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxTdG9wQnVmZmVy
aW5nRGF0YShtX2hhbmRsZSwgKGNvbnN0IGNoYXIqKVtkYXRhIGJ5dGVzXSwgc3RhdGljX2Nhc3Q8
aW50PihbZGF0YSBsZW5ndGhdKSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25u
ZWN0aW9uICopY29ubmVjdGlvbiBkaWRTZW5kQm9keURhdGE6KE5TSW50ZWdlcilieXRlc1dyaXR0
ZW4gdG90YWxCeXRlc1dyaXR0ZW46KE5TSW50ZWdlcil0b3RhbEJ5dGVzV3JpdHRlbiB0b3RhbEJ5
dGVzRXhwZWN0ZWRUb1dyaXRlOihOU0ludGVnZXIpdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZQor
eworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZXNX
cml0dGVuKTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRlIGNvbm5lY3Rp
b246JXAgZGlkU2VuZEJvZHlEYXRhOiVkIHRvdGFsQnl0ZXNXcml0dGVuOiVkIHRvdGFsQnl0ZXNF
eHBlY3RlZFRvV3JpdGU6JWQiLCBtX2hhbmRsZSwgY29ubmVjdGlvbiwgYnl0ZXNXcml0dGVuLCB0
b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7CisKKyAgICBpZiAo
IW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFuZGxlLCB0b3RhbEJ5dGVzV3JpdHRl
biwgdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSk7Cit9CisKKy0gKHZvaWQpY29ubmVjdGlvbkRp
ZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KK3sKKyAgICBVTlVT
RURfUEFSQU0oY29ubmVjdGlvbik7CisKKyAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBkZWxl
Z2F0ZSBjb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzolcCIsIG1faGFuZGxlLCBjb25uZWN0aW9u
KTsKKworICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFu
ZGxlLCAwKTsKK30KKworLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25u
ZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIFVOVVNFRF9Q
QVJBTShjb25uZWN0aW9uKTsKKworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIGRlbGVnYXRl
IGNvbm5lY3Rpb246JXAgZGlkRmFpbFdpdGhFcnJvcjolQCIsIG1faGFuZGxlLCBjb25uZWN0aW9u
LCBlcnJvcik7CisKKyAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRs
ZSwgZXJyb3IpOworfQorCisKKy0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKiljb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVS
TFJlc3BvbnNlICopY2FjaGVkUmVzcG9uc2UKK3sKKyAgICBMT0coTmV0d29yaywgIkhhbmRsZSAl
cCBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIHdpbGxDYWNoZVJlc3BvbnNlOiVwIiwgbV9oYW5kbGUs
IGNvbm5lY3Rpb24sIGNhY2hlZFJlc3BvbnNlKTsKKworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTsKKworICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS82
MzAwOTkwPiBDYWNoaW5nIGRvZXMgbm90IHJlc3BlY3QgVmFyeSBIVFRQIGhlYWRlci4KKyAgICAv
LyBGSVhNRTogV2ViQ29yZSBjYWNoZSBoYXMgaXNzdWVzIHdpdGggVmFyeSwgdG9vIChidWcgNTg3
OTcsIGJ1ZyA3MTUwOSkuCisgICAgaWYgKFtbY2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIGlzS2lu
ZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0KKyAgICAgICAgJiYgW1soTlNIVFRQ
VVJMUmVzcG9uc2UgKilbY2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIGFsbEhlYWRlckZpZWxkc10g
b2JqZWN0Rm9yS2V5OkAiVmFyeSJdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNDYWNo
ZWRVUkxSZXNwb25zZSAqbmV3UmVzcG9uc2UgPSBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxDYWNo
ZVJlc3BvbnNlKG1faGFuZGxlLCBjYWNoZWRSZXNwb25zZSk7CisgICAgaWYgKG5ld1Jlc3BvbnNl
ICE9IGNhY2hlZFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gbmV3UmVzcG9uc2U7CisgICAgCisg
ICAgcmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCitAZW5kCisKKyNlbmRpZiAvLyAhVVNFKENGTkVU
V09SSykKKwo=
</data>
<flag name="review"
          id="216421"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>