<?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>37671</bug_id>
          
          <creation_ts>2010-04-15 13:45:13 -0700</creation_ts>
          <short_desc>Add WebHistoryClient to WebKit2</short_desc>
          <delta_ts>2010-04-22 14:19:34 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213015</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-15 13:45:13 -0700</bug_when>
    <thetext>Add WebHistoryClient to WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213020</commentid>
    <comment_count>1</comment_count>
      <attachid>53471</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-15 13:52:00 -0700</bug_when>
    <thetext>Created attachment 53471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213021</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 13:55:47 -0700</bug_when>
    <thetext>Attachment 53471 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit2/UIProcess/API/C/WKNavigationData.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/WebHistoryClient.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit2/UIProcess/API/C/WKPage.cpp:127:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit2/UIProcess/WebHistoryClient.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:49:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/UIProcess/WebNavigationData.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213035</commentid>
    <comment_count>3</comment_count>
      <attachid>53471</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-15 14:08:31 -0700</bug_when>
    <thetext>Comment on attachment 53471
Patch


&gt; +        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h:
&gt; +        (WebPageProxyMessage::):
&gt; +        * Shared/WebNavigationDataStore.h: Added.
&gt; +        (WebKit::WebNavigationDataStore::encode):
&gt; +        (WebKit::WebNavigationDataStore::decode):
&gt; +        * UIProcess/API/C/WKAPICast.h:
&gt; +        (toWK):
&gt; +        (toRef):
&gt; +        * UIProcess/API/C/WKBase.h:
&gt; +        * UIProcess/API/C/WKNavigationData.cpp: Added.
&gt; +        (WKNavigationDataGetTitle):
&gt; +        (WKNavigationDataGetURL):
&gt; +        (WKNavigationDataRetain):
&gt; +        (WKNavigationDataRelease):
&gt; +        * UIProcess/API/C/WKNavigationData.h: Added.
&gt; +        * UIProcess/API/C/WKPage.cpp:
&gt; +        (WKPageSetPageHistoryClient):
&gt; +        * UIProcess/API/C/WKPage.h:
&gt; +        * UIProcess/API/C/WebKit2.h:
&gt; +        * UIProcess/WebHistoryClient.cpp: Copied from UIProcess/WebUIClient.cpp.
&gt; +        (WebKit::WebHistoryClient::WebHistoryClient):
&gt; +        (WebKit::WebHistoryClient::initialize):
&gt; +        (WebKit::WebHistoryClient::didNavigateWithNavigationData):
&gt; +        (WebKit::WebHistoryClient::didPerformClientRedirect):
&gt; +        (WebKit::WebHistoryClient::didPerformServerRedirect):
&gt; +        (WebKit::WebHistoryClient::didUpdateHistoryTitle):
&gt; +        * UIProcess/WebHistoryClient.h: Copied from UIProcess/WebUIClient.h.
&gt; +        * UIProcess/WebNavigationData.cpp: Added.
&gt; +        (WebKit::WebNavigationData::WebNavigationData):
&gt; +        (WebKit::WebNavigationData::~WebNavigationData):
&gt; +        * UIProcess/WebNavigationData.h: Added.
&gt; +        (WebKit::WebNavigationData::create):
&gt; +        (WebKit::WebNavigationData::title):
&gt; +        (WebKit::WebNavigationData::url):
&gt; +        * UIProcess/WebPageProxy.cpp:
&gt; +        (WebKit::WebPageProxy::initializeHistoryClient):
&gt; +        (WebKit::WebPageProxy::didReceiveMessage):
&gt; +        (WebKit::WebPageProxy::didNavigateWithNavigationData):
&gt; +        (WebKit::WebPageProxy::didPerformClientRedirect):
&gt; +        (WebKit::WebPageProxy::didPerformServerRedirect):
&gt; +        (WebKit::WebPageProxy::didUpdateHistoryTitle):
&gt; +        * UIProcess/WebPageProxy.h:
&gt; +        * WebKit2.xcodeproj/project.pbxproj:
&gt; +        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
&gt; +        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
&gt; +        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
&gt; +        (WebKit::WebFrameLoaderClient::setTitle):
&gt; +        * win/WebKit2.vcproj:
&gt; +

You can remove all the functions here - they don&apos;t really add anything.

&gt; +
&gt; +    static bool decode(CoreIPC::ArgumentDecoder&amp; decoder, WebNavigationDataStore&amp; s)
&gt; +    {

Please use a longer name here than just &apos;s&apos;.

&gt; +        if (!decoder.decode(s.url))
&gt; +            return false;
&gt; +        if (!decoder.decode(s.title))
&gt; +            return false;
&gt; +        return true;
&gt; +    }
&gt; +
&gt; +    // FIXME: Add the remaining items we want to track for history.
&gt; +    WebCore::String url;
&gt; +    WebCore::String title;
&gt; +};
&gt; +
&gt; +} // namespace WebKit
&gt; +
&gt; +#endif // WebNavigationDataStore_h
&gt; Index: WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h
&gt; ===================================================================
&gt; --- WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h	(revision 57651)
&gt; +++ WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h	(working copy)
&gt; @@ -53,6 +53,9 @@ enum Kind {
&gt;      DidFinishProgress,
&gt;      DidFirstLayoutForFrame,
&gt;      DidFirstVisuallyNonEmptyLayoutForFrame,
&gt; +    DidNavigateWithNavigationData,

Could we merge DidNavigateWithNavigationData with DidCommitLoadForFrame somehow?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213045</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-15 14:16:15 -0700</bug_when>
    <thetext>&gt; &gt; --- WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h	(revision 57651)
&gt; &gt; +++ WebKit2/Shared/CoreIPCSupport/WebPageProxyMessageKinds.h	(working copy)
&gt; &gt; @@ -53,6 +53,9 @@ enum Kind {
&gt; &gt;      DidFinishProgress,
&gt; &gt;      DidFirstLayoutForFrame,
&gt; &gt;      DidFirstVisuallyNonEmptyLayoutForFrame,
&gt; &gt; +    DidNavigateWithNavigationData,
&gt; 
&gt; Could we merge DidNavigateWithNavigationData with DidCommitLoadForFrame
&gt; somehow?

I don&apos;t think so. Maybe Brady would know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213081</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 15:16:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57676 might have broken Tiger Intel Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/57674
http://trac.webkit.org/changeset/57675
http://trac.webkit.org/changeset/57676</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215609</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-21 18:15:28 -0700</bug_when>
    <thetext>Attachment 53471 was posted by a committer and has review+, assigning to Sam Weinig for commit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53471</attachid>
            <date>2010-04-15 13:52:00 -0700</date>
            <delta_ts>2010-04-15 14:08:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>history.diff</filename>
            <type>text/plain</type>
            <size>52287</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzY2OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMTAtMDQtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2Vi
SGlzdG9yeUNsaWVudCBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzc2NzEKKworICAgICAgICBBZGRzIHRoZSBmb2xsb3dpbmcgY2FsbGJh
Y2tzOgorICAgICAgICAgICAgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEKKyAgICAgICAg
ICAgIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdAorICAgICAgICAgICAgZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0CisgICAgICAgICAgICBkaWRVcGRhdGVIaXN0b3J5VGl0bGUKKworICAgICAgICAq
IFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaDoKKyAgICAg
ICAgKFdlYlBhZ2VQcm94eU1lc3NhZ2U6Oik6CisgICAgICAgICogU2hhcmVkL1dlYk5hdmlnYXRp
b25EYXRhU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRh
U3RvcmU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmU6
OmRlY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAg
ICAodG9XSyk6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
QmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS05hdmlnYXRpb25EYXRhLmNwcDog
QWRkZWQuCisgICAgICAgIChXS05hdmlnYXRpb25EYXRhR2V0VGl0bGUpOgorICAgICAgICAoV0tO
YXZpZ2F0aW9uRGF0YUdldFVSTCk6CisgICAgICAgIChXS05hdmlnYXRpb25EYXRhUmV0YWluKToK
KyAgICAgICAgKFdLTmF2aWdhdGlvbkRhdGFSZWxlYXNlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tOYXZpZ2F0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VIaXN0b3J5Q2xpZW50KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dlYktpdDIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHA6
IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAuCisgICAgICAgIChXZWJLaXQ6
OldlYkhpc3RvcnlDbGllbnQ6OldlYkhpc3RvcnlDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIaXN0b3J5Q2xpZW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGlzdG9y
eUNsaWVudDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJIaXN0b3J5Q2xpZW50Lmg6IENvcGllZCBmcm9tIFVJUHJv
Y2Vzcy9XZWJVSUNsaWVudC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0
YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uRGF0YTo6V2ViTmF2
aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uRGF0YTo6fldlYk5h
dmlnYXRpb25EYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTmF2aWdhdGlvbkRhdGEuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJOYXZpZ2F0aW9uRGF0YTo6dGl0bGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJOYXZpZ2F0aW9uRGF0YTo6dXJsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppbml0aWFsaXplSGlzdG9y
eUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZE5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtQ2xp
ZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1T
ZXJ2ZXJSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRU
aXRsZSk6CisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDEwLTA0LTE1ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jl
bi4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYk5hdmlnYXRpb25EYXRhU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYk5hdmlnYXRpb25E
YXRhU3RvcmVfaAorI2RlZmluZSBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlX2gKKworI2luY2x1ZGUg
IkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1
ZGUgIldlYkNvcmVUeXBlQXJndW1lbnRNYXJzaGFsbGluZy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJOYXZp
Z2F0aW9uRGF0YVN0b3JlIHsKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyLmVuY29kZSh1cmwpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZSh0aXRsZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZSYgcykKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocy51cmwpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHMu
dGl0bGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRkIHRoZSByZW1haW5pbmcgaXRlbXMgd2Ugd2FudCB0
byB0cmFjayBmb3IgaGlzdG9yeS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJsOworICAgIFdlYkNv
cmU6OlN0cmluZyB0aXRsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViTmF2aWdhdGlvbkRhdGFTdG9yZV9oCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBD
U3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkocmV2aXNp
b24gNTc2NTEpCisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlN
ZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBlbnVtIEtpbmQg
ewogICAgIERpZEZpbmlzaFByb2dyZXNzLAogICAgIERpZEZpcnN0TGF5b3V0Rm9yRnJhbWUsCiAg
ICAgRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUsCisgICAgRGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEsCisgICAgRGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0LAorICAg
IERpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCwKICAgICBEaWRSZWNlaXZlRXZlbnQsCiAgICAgRGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCiAgICAgRGlk
UmVjZWl2ZVRpdGxlRm9yRnJhbWUsCkBAIC02MCw2ICs2Myw3IEBAIGVudW0gS2luZCB7CiAgICAg
RGlkU2V0RnJhbWUsCiAgICAgRGlkU3RhcnRQcm9ncmVzcywKICAgICBEaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lLAorICAgIERpZFVwZGF0ZUhpc3RvcnlUaXRsZSwKICAgICBTZXRUb29s
VGlwLAogICAgIFRha2VGb2N1cywKIH07CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJIaXN0
b3J5Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJIaXN0b3J5
Q2xpZW50LmNwcAkocmV2aXNpb24gNTc2NTEpCShmcm9tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJ
Q2xpZW50LmNwcDo1NzY1MSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiV2ViVUlDbGllbnQuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlVJQ2xpZW50OjpXZWJV
SUNsaWVudCgpCit7CisgICAgaW5pdGlhbGl6ZSgwKTsKK30KKwordm9pZCBXZWJVSUNsaWVudDo6
aW5pdGlhbGl6ZShXS1BhZ2VVSUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChjbGllbnQgJiYg
IWNsaWVudC0+dmVyc2lvbikKKyAgICAgICAgbV9wYWdlVUlDbGllbnQgPSAqY2xpZW50OworICAg
IGVsc2UgCisgICAgICAgIG1lbXNldCgmbV9wYWdlVUlDbGllbnQsIDAsIHNpemVvZihtX3BhZ2VV
SUNsaWVudCkpOworfQorCitXZWJQYWdlUHJveHkqIFdlYlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdl
KFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBpZiAoIW1fcGFnZVVJQ2xpZW50LmNyZWF0ZU5l
d1BhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB0b1dLKG1fcGFnZVVJ
Q2xpZW50LmNyZWF0ZU5ld1BhZ2UodG9SZWYocGFnZSksIG1fcGFnZVVJQ2xpZW50LmNsaWVudElu
Zm8pKTsKK30gCisKK3ZvaWQgV2ViVUlDbGllbnQ6OnNob3dQYWdlKFdlYlBhZ2VQcm94eSogcGFn
ZSkKK3sKKyAgICBpZiAoIW1fcGFnZVVJQ2xpZW50LnNob3dQYWdlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9wYWdlVUlDbGllbnQuc2hvd1BhZ2UodG9SZWYocGFnZSksIG1fcGFnZVVJ
Q2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlVJQ2xpZW50OjpjbG9zZShXZWJQYWdl
UHJveHkqIHBhZ2UpCit7CisgICAgaWYgKCFtX3BhZ2VVSUNsaWVudC5jbG9zZSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fcGFnZVVJQ2xpZW50LmNsb3NlKHRvUmVmKHBhZ2UpLCBtX3Bh
Z2VVSUNsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJVSUNsaWVudDo6cnVuSmF2YVNj
cmlwdEFsZXJ0KFdlYlBhZ2VQcm94eSogcGFnZSwgU3RyaW5nSW1wbCogYWxlcnRUZXh0LCBXZWJG
cmFtZVByb3h5KiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fcGFnZVVJQ2xpZW50LnJ1bkphdmFTY3Jp
cHRBbGVydCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fcGFnZVVJQ2xpZW50LnJ1bkph
dmFTY3JpcHRBbGVydCh0b1JlZihwYWdlKSwgdG9SZWYoYWxlcnRUZXh0KSwgdG9SZWYoZnJhbWUp
LCBtX3BhZ2VVSUNsaWVudC5jbGllbnRJbmZvKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuY3BwCShyZXZpc2lvbiA1
NzY1MSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw1OCArMjMsNjAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW5jbHVkZSAiV2ViVUlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJIaXN0
b3J5Q2xpZW50LmgiCiAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJOYXZp
Z2F0aW9uRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJVSUNsaWVudDo6V2ViVUlDbGll
bnQoKQorV2ViSGlzdG9yeUNsaWVudDo6V2ViSGlzdG9yeUNsaWVudCgpCiB7CiAgICAgaW5pdGlh
bGl6ZSgwKTsKIH0KIAotdm9pZCBXZWJVSUNsaWVudDo6aW5pdGlhbGl6ZShXS1BhZ2VVSUNsaWVu
dCogY2xpZW50KQordm9pZCBXZWJIaXN0b3J5Q2xpZW50Ojppbml0aWFsaXplKFdLUGFnZUhpc3Rv
cnlDbGllbnQqIGNsaWVudCkKIHsKICAgICBpZiAoY2xpZW50ICYmICFjbGllbnQtPnZlcnNpb24p
Ci0gICAgICAgIG1fcGFnZVVJQ2xpZW50ID0gKmNsaWVudDsKKyAgICAgICAgbV9wYWdlSGlzdG9y
eUNsaWVudCA9ICpjbGllbnQ7CiAgICAgZWxzZSAKLSAgICAgICAgbWVtc2V0KCZtX3BhZ2VVSUNs
aWVudCwgMCwgc2l6ZW9mKG1fcGFnZVVJQ2xpZW50KSk7CisgICAgICAgIG1lbXNldCgmbV9wYWdl
SGlzdG9yeUNsaWVudCwgMCwgc2l6ZW9mKG1fcGFnZUhpc3RvcnlDbGllbnQpKTsKIH0KIAotV2Vi
UGFnZVByb3h5KiBXZWJVSUNsaWVudDo6Y3JlYXRlTmV3UGFnZShXZWJQYWdlUHJveHkqIHBhZ2Up
Cit2b2lkIFdlYkhpc3RvcnlDbGllbnQ6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdl
YlBhZ2VQcm94eSogcGFnZSwgY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYgbmF2aWdhdGlv
bkRhdGFTdG9yZSwgV2ViRnJhbWVQcm94eSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2VVSUNs
aWVudC5jcmVhdGVOZXdQYWdlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4g
dG9XSyhtX3BhZ2VVSUNsaWVudC5jcmVhdGVOZXdQYWdlKHRvUmVmKHBhZ2UpLCBtX3BhZ2VVSUNs
aWVudC5jbGllbnRJbmZvKSk7Ci19IAorICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5kaWRO
YXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PFdlYk5hdmlnYXRpb25EYXRhPiBuYXZpZ2F0aW9uRGF0YSA9IFdlYk5hdmlnYXRpb25EYXRhOjpj
cmVhdGUobmF2aWdhdGlvbkRhdGFTdG9yZSk7IAorICAgIG1fcGFnZUhpc3RvcnlDbGllbnQuZGlk
TmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEodG9SZWYocGFnZSksIHRvUmVmKG5hdmlnYXRpb25E
YXRhLmdldCgpKSwgdG9SZWYoZnJhbWUpLCBtX3BhZ2VIaXN0b3J5Q2xpZW50LmNsaWVudEluZm8p
OworfQogCi12b2lkIFdlYlVJQ2xpZW50OjpzaG93UGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCit2
b2lkIFdlYkhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJv
eHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0
aW9uVVJMLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFnZVVJQ2xpZW50
LnNob3dQYWdlKQorICAgIGlmICghbV9wYWdlSGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50
UmVkaXJlY3QpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX3BhZ2VVSUNsaWVudC5zaG93
UGFnZSh0b1JlZihwYWdlKSwgbV9wYWdlVUlDbGllbnQuY2xpZW50SW5mbyk7CisKKyAgICBtX3Bh
Z2VIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCh0b1JlZihwYWdlKSwgdG9V
UkxSZWYoc291cmNlVVJMLmltcGwoKSksIHRvVVJMUmVmKGRlc3RpbmF0aW9uVVJMLmltcGwoKSks
IHRvUmVmKGZyYW1lKSwgbV9wYWdlSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvKTsKIH0KIAotdm9p
ZCBXZWJVSUNsaWVudDo6Y2xvc2UoV2ViUGFnZVByb3h5KiBwYWdlKQordm9pZCBXZWJIaXN0b3J5
Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJh
bWVQcm94eSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2VVSUNsaWVudC5jbG9zZSkKKyAgICBp
ZiAoIW1fcGFnZUhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KQogICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgbV9wYWdlVUlDbGllbnQuY2xvc2UodG9SZWYocGFnZSksIG1f
cGFnZVVJQ2xpZW50LmNsaWVudEluZm8pOworCisgICAgbV9wYWdlSGlzdG9yeUNsaWVudC5kaWRQ
ZXJmb3JtU2VydmVyUmVkaXJlY3QodG9SZWYocGFnZSksIHRvVVJMUmVmKHNvdXJjZVVSTC5pbXBs
KCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkpLCB0b1JlZihmcmFtZSksIG1fcGFn
ZUhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2ViVUlDbGllbnQ6OnJ1bkph
dmFTY3JpcHRBbGVydChXZWJQYWdlUHJveHkqIHBhZ2UsIFN0cmluZ0ltcGwqIGFsZXJ0VGV4dCwg
V2ViRnJhbWVQcm94eSogZnJhbWUpCit2b2lkIFdlYkhpc3RvcnlDbGllbnQ6OmRpZFVwZGF0ZUhp
c3RvcnlUaXRsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0
IFN0cmluZyYgdXJsLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFnZVVJ
Q2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCkKKyAgICBpZiAoIW1fcGFnZUhpc3RvcnlDbGllbnQu
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9wYWdl
VUlDbGllbnQucnVuSmF2YVNjcmlwdEFsZXJ0KHRvUmVmKHBhZ2UpLCB0b1JlZihhbGVydFRleHQp
LCB0b1JlZihmcmFtZSksIG1fcGFnZVVJQ2xpZW50LmNsaWVudEluZm8pOwotfQogCisgICAgbV9w
YWdlSGlzdG9yeUNsaWVudC5kaWRVcGRhdGVIaXN0b3J5VGl0bGUodG9SZWYocGFnZSksIHRvUmVm
KHRpdGxlLmltcGwoKSksIHRvVVJMUmVmKHVybC5pbXBsKCkpLCB0b1JlZihmcmFtZSksIG1fcGFn
ZUhpc3RvcnlDbGllbnQuY2xpZW50SW5mbyk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuaAkocmV2aXNpb24gNTc2NTEpCShm
cm9tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50Lmg6NTc2NTEpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJIaXN0b3J5Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVUlDbGllbnRfaAorI2RlZmluZSBXZWJVSUNsaWVu
dF9oCisKKyNpbmNsdWRlICJXS1BhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNs
YXNzIFN0cmluZ0ltcGw7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFt
ZVByb3h5OworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBXZWJVSUNsaWVudCB7CitwdWJs
aWM6CisgICAgV2ViVUlDbGllbnQoKTsKKyAgICB2b2lkIGluaXRpYWxpemUoV0tQYWdlVUlDbGll
bnQqKTsKKworICAgIFdlYlBhZ2VQcm94eSogY3JlYXRlTmV3UGFnZShXZWJQYWdlUHJveHkqKTsK
KyAgICB2b2lkIHNob3dQYWdlKFdlYlBhZ2VQcm94eSopOworICAgIHZvaWQgY2xvc2UoV2ViUGFn
ZVByb3h5Kik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5KiwgV2Vi
Q29yZTo6U3RyaW5nSW1wbCosIFdlYkZyYW1lUHJveHkqKTsKKworcHJpdmF0ZToKKyAgICBXS1Bh
Z2VVSUNsaWVudCBtX3BhZ2VVSUNsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViVUlDbGllbnRfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlz
dG9yeUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlD
bGllbnQuaAkocmV2aXNpb24gNTc2NTEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJIaXN0b3J5
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM0ICsyMywzNSBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVUlDbGllbnRfaAotI2Rl
ZmluZSBXZWJVSUNsaWVudF9oCisjaWZuZGVmIFdlYkhpc3RvcnlDbGllbnRfaAorI2RlZmluZSBX
ZWJIaXN0b3J5Q2xpZW50X2gKIAogI2luY2x1ZGUgIldLUGFnZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgY2xhc3MgU3RyaW5nSW1wbDsKKyAgICBjbGFzcyBTdHJpbmc7CiB9CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViTmF2aWdh
dGlvbkRhdGFTdG9yZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAotY2xhc3MgV2ViVUlDbGllbnQg
eworY2xhc3MgV2ViSGlzdG9yeUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgV2ViVUlDbGllbnQoKTsK
LSAgICB2b2lkIGluaXRpYWxpemUoV0tQYWdlVUlDbGllbnQqKTsKKyAgICBXZWJIaXN0b3J5Q2xp
ZW50KCk7CisgICAgdm9pZCBpbml0aWFsaXplKFdLUGFnZUhpc3RvcnlDbGllbnQqKTsKIAotICAg
IFdlYlBhZ2VQcm94eSogY3JlYXRlTmV3UGFnZShXZWJQYWdlUHJveHkqKTsKLSAgICB2b2lkIHNo
b3dQYWdlKFdlYlBhZ2VQcm94eSopOwotICAgIHZvaWQgY2xvc2UoV2ViUGFnZVByb3h5Kik7Ci0g
ICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5KiwgV2ViQ29yZTo6U3RyaW5n
SW1wbCosIFdlYkZyYW1lUHJveHkqKTsKKyAgICB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUmLCBXZWJG
cmFtZVByb3h5Kik7CisgICAgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViUGFnZVBy
b3h5KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgZGVzdGluYXRpb25VUkwsIFdlYkZyYW1lUHJveHkqKTsKKyAgICB2b2lkIGRpZFBlcmZv
cm1TZXJ2ZXJSZWRpcmVjdChXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNv
dXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgV2ViRnJhbWVQ
cm94eSopOworICAgIHZvaWQgZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSosIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYgdGl0bGUsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdXJsLCBX
ZWJGcmFtZVByb3h5Kik7CiAKIHByaXZhdGU6Ci0gICAgV0tQYWdlVUlDbGllbnQgbV9wYWdlVUlD
bGllbnQ7CisgICAgV0tQYWdlSGlzdG9yeUNsaWVudCBtX3BhZ2VIaXN0b3J5Q2xpZW50OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBXZWJVSUNsaWVudF9oCisjZW5k
aWYgLy8gV2ViSGlzdG9yeUNsaWVudF9oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJOYXZp
Z2F0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTmF2aWdh
dGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTmF2aWdh
dGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJOYXZpZ2F0aW9uRGF0YTo6V2ViTmF2aWdhdGlvbkRhdGEoY29uc3QgV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZSYgc3RvcmUpCisgICAgOiBtX3N0b3JlKHN0b3JlKQoreworfQorCitXZWJOYXZpZ2F0
aW9uRGF0YTo6fldlYk5hdmlnYXRpb25EYXRhKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25EYXRhLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJOYXZpZ2F0aW9uRGF0YV9o
CisjZGVmaW5lIFdlYk5hdmlnYXRpb25EYXRhX2gKKworI2luY2x1ZGUgIldlYk5hdmlnYXRpb25E
YXRhU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJOYXZpZ2F0aW9u
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYk5hdmlnYXRpb25EYXRhPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTmF2aWdhdGlvbkRhdGE+IGNyZWF0ZShjb25zdCBXZWJO
YXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViTmF2aWdhdGlvbkRhdGEoc3RvcmUpKTsKKyAgICB9CisgICAgfldlYk5hdmlnYXRp
b25EYXRhKCk7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0b3JlLnRpdGxlOyB9CisgICAgV2ViQ29yZTo6U3RyaW5nIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcmUudXJsOyB9CisKK3ByaXZhdGU6CisgICAgV2ViTmF2aWdhdGlvbkRhdGEoY29uc3Qg
V2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYpOworCisgICAgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSBt
X3N0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJOYXZp
Z2F0aW9uRGF0YV9oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDU3NjUxKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlVHlwZUFyZ3VtZW50TWFyc2hhbGxpbmcuaCIKICNpbmNsdWRlICJXZWJFdmVudC5o
IgorI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgpAQCAtMTA3LDYgKzEwOCwxMSBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVVJQ2xpZW50KFdLCiAgICAgbV91aUNsaWVudC5pbml0aWFs
aXplKGNsaWVudCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplSGlzdG9yeUNs
aWVudChXS1BhZ2VIaXN0b3J5Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9oaXN0b3J5Q2xpZW50
LmluaXRpYWxpemUoY2xpZW50KTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnJldml2ZSgpCiB7
CiAgICAgbV92YWxpZCA9IHRydWU7CkBAIC00NzcsNiArNDgzLDQxIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAgICAgIGNsb3NlUGFnZSgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNz
YWdlOjpEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTogeworICAgICAgICAgICAgV2ViTmF2
aWdhdGlvbkRhdGFTdG9yZSBzdG9yZTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Cisg
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQQzo6T3V0KHN0b3JlLCBmcmFt
ZUlEKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEod2ViRnJhbWUoZnJhbWVJRCksIHN0b3JlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0OiB7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlVVJMU3Ry
aW5nOworICAgICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nOworICAgICAgICAg
ICAgdWludDY0X3QgZnJhbWVJRDsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmRlY29kZShD
b3JlSVBDOjpPdXQoc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgZnJhbWVJ
RCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpZFBlcmZvcm1DbGll
bnRSZWRpcmVjdCh3ZWJGcmFtZShmcmFtZUlEKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlv
blVSTFN0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdDogeworICAgICAg
ICAgICAgU3RyaW5nIHNvdXJjZVVSTFN0cmluZzsKKyAgICAgICAgICAgIFN0cmluZyBkZXN0aW5h
dGlvblVSTFN0cmluZzsKKyAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7CisgICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoQ29yZUlQQzo6T3V0KHNvdXJjZVVSTFN0cmluZywgZGVz
dGluYXRpb25VUkxTdHJpbmcsIGZyYW1lSUQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Qod2ViRnJhbWUoZnJhbWVJRCksIHNv
dXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRVcGRhdGVI
aXN0b3J5VGl0bGU6IHsKKyAgICAgICAgICAgIFN0cmluZyB0aXRsZTsKKyAgICAgICAgICAgIFN0
cmluZyB1cmw7CisgICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOworICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMuZGVjb2RlKENvcmVJUEM6Ok91dCh0aXRsZSwgdXJsLCBmcmFtZUlEKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGlkVXBkYXRlSGlzdG9yeVRpdGxl
KHdlYkZyYW1lKGZyYW1lSUQpLCB0aXRsZSwgdXJsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjQ1LDYgKzY4NiwyOSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdlCiAgICAgbV91aUNsaWVudC5ydW5KYXZhU2NyaXB0
QWxlcnQodGhpcywgYWxlcnRUZXh0LmltcGwoKSwgZnJhbWUpOwogfQogCisKKy8vIEhpc3RvcnlD
bGllbnQKKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBzdG9y
ZSkgCit7CisgICAgbV9oaXN0b3J5Q2xpZW50LmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
KHRoaXMsIHN0b3JlLCBmcmFtZSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKQoreworICAgIG1f
aGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QodGhpcywgc291cmNlVVJMU3Ry
aW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgZnJhbWUpOworfQorCit2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVSTFN0cmlu
ZykKK3sKKyAgICBtX2hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KHRoaXMs
IHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1lKTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9oaXN0
b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSh0aGlzLCB0aXRsZSwgdXJsLCBmcmFtZSk7
Cit9CisKIC8vIE90aGVyCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp0YWtlRm9jdXMoYm9vbCBkaXJl
Y3Rpb24pCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNTc2NTEpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdFJldHVyblZhbHVlQ2FsbGJhY2suaCIKICNpbmNs
dWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJIaXN0b3J5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViUG9saWN5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVUlDbGllbnQuaCIKQEAgLTYxLDYg
KzYyLDcgQEAgY2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYlBhZ2VOYW1lc3BhY2U7CiBj
bGFzcyBXZWJQcm9jZXNzUHJveHk7CiBjbGFzcyBXZWJXaGVlbEV2ZW50OworY2xhc3MgV2ViTmF2
aWdhdGlvbkRhdGFTdG9yZTsKIAogY2xhc3MgV2ViUGFnZVByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViUGFnZVByb3h5PiB7CiBwdWJsaWM6CkBAIC03OCw2ICs4MCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluaXRpYWxpemVMb2FkZXJDbGllbnQoV0tQYWdlTG9hZGVyQ2xpZW50Kik7CiAgICAg
dm9pZCBpbml0aWFsaXplUG9saWN5Q2xpZW50KFdLUGFnZVBvbGljeUNsaWVudCopOwogICAgIHZv
aWQgaW5pdGlhbGl6ZVVJQ2xpZW50KFdLUGFnZVVJQ2xpZW50Kik7CisgICAgdm9pZCBpbml0aWFs
aXplSGlzdG9yeUNsaWVudChXS1BhZ2VIaXN0b3J5Q2xpZW50Kik7CiAKICAgICB2b2lkIHJldml2
ZSgpOwogCkBAIC0xNTcsOSArMTYwLDEzIEBAIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KiBj
cmVhdGVOZXdQYWdlKCk7CiAgICAgdm9pZCBzaG93UGFnZSgpOwogICAgIHZvaWQgY2xvc2VQYWdl
KCk7Ci0KICAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJik7CiAKKyAgICB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25E
YXRhKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJik7IAorICAg
IHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkZXN0
aW5hdGlvblVSTFN0cmluZyk7CisgICAgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsKKyAgICB2b2lkIGRpZFVw
ZGF0ZUhpc3RvcnlUaXRsZShXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0
aXRsZSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB1cmwpOworCiAgICAgdm9pZCB0YWtlRm9jdXMo
Ym9vbCBkaXJlY3Rpb24pOwogICAgIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJp
bmcmKTsKIApAQCAtMTcwLDYgKzE3Nyw3IEBAIHByaXZhdGU6CiAgICAgV2ViTG9hZGVyQ2xpZW50
IG1fbG9hZGVyQ2xpZW50OwogICAgIFdlYlBvbGljeUNsaWVudCBtX3BvbGljeUNsaWVudDsKICAg
ICBXZWJVSUNsaWVudCBtX3VpQ2xpZW50OworICAgIFdlYkhpc3RvcnlDbGllbnQgbV9oaXN0b3J5
Q2xpZW50OwogCiAgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IG1fZHJhd2luZ0FyZWE7CiAK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiA1NzY1MSkKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw5ICszNywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
eworICAgIGNsYXNzIEtVUkxXcmFwcGVyOwogICAgIGNsYXNzIFdlYkNvbnRleHQ7CiAgICAgY2xh
c3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OwogICAgIGNsYXNzIFdlYkZyYW1lUHJveHk7
CisgICAgY2xhc3MgV2ViTmF2aWdhdGlvbkRhdGE7CiAgICAgY2xhc3MgV2ViUGFnZU5hbWVzcGFj
ZTsKICAgICBjbGFzcyBXZWJQYWdlUHJveHk7CiAgICAgY2xhc3MgV2ViUHJlZmVyZW5jZXM7CkBA
IC0xMjcsNCArMTI5LDE0IEBAIGlubGluZSBXS1VSTFJlZiB0b1VSTFJlZihXZWJDb3JlOjpTdHJp
bmcKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXS1VSTFJlZj4ocyk7CiB9CiAKK2lubGlu
ZSBXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhKiB0b1dLKFdLTmF2aWdhdGlvbkRhdGFSZWYgbikK
K3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRh
Kj4obik7Cit9CisKK2lubGluZSBXS05hdmlnYXRpb25EYXRhUmVmIHRvUmVmKFdlYktpdDo6V2Vi
TmF2aWdhdGlvbkRhdGEqIG4pCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V0tOYXZp
Z2F0aW9uRGF0YVJlZj4obik7Cit9CisKICNlbmRpZiAvLyBXS0FQSUNhc3RfaApJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tCYXNlLmgJKHJldmlzaW9uIDU3NjUxKQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMiBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCYXNlV2luLmg+CiAjZW5kaWYKIAordHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlV0tDb250ZXh0KiBXS0NvbnRleHRSZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVXS0ZyYW1l
KiBXS0ZyYW1lUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tGcmFtZVBvbGljeUxpc3RlbmVy
KiBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVXS05hdmln
YXRpb25EYXRhUmVmKiBXS05hdmlnYXRpb25EYXRhUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
V0tQYWdlKiBXS1BhZ2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVXS0NvbnRleHQqIFdLQ29u
dGV4dFJlZjsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZVdLUGFnZU5hbWVzcGFjZSogV0tQYWdlTmFt
ZXNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tGcmFtZVBvbGljeUxpc3RlbmVyKiBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJSZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVXS1ByZWZlcmVu
Y2VzUmVmKiBXS1ByZWZlcmVuY2VzUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tTdHJpbmdS
ZWYqIFdLU3RyaW5nUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tVUkxSZWYqIFdLVVJMUmVm
OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tOYXZpZ2F0aW9uRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tOYXZpZ2F0aW9uRGF0YS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS05hdmlnYXRpb25EYXRh
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJXS05hdmlnYXRpb25EYXRhLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXZWJOYXZpZ2F0aW9uRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitXS1N0
cmluZ1JlZiBXS05hdmlnYXRpb25EYXRhR2V0VGl0bGUoV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZp
Z2F0aW9uRGF0YVJlZikKK3sKKyAgICByZXR1cm4gdG9SZWYodG9XSyhuYXZpZ2F0aW9uRGF0YVJl
ZiktPnRpdGxlKCkuaW1wbCgpKTsKK30KKworV0tVUkxSZWYgV0tOYXZpZ2F0aW9uRGF0YUdldFVS
TChXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhUmVmKQoreworICAgIHJldHVybiB0
b1VSTFJlZih0b1dLKG5hdmlnYXRpb25EYXRhUmVmKS0+dXJsKCkuaW1wbCgpKTsKK30KKworV0tO
YXZpZ2F0aW9uRGF0YVJlZiBXS05hdmlnYXRpb25EYXRhUmV0YWluKFdLTmF2aWdhdGlvbkRhdGFS
ZWYgbmF2aWdhdGlvbkRhdGFSZWYpCit7CisgICAgdG9XSyhuYXZpZ2F0aW9uRGF0YVJlZiktPnJl
ZigpOworICAgIHJldHVybiBuYXZpZ2F0aW9uRGF0YVJlZjsKK30KKwordm9pZCBXS05hdmlnYXRp
b25EYXRhUmVsZWFzZShXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhUmVmKQorewor
ICAgIHRvV0sobmF2aWdhdGlvbkRhdGFSZWYpLT5kZXJlZigpOworfQpJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tOYXZpZ2F0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLTmF2aWdhdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLTmF2aWdhdGlvbkRhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tOYXZpZ2F0aW9uRGF0YV9oCisjZGVm
aW5lIFdLTmF2aWdhdGlvbkRhdGFfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19FWFBPUlQgV0tT
dHJpbmdSZWYgV0tOYXZpZ2F0aW9uRGF0YUdldFRpdGxlKFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2
aWdhdGlvbkRhdGEpOworV0tfRVhQT1JUIFdLVVJMUmVmIFdLTmF2aWdhdGlvbkRhdGFHZXRVUkwo
V0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YSk7CisKK1dLX0VYUE9SVCBXS05hdmln
YXRpb25EYXRhUmVmIFdLTmF2aWdhdGlvbkRhdGFSZXRhaW4oV0tOYXZpZ2F0aW9uRGF0YVJlZiBu
YXZpZ2F0aW9uRGF0YSk7CitXS19FWFBPUlQgdm9pZCBXS05hdmlnYXRpb25EYXRhUmVsZWFzZShX
S05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhKTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLTmF2aWdhdGlvbkRhdGFfaCAqLwpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiA1NzY1MSkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsMTIg
QEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZwogICAgICAgICB0b1dL
KHBhZ2VSZWYpLT5pbml0aWFsaXplVUlDbGllbnQod2tDbGllbnQpOwogfQogCit2b2lkIFdLUGFn
ZVNldFBhZ2VIaXN0b3J5Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBXS1BhZ2VIaXN0b3J5Q2xp
ZW50ICogd2tDbGllbnQpCit7CisgICBpZiAod2tDbGllbnQgJiYgIXdrQ2xpZW50LT52ZXJzaW9u
KQorICAgICAgICB0b1dLKHBhZ2VSZWYpLT5pbml0aWFsaXplSGlzdG9yeUNsaWVudCh3a0NsaWVu
dCk7Cit9CisKICNpZiBfX0JMT0NLU19fCiBzdGF0aWMgdm9pZCBjYWxsQmxvY2tBbmRSZWxlYXNl
KHZvaWQqIGNvbnRleHQsIFdLU3RyaW5nUmVmIHJlc3VsdFZhbHVlKQogewpJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDU3NjUxKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgc3RydWN0IFdL
UGFnZUxvYWRlckNsaWVudCB7CiB0eXBlZGVmIHN0cnVjdCBXS1BhZ2VMb2FkZXJDbGllbnQgV0tQ
YWdlTG9hZGVyQ2xpZW50OwogCiAvLyBQb2xpY3kgQ2xpZW50LgotCiB0eXBlZGVmIHZvaWQgKCpX
S1BhZ2VEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uQ2FsbGJhY2spKFdLUGFnZVJlZiBw
YWdlLCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgV0tVUkxSZWYgdXJsLCBXS0ZyYW1lUmVmIGZy
YW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgV0tV
UkxSZWYgdXJsLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlz
dGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGVj
aWRlUG9saWN5Rm9yTUlNRVR5cGVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVm
IE1JTUVUeXBlLCBXS1VSTFJlZiB1cmwsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CkBAIC0xMTMsNiAr
MTEyLDIzIEBAIHN0cnVjdCBXS1BhZ2VVSUNsaWVudCB7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgV0tQ
YWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7CiAKKy8vIEhpc3RvcnkgQ2xpZW50Cit0eXBlZGVm
IHZvaWQgKCpXS1BhZ2VEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YUNhbGxiYWNrKShXS1Bh
Z2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YSwgV0tGcmFtZVJl
ZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VE
aWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVm
IHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYgZnJhbWUsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkUGVyZm9ybVNl
cnZlclJlZGlyZWN0Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkws
IFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLUGFnZURpZFVwZGF0ZUhpc3RvcnlUaXRsZUNh
bGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwg
V0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CisKK3N0cnVjdCBXS1Bh
Z2VIaXN0b3J5Q2xpZW50IHsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CisgICAgY29uc3Qgdm9p
ZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGllbnRJbmZvOworICAgIFdLUGFnZURpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhQ2Fs
bGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGE7CisgICAgV0tQYWdlRGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0Q2FsbGJhY2sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Q7CisgICAgV0tQYWdl
RGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q7CisgICAgV0tQYWdlRGlkVXBkYXRlSGlzdG9y
eVRpdGxlQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRVcGRhdGVI
aXN0b3J5VGl0bGU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tQYWdlSGlzdG9yeUNsaWVudCBXS1Bh
Z2VIaXN0b3J5Q2xpZW50OworCisKIFdLX0VYUE9SVCBXS1BhZ2VOYW1lc3BhY2VSZWYgV0tQYWdl
R2V0UGFnZU5hbWVzcGFjZShXS1BhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFn
ZUxvYWRVUkwoV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHVybCk7CkBAIC0xMzcsNiArMTUzLDcg
QEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlVGVybWluYXRlKFdLUGFnZVJlZgogV0tfRVhQT1JUIHZv
aWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlTG9hZGVy
Q2xpZW50ICogY2xpZW50KTsKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVNldFBhZ2VQb2xpY3lDbGll
bnQoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZVBvbGljeUNsaWVudCAqIGNsaWVudCk7CiBXS19FWFBP
UlQgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZVVJQ2xp
ZW50ICogY2xpZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZVNldFBhZ2VIaXN0b3J5Q2xpZW50
KFdLUGFnZVJlZiBwYWdlLCBXS1BhZ2VIaXN0b3J5Q2xpZW50ICogY2xpZW50KTsKIAogI2lmIF9f
QkxPQ0tTX18KIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShX
S1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc2NyaXB0LCB2b2lkIChecmV0dXJuVmFsdWVCbG9j
aykoV0tTdHJpbmdSZWYpKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dlYktpdDIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XZWJLaXQyLmgJKHJldmlz
aW9uIDU3NjUxKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV2ViS2l0Mi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWVQ
b2xpY3lMaXN0ZW5lci5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tOYXZpZ2F0aW9uRGF0YS5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VOYW1l
c3BhY2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXMuaD4KSW5kZXg6IFdlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1NzY1MSkKKysr
IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQsNiArMTY0LDEzIEBACiAJCUJDRUU5OEM3MTEzMzE0RDcwMDZCQ0MyNCAvKiBXZWJQ
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0VFOThDNTExMzMxNEQ3MDA2QkNDMjQgLyogV2ViUGFnZU5hbWVzcGFjZS5oICovOyB9
OwogCQlCQ0VFOThDQzExMzMxNzRDMDA2QkNDMjQgLyogV0tQYWdlTmFtZXNwYWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUU5OENBMTEzMzE3
NEMwMDZCQ0MyNCAvKiBXS1BhZ2VOYW1lc3BhY2UuY3BwICovOyB9OwogCQlCQ0VFOThDRDExMzMx
NzRDMDA2QkNDMjQgLyogV0tQYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VFOThDQjExMzMxNzRDMDA2QkNDMjQgLyogV0tQYWdl
TmFtZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9
OworCQlCQ0Y2OUY4NjExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUY4NDExNzZD
RDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgKi87IH07CisJCUJDRjY5Rjg3MTE3
NkNENkYwMDQ3MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUY4NTExNzZDRDZGMDA0NzFBNTIgLyogV2Vi
SGlzdG9yeUNsaWVudC5oICovOyB9OworCQlCQ0Y2OUY5QTExNzZDRUQ2MDA0NzFBNTIgLyogV2Vi
TmF2aWdhdGlvbkRhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRh
U3RvcmUuaCAqLzsgfTsKKwkJQkNGNjlGQTIxMTc2RDAxNDAwNDcxQTUyIC8qIFdlYk5hdmlnYXRp
b25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0Y2OUZBMDExNzZEMDE0MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGEuaCAqLzsgfTsKKwkJ
QkNGNjlGQTMxMTc2RDAxNDAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjY5RkExMTE3NkQwMTQw
MDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5jcHAgKi87IH07CisJCUJDRjY5RkE5MTE3NkQx
Q0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUZBNzExNzZEMUNCMDA0NzFBNTIgLyogV0tOYXZp
Z2F0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKKwkJQkNGNjlGQUExMTc2RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGQTgxMTc2
RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGEuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1
aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCkBAIC0zNTQsNiArMzYxLDEzIEBACiAJCUJDRUU5OEM1MTEzMzE0RDcwMDZCQ0MyNCAv
KiBXZWJQYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRTk4Q0Ex
MTMzMTc0QzAwNkJDQzI0IC8qIFdLUGFnZU5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXS1BhZ2VOYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0VFOThDQjExMzMxNzRDMDA2QkNDMjQgLyogV0tQYWdlTmFtZXNwYWNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFnZU5hbWVzcGFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Y2OUY4NDExNzZDRDZGMDA0NzFBNTIgLyog
V2ViSGlzdG9yeUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJIaXN0b3J5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNG
NjlGODUxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0Y2OUY5ODExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOYXZpZ2F0aW9u
RGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjY5RkEwMTE3NkQw
MTQwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJOYXZpZ2F0aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0Y2OUZBMTExNzZEMDE0MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTmF2aWdhdGlvbkRhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Y2OUZBNzExNzZEMUNCMDA0NzFBNTIg
LyogV0tOYXZpZ2F0aW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S05hdmlnYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjY5RkE4
MTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC00ODUsNiArNDk5LDcg
QEAKIAkJCQlCQzAzMkRBRjEwRjQzODBGMDA1OEMxNUEgLyogV2ViRXZlbnQuaCAqLywKIAkJCQlC
QzAzMkRCMDEwRjQzODBGMDA1OEMxNUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCAqLywKIAkJ
CQlCQzAzMkRCMTEwRjQzODBGMDA1OEMxNUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmggKi8sCisJ
CQkJQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCAq
LywKIAkJCQlCQ0Q1OThBQjExMkI3RkRGMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5jZXNTdG9yZS5j
cHAgKi8sCiAJCQkJQkNENTk4QUExMTJCN0ZERjAwRUM4QzIzIC8qIFdlYlByZWZlcmVuY2VzU3Rv
cmUuaCAqLywKIAkJCSk7CkBAIC01ODMsOCArNTk4LDEyIEBACiAJCQkJQkNCOUY2OUUxMTIzQTg0
QjAwQTEzN0UwIC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oICovLAogCQkJCUJDMTEx
QjBBMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJGcmFtZVByb3h5LmNwcCAqLywKIAkJCQlCQzlCMzg5
RjEwRjUzOEJFMDA0NDNBMTUgLyogV2ViRnJhbWVQcm94eS5oICovLAorCQkJCUJDRjY5Rjg0MTE3
NkNENkYwMDQ3MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmNwcCAqLywKKwkJCQlCQ0Y2OUY4NTEx
NzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5oICovLAogCQkJCUJDQjlFNzYxMTEy
MzJCOUUwMEExMzdFMCAvKiBXZWJMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUJDNTk1MzQwMTBG
QzA0NTIwMDk4RjgyRCAvKiBXZWJMb2FkZXJDbGllbnQuaCAqLywKKwkJCQlCQ0Y2OUZBMTExNzZE
MDE0MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGEuY3BwICovLAorCQkJCUJDRjY5RkEwMTE3
NkQwMTQwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oICovLAogCQkJCUJDRUU5OEM0MTEz
MzE0RDcwMDZCQ0MyNCAvKiBXZWJQYWdlTmFtZXNwYWNlLmNwcCAqLywKIAkJCQlCQ0VFOThDNTEx
MzMxNEQ3MDA2QkNDMjQgLyogV2ViUGFnZU5hbWVzcGFjZS5oICovLAogCQkJCUJDMTExQjBCMTEy
RjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLApAQCAtNjI2LDYgKzY0NSw4IEBA
CiAJCQkJQkNEMDEzOTcxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJhbWUuaCAqLywKIAkJCQlCQ0I5
RjZBNDExMjNERDBEMDBBMTM3RTAgLyogV0tGcmFtZVBvbGljeUxpc3RlbmVyLmNwcCAqLywKIAkJ
CQlCQ0I5RjZBMzExMjNERDBEMDBBMTM3RTAgLyogV0tGcmFtZVBvbGljeUxpc3RlbmVyLmggKi8s
CisJCQkJQkNGNjlGQTgxMTc2RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGEuY3BwICov
LAorCQkJCUJDRjY5RkE3MTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmggKi8s
CiAJCQkJQkNENTk3RDQxMTJCNTZEQzAwRUM4QzIzIC8qIFdLUGFnZS5jcHAgKi8sCiAJCQkJQkNE
NTk3RDUxMTJCNTZEQzAwRUM4QzIzIC8qIFdLUGFnZS5oICovLAogCQkJCUJDRUU5OENBMTEzMzE3
NEMwMDZCQ0MyNCAvKiBXS1BhZ2VOYW1lc3BhY2UuY3BwICovLApAQCAtODc3LDYgKzg5OCwxMCBA
QAogCQkJCUJDMjBFRDY2MTE2Rjk3MTEwMDA5NEE1MCAvKiBXS1VSTENGLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzEzMUJDOTExNzI2QzI4MDBCNjk3MjcgLyogQ29yZUlQQ01lc3NhZ2VLaW5kcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QTUwMTUxMTc2NUY1NjAwNzU3NTczIC8qIFdLUmV0YWlu
UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0Y2OUY4NzExNzZDRDZGMDA0NzFBNTIgLyogV2Vi
SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGNjlGOUExMTc2Q0VENjAwNDcx
QTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjY5
RkEyMTE3NkQwMTQwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQkNGNjlGQTkxMTc2RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMTAyNiw2ICsxMDUxLDkgQEAKIAkJCQlCQzIwRUJCNTExNkVFRjdBMDAw
OTRBNTAgLyogV0tVUkwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMEVDMDcxMTZFRjdGRjAw
MDk0QTUwIC8qIFdLU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMEVENjcxMTZG
OTcxMTAwMDk0QTUwIC8qIFdLVVJMQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNGNjlGODYx
MTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQkNGNjlGQTMxMTc2RDAxNDAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUJDRjY5RkFBMTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lv
biA1NzY1MSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJXZWJDb3JlVHlwZUFyZ3VtZW50TWFyc2hhbGxpbmcuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMu
aCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3Rv
cmUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZUtpbmRzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpAQCAtNDUsNiArNDYsOCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvV2lkZ2V0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJl
cy5oPgogCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgorCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NjksMTIgKzQ3Miw0NyBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpCiAKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAo
IXdlYlBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIg
PSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisKKyAg
ICBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlIGRhdGE7CisgICAgZGF0YS51cmwgPSBsb2FkZXItPnVy
bEZvckhpc3RvcnkoKS5zdHJpbmcoKTsKKyAgICBkYXRhLnRpdGxlID0gbG9hZGVyLT50aXRsZSgp
OworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJQYWdlLT5wYWdlSUQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4oZGF0YSwg
bV9mcmFtZS0+ZnJhbWVJRCgpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCF3ZWJQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9m
cmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAgIEFTU0VS
VChsb2FkZXItPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKTsKKworICAgIC8vIENsaWVudCBy
ZWRpcmVjdAorICAgIGlmICghbG9hZGVyLT5jbGllbnRSZWRpcmVjdFNvdXJjZUZvckhpc3Rvcnko
KS5pc051bGwoKSkgeworICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViUGFnZS0+cGFn
ZUlEKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3JlSVBDOjpJbihsb2FkZXItPmNsaWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvYWRlci0+Y2xpZW50UmVkaXJlY3REZXN0aW5hdGlvbkZvckhpc3RvcnkoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJh
bWUtPmZyYW1lSUQoKSkpOworICAgIH0KKworICAgIC8vIFNlcnZlciByZWRpcmVjdAorICAgIGlm
ICghbG9hZGVyLT5zZXJ2ZXJSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS5pc051bGwoKSkgewor
ICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6RGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViUGFnZS0+cGFnZUlEKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbihsb2Fk
ZXItPnNlcnZlclJlZGlyZWN0U291cmNlRm9ySGlzdG9yeSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5zZXJ2ZXJS
ZWRpcmVjdERlc3RpbmF0aW9uRm9ySGlzdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZnJhbWVJRCgpKSk7
CisgICAgfQogfQogCiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRHb1RvSGlzdG9y
eUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdApAQCAtNjEyLDkgKzY1MCwxMyBAQCBQYXNzUmVmUHRy
PERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxvYWRlCiAgICAgcmV0dXJuIERvY3VtZW50TG9hZGVy
OjpjcmVhdGUocmVxdWVzdCwgZGF0YSk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmKQordm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYg
dXJsKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNz
YWdlOjpEaWRVcGRhdGVIaXN0b3J5VGl0bGUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJ
bih0aXRsZSwgdXJsLnN0cmluZygpLCBtX2ZyYW1lLT5mcmFtZUlEKCkpKTsKIH0KIAogU3RyaW5n
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYpCkluZGV4OiBXZWJL
aXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQy
LnZjcHJvagkocmV2aXNpb24gNTc2NjcpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiwxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcV2ViTmF2aWdhdGlvbkRhdGFT
dG9yZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cU2hhcmVkXFdlYlByZWZlcmVuY2VzU3RvcmUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTc1MCw2ICs3NTQsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkhpc3RvcnlDbGllbnQuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXFdlYkhpc3RvcnlDbGllbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJMb2FkZXJDbGllbnQuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTc1OCw2ICs3NzAsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYk5hdmlnYXRp
b25EYXRhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJOYXZpZ2F0aW9uRGF0YS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYlBhZ2VO
YW1lc3BhY2UuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg1Niw2ICs4NzYsMTQgQEAK
IAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxVSVByb2Nlc3NcQVBJXENcV0tOYXZpZ2F0aW9uRGF0YS5jcHAiDQorCQkJCQkJPg0KKwkJ
CQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vz
c1xBUElcQ1xXS05hdmlnYXRpb25EYXRhLmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS1BhZ2Uu
Y3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NzY3MCkK
KysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEwLTA0LTE1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYkhpc3RvcnlDbGllbnQg
c3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3NjcxCisKKyAgICAgICAgQWRkIEhpc3RvcnlDbGllbnQgbG9nZ2luZy4KKworICAgICAgICAq
IE1pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoX2Rp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKF9kaWRQZXJmb3JtQ2xpZW50
UmVkaXJlY3QpOgorICAgICAgICAoX2RpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk6CisgICAgICAg
IChfZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKC1bQnJvd3NlcldpbmRvd0NvbnRy
b2xsZXIgYXdha2VGcm9tTmliXSk6CisKIDIwMTAtMDQtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRl
eDogV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dD
b250cm9sbGVyLm0JKHJldmlzaW9uIDU3NjUxKQorKysgV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIv
bWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0
LDggQEAgLSAodm9pZClhcHBsaWNhdGlvblRlcm1pbmF0aW5nCiAgICAgV0tQYWdlUmVsZWFzZShf
d2ViVmlldy5wYWdlUmVmKTsKIH0KIAorI3ByYWdtYSBtYXJrIExvYWRlciBDbGllbnQgQ2FsbGJh
Y2tzCisKIHN0YXRpYyB2b2lkIF9kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQogewog
ICAgIE5TTG9nKEAiZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSIpOwpAQCAtMTU2LDYg
KzE1OCw4IEBAIHN0YXRpYyB2b2lkIF9kaWRCZWNvbWVSZXNwb25zaXZlKFdLUGFnZVIKICAgICBO
U0xvZyhAImRpZEJlY29tZVJlc3BvbnNpdmUiKTsKIH0KIAorI3ByYWdtYSBtYXJrIFBvbGljeSBD
bGllbnQgQ2FsbGJhY2tzCisKIHN0YXRpYyB2b2lkIF9kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKFdLUGFnZVJlZiBwYWdlLCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgV0tVUkxSZWYg
dXJsLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCiB7CiAgICAgTlNMb2coQCJkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uIik7CkBAIC0xNzMsNiArMTc3LDggQEAgc3RhdGljIHZvaWQgX2RlY2lk
ZVBvbGljeUZvck1JTUVUeXBlKFdLUAogICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0
ZW5lcik7CiB9CiAKKyNwcmFnbWEgbWFyayBVSSBDbGllbnQgQ2FsbGJhY2tzCisKIHN0YXRpYyBX
S1BhZ2VSZWYgX2NyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7CiAgICAgTlNMb2coQCJjcmVhdGVOZXdQYWdlIik7CkBAIC0yMTIsNiArMjE4LDQ1
IEBAIHN0YXRpYyB2b2lkIF9ydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmUKICAgICBbYWxlcnQg
cmVsZWFzZV07CiB9CiAKKworI3ByYWdtYSBtYXJrIEhpc3RvcnkgQ2xpZW50IENhbGxiYWNrcwor
CitzdGF0aWMgdm9pZCBfZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV0tQYWdlUmVmIHBh
Z2UsIFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVSZWYgZnJhbWUs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgQ0ZTdHJpbmdSZWYgdGl0bGUgPSBXS1N0
cmluZ0NvcHlDRlN0cmluZygwLCBXS05hdmlnYXRpb25EYXRhR2V0VGl0bGUobmF2aWdhdGlvbkRh
dGEpKTsKKyAgICBDRlVSTFJlZiB1cmwgPSBXS1VSTENvcHlDRlVSTCgwLCBXS05hdmlnYXRpb25E
YXRhR2V0VVJMKG5hdmlnYXRpb25EYXRhKSk7CisgICAgTlNMb2coQCJIaXN0b3J5Q2xpZW50IC0g
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEgLSB0aXRsZTogJUAgLSB1cmw6ICVAIiwgdGl0
bGUsIHVybCk7CisgICAgQ0ZSZWxlYXNlKHRpdGxlKTsKKyAgICBDRlJlbGVhc2UodXJsKTsKK30K
Kworc3RhdGljIHZvaWQgX2RpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS1BhZ2VSZWYgcGFnZSwg
V0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiBm
cmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBDRlVSTFJlZiBjZlNvdXJjZVVS
TCA9IFdLVVJMQ29weUNGVVJMKDAsIHNvdXJjZVVSTCk7CisgICAgQ0ZVUkxSZWYgY2ZEZXN0aW5h
dGlvblVSTCA9IFdLVVJMQ29weUNGVVJMKDAsIGRlc3RpbmF0aW9uVVJMKTsKKyAgICBOU0xvZyhA
Ikhpc3RvcnlDbGllbnQgLSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QgLSBzb3VyY2VVUkw6ICVA
IC0gZGVzdGluYXRpb25VUkw6ICVAIiwgY2ZTb3VyY2VVUkwsIGNmRGVzdGluYXRpb25VUkwpOwor
ICAgIENGUmVsZWFzZShjZlNvdXJjZVVSTCk7CisgICAgQ0ZSZWxlYXNlKGNmRGVzdGluYXRpb25V
UkwpOworfQorCitzdGF0aWMgdm9pZCBfZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLUGFnZVJl
ZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0Zy
YW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIENGVVJMUmVmIGNm
U291cmNlVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgc291cmNlVVJMKTsKKyAgICBDRlVSTFJlZiBj
ZkRlc3RpbmF0aW9uVVJMID0gV0tVUkxDb3B5Q0ZVUkwoMCwgZGVzdGluYXRpb25VUkwpOworICAg
IE5TTG9nKEAiSGlzdG9yeUNsaWVudCAtIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCAtIHNvdXJj
ZVVSTDogJUAgLSBkZXN0aW5hdGlvblVSTDogJUAiLCBjZlNvdXJjZVVSTCwgY2ZEZXN0aW5hdGlv
blVSTCk7CisgICAgQ0ZSZWxlYXNlKGNmU291cmNlVVJMKTsKKyAgICBDRlJlbGVhc2UoY2ZEZXN0
aW5hdGlvblVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9kaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVSZWYg
ZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgQ0ZTdHJpbmdSZWYgY2ZUaXRs
ZSA9IFdLU3RyaW5nQ29weUNGU3RyaW5nKDAsIHRpdGxlKTsKKyAgICBDRlVSTFJlZiBjZlVSTCA9
IFdLVVJMQ29weUNGVVJMKDAsIFVSTCk7CisgICAgTlNMb2coQCJIaXN0b3J5Q2xpZW50IC0gZGlk
VXBkYXRlSGlzdG9yeVRpdGxlIC0gdGl0bGU6ICVAIC0gVVJMOiAlQCIsIGNmVGl0bGUsIGNmVVJM
KTsKKyAgICBDRlJlbGVhc2UoY2ZUaXRsZSk7CisgICAgQ0ZSZWxlYXNlKGNmVVJMKTsKK30KKwog
LSAodm9pZClhd2FrZUZyb21OaWIKIHsKICAgICBfd2ViVmlldyA9IFtbV0tWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOltjb250YWluZXJWaWV3IGZyYW1lXSBwYWdlTmFtZXNwYWNlUmVmOl9wYWdl
TmFtZXNwYWNlXTsKQEAgLTI1OSw2ICszMDQsMTcgQEAgLSAodm9pZClhd2FrZUZyb21OaWIKICAg
ICAgICAgX3J1bkphdmFTY3JpcHRBbGVydAogICAgIH07CiAgICAgV0tQYWdlU2V0UGFnZVVJQ2xp
ZW50KF93ZWJWaWV3LnBhZ2VSZWYsICZ1aUNsaWVudCk7CisKKyAgICBXS1BhZ2VIaXN0b3J5Q2xp
ZW50IGhpc3RvcnlDbGllbnQgPSB7CisgICAgICAgIDAsCisgICAgICAgIHNlbGYsCisgICAgICAg
IF9kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSwKKyAgICAgICAgX2RpZFBlcmZvcm1DbGll
bnRSZWRpcmVjdCwKKyAgICAgICAgX2RpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCwKKyAgICAgICAg
X2RpZFVwZGF0ZUhpc3RvcnlUaXRsZSwKKyAgICB9OworCisgICAgV0tQYWdlU2V0UGFnZUhpc3Rv
cnlDbGllbnQoX3dlYlZpZXcucGFnZVJlZiwgJmhpc3RvcnlDbGllbnQpOwogfQogCiAtICh2b2lk
KWRpZFN0YXJ0UHJvZ3Jlc3MK
</data>
<flag name="review"
          id="37227"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>