<?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>159041</bug_id>
          
          <creation_ts>2016-06-22 14:45:28 -0700</creation_ts>
          <short_desc>Move WebKit2 Apple Pay code to the open source repository</short_desc>
          <delta_ts>2016-06-24 11:31:20 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1204677</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-22 14:45:28 -0700</bug_when>
    <thetext>Move WebKit2 Apple Pay code to the open source repository</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205093</commentid>
    <comment_count>1</comment_count>
      <attachid>281983</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-24 09:19:26 -0700</bug_when>
    <thetext>Created attachment 281983
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205095</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-24 09:21:47 -0700</bug_when>
    <thetext>Attachment 281983 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:180:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:181:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:182:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:216:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:254:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:395:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:253:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:269:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:285:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:301:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:42:  The parameter name &quot;paymentRequest&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:113:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:114:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:116:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:117:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:120:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:121:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:64:  The parameter name &quot;status&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:129:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:144:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 37 in 18 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>1205100</commentid>
    <comment_count>3</comment_count>
      <attachid>281983</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-24 09:34:08 -0700</bug_when>
    <thetext>Comment on attachment 281983
Patch

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

&gt; Source/WebKit2/Shared/Cocoa/ArgumentCodersCocoa.mm:33
&gt; +    +    auto data = adoptNS([[NSMutableData alloc] init]);

I don&apos;t think these +es should be here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205101</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-24 09:35:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 281983 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281983&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/Cocoa/ArgumentCodersCocoa.mm:33
&gt; &gt; +    +    auto data = adoptNS([[NSMutableData alloc] init]);
&gt; 
&gt; I don&apos;t think these +es should be here.

You&apos;re right, I&apos;ve removed that file altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205102</commentid>
    <comment_count>5</comment_count>
      <attachid>281986</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-24 09:39:38 -0700</bug_when>
    <thetext>Created attachment 281986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1205104</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-24 09:41:22 -0700</bug_when>
    <thetext>Attachment 281986 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:214:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp:79:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:113:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:114:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:116:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:117:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:120:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:121:  The parameter name &quot;preferencesRef&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:129:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebKit2/UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:144:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 22 in 18 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>1205155</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-24 11:31:20 -0700</bug_when>
    <thetext>Committed r202432: &lt;http://trac.webkit.org/changeset/202432&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281983</attachid>
            <date>2016-06-24 09:19:26 -0700</date>
            <delta_ts>2016-06-24 09:39:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159041-20160624091915.patch</filename>
            <type>text/plain</type>
            <size>123971</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGQ3Y2Y3ODhjMTcwYzQ2
YmM0ZDczZDQzMzVjYTgyNmE2ZjAzNzk1Ni4uM2YwNzU1ZGUzNGU5OWEyZTRiZGNhYmM2YzgwMTcz
MzFkZDY0MmNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE2LTA2LTIyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWJLaXQy
IEFwcGxlIFBheSBjb2RlIHRvIHRoZSBvcGVuIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkwNDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW06IEFkZGVk
LgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BcHBsZVBheS9XZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQXBw
bGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eUNvY29hLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BcHBsZVBheS9jb2NvYS9XZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQXBwbGVQYXkvaW9zL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5SU9TLm1tOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQXBwbGVQYXkvbWFjL1dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9B
cHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IubWVzc2FnZXMuaW46IEFkZGVkLgor
CiAyMDE2LTA2LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIGxvZ2dpbmcgcmVsYXRlZCB0byBwcm9jZXNzIGFzc2VydGlvbnMgdG8gaGVscCBkZWJ1ZyBw
cm9jZXNzIHN1c3BlbnNpb24gaXNzdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRl
eCBhMTViYmZiMjI5ZTU2NTAxZmViZjA0MTY1OWQ3ZGE5MGYwOTA0NWUxLi4yMjBiOGE4NTZkMmI5
MzhjN2FiYjA4ZmRiN2FjZDczN2Q0ZmE5ZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
ZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9TaGFyZWQvQVBJ
L0NvY29hIFwKICAgICAkKFdlYktpdDIpL1NoYXJlZC9BdXRoZW50aWNhdGlvbiBcCiAgICAgJChX
ZWJLaXQyKS9TaGFyZWQvbWFjIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvQXBwbGVQYXkg
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hlIFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvQXV0b21hdGlvbiBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0Nvb2tpZXMgXApAQCAtNTcsNiArNTgsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvaW9zIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MgXAogICAgICQoV2ViS2l0
MikvVUlQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9BcHBsZVBheSBcCiAgICAg
JChXZWJLaXQyKS9VSVByb2Nlc3MvQXV0b21hdGlvbiBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nl
c3MvQ29jb2EgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0RhdGFiYXNlcyBcCkBAIC0xMzgs
NiArMTQwLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViUGFnZSBcCiAgICAgV2Vi
UGFnZVByb3h5IFwKICAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAorICAgIFdlYlBheW1lbnRDb29y
ZGluYXRvciBcCisgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgXAogICAgIFdlYlBsYXli
YWNrU2Vzc2lvbk1hbmFnZXIgXAogICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSBc
CiAgICAgV2ViUHJvY2VzcyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29j
b2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9B
cmd1bWVudENvZGVyc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MTM4Mjg5OWY0YmM2YzQ4ZjgzMThl
ZmMwOTE2NWM0ODhhNWEwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBcmd1bWVudENvZGVyc0NvY29hLmgi
CisKK25hbWVzcGFjZSBJUEMgeworCit2b2lkIHNlY3VyZUVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBpZCBvYmplY3QpCit7CisgICAgKyAgICBhdXRvIGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGF0YSBhbGxvY10gaW5pdF0pOworICAgICsgICAgYXV0byBhcmNoaXZlciA9IGFkb3B0TlMoW1tO
U0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRhOmRhdGEu
Z2V0KCldKTsKKyAgICArCisgICAgKyAgICBbYXJjaGl2ZXIgc2V0UmVxdWlyZXNTZWN1cmVDb2Rp
bmc6WUVTXTsKKyAgICArCisgICAgKyAgICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0OmNvbnRhY3Qu
cGtDb250YWN0KCkgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgKyAg
ICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOworICAgICsKKyAgICArICAgIGVuY29kZXIgPDwg
RGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW2RhdGEgYnl0ZXNdKSwg
W2RhdGEgbGVuZ3RoXSk7CisKK30KKworYm9vbCBzZWN1cmVEZWNvZGUoQXJndW1lbnREZWNvZGVy
JiwgQ2xhc3MqIGV4cGVjdGVkQ2xhc3MsIGlkJiBvYmplY3QpCit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dlYkNv
cmVBcmd1bWVudENvZGVyc0NvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk0YWY0Y2EwYjU0YzA3MTE2MDgy
NDlhZmVjZjM1ZDczYjEzZGY4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5oCkBAIC0wLDAgKzEsOTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1BheW1lbnRIZWFkZXJzLmg+CisKK25hbWVzcGFjZSBJUEMgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnQ+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGF5bWVu
dCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpQ
YXltZW50Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OlBheW1lbnRDb250YWN0PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRDb250YWN0Jik7CisgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBheW1lbnRDb250YWN0Jik7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNl
c3Npb24+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYpOworICAgIHN0YXRpYyBib29sIGRlY29k
ZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRNZXRo
b2Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2Vi
Q29yZTo6UGF5bWVudE1ldGhvZCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXImLCBXZWJDb3JlOjpQYXltZW50TWV0aG9kJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0PiB7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0
Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBh
eW1lbnRSZXF1ZXN0Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpBZGRyZXNzRmllbGRzPiB7CisgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpB
ZGRyZXNzRmllbGRzJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYs
IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpBZGRyZXNzRmllbGRzJik7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpMaW5lSXRl
bT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
QXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRSZXF1
ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBh
YmlsaXRpZXMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzJik7Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlw
cGluZ01ldGhvZD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6
OlNoaXBwaW5nTWV0aG9kJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTdXBwb3J0ZWROZXR3b3Jrcz4geworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVx
dWVzdDo6U3VwcG9ydGVkTmV0d29ya3MmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiwgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdvcmtzJik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5l
SXRlbXMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29y
ZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zJik7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1
bWVudENvZGVyc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNWIyZTUxNGI1ZWM0OThkYWJkYTk0ZDZj
OWFiNDI3YzBhYjkxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KQEAgLTAsMCArMSwzOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgorCisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworI2ltcG9ydCAiRGF0YVJlZmVyZW5j
ZS5oIgorI2ltcG9ydCA8UGFzc0tpdC9QYXNzS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdP
UksoUGFzc0tpdCkKKyNlbHNlCitTT0ZUX0xJTktfRlJBTUVXT1JLKFBhc3NLaXQpCisjZW5kaWYK
KworU09GVF9MSU5LX0NMQVNTKFBhc3NLaXQsIFBLQ29udGFjdCk7CitTT0ZUX0xJTktfQ0xBU1Mo
UGFzc0tpdCwgUEtQYXltZW50KTsKK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRN
ZXRob2QpOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIElQQyB7CisK
K3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50Pjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UGF5bWVudCYgcGF5bWVudCkKK3sKKyAgICBh
dXRvIGRhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yV3Jp
dGluZ1dpdGhNdXRhYmxlRGF0YTpkYXRhLmdldCgpXSk7CisKKyAgICBbYXJjaGl2ZXIgc2V0UmVx
dWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKworICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6cGF5
bWVudC5wa1BheW1lbnQoKSBmb3JLZXk6TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKKyAg
ICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOworCisgICAgZW5jb2RlciA8PCBEYXRhUmVmZXJl
bmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5n
dGhdKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnQ+OjpkZWNvZGUo
QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpQYXltZW50JiBwYXltZW50KQorewor
ICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZGF0YVJlZmVyZW5jZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
ZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3Rf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KGRhdGFSZWZlcmVuY2UuZGF0YSgp
KSkgbGVuZ3RoOmRhdGFSZWZlcmVuY2Uuc2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10pOworICAgIGF1
dG8gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZv
clJlYWRpbmdXaXRoRGF0YTpkYXRhLmdldCgpXSk7CisgICAgW3VuYXJjaGl2ZXIgc2V0UmVxdWly
ZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKyAgICBAdHJ5IHsKKyAgICAgICAgUEtQYXltZW50ICpwa1Bh
eW1lbnQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOmdldFBLUGF5bWVudENsYXNz
KCkgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgICAgIHBheW1lbnQg
PSBQYXltZW50KHBrUGF5bWVudCk7CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRp
b24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIFBLUGF5bWVudDogJUAi
LCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgW3VuYXJj
aGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudENvbnRhY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpQYXltZW50Q29udGFjdCYgcGF5bWVudENvbnRhY3Qp
Cit7CisgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRd
KTsKKyAgICBhdXRvIGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10g
aW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOworCisgICAgW2FyY2hp
dmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisKKyAgICBbYXJjaGl2ZXIgZW5jb2Rl
T2JqZWN0OnBheW1lbnRDb250YWN0LnBrQ29udGFjdCgpIGZvcktleTpOU0tleWVkQXJjaGl2ZVJv
b3RPYmplY3RLZXldOworICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107CisKKyAgICBlbmNv
ZGVyIDw8IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtkYXRhIGJ5
dGVzXSksIFtkYXRhIGxlbmd0aF0pOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UGF5bWVudENvbnRhY3Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3Jl
OjpQYXltZW50Q29udGFjdCYgcGF5bWVudENvbnRhY3QpCit7CisgICAgSVBDOjpEYXRhUmVmZXJl
bmNlIGRhdGFSZWZlcmVuY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhUmVmZXJlbmNl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDxjb25zdCB2b2lkKj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkpKSBsZW5ndGg6ZGF0YVJlZmVy
ZW5jZS5zaXplKCkgZnJlZVdoZW5Eb25lOk5PXSk7CisgICAgYXV0byB1bmFyY2hpdmVyID0gYWRv
cHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ1dpdGhEYXRhOmRh
dGEuZ2V0KCldKTsKKyAgICBbdW5hcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNd
OworICAgIEB0cnkgeworICAgICAgICBQS0NvbnRhY3QgKnBrQ29udGFjdCA9IFt1bmFyY2hpdmVy
IGRlY29kZU9iamVjdE9mQ2xhc3M6Z2V0UEtDb250YWN0Q2xhc3MoKSBmb3JLZXk6TlNLZXllZEFy
Y2hpdmVSb290T2JqZWN0S2V5XTsKKyAgICAgICAgcGF5bWVudENvbnRhY3QgPSBQYXltZW50Q29u
dGFjdChwa0NvbnRhY3QpOworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBQS0NvbnRhY3Q6ICVAIiwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFt1bmFyY2hpdmVy
IGZpbmlzaERlY29kaW5nXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJiBwYXlt
ZW50TWVyY2hhbnRTZXNzaW9uKQoreworICAgIGVuY29kZXIgPDwgcGF5bWVudE1lcmNoYW50U2Vz
c2lvbi5tZXJjaGFudElkZW50aWZpZXI7CisgICAgZW5jb2RlciA8PCBwYXltZW50TWVyY2hhbnRT
ZXNzaW9uLnNlc3Npb25JZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgcGF5bWVudE1lcmNoYW50
U2Vzc2lvbi5ub25jZTsKKyAgICBlbmNvZGVyIDw8IHBheW1lbnRNZXJjaGFudFNlc3Npb24uZG9t
YWluTmFtZTsKKyAgICBlbmNvZGVyIDw8IHBheW1lbnRNZXJjaGFudFNlc3Npb24uZXBvY2hUaW1l
c3RhbXA7CisgICAgZW5jb2RlciA8PCBwYXltZW50TWVyY2hhbnRTZXNzaW9uLnNpZ25hdHVyZTsK
K30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24+
OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpQYXltZW50TWVyY2hh
bnRTZXNzaW9uJiBwYXltZW50TWVyY2hhbnRTZXNzaW9uKQoreworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5tZXJjaGFudElkZW50aWZpZXIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXltZW50TWVyY2hhbnRT
ZXNzaW9uLnNlc3Npb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5ub25jZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBheW1lbnRNZXJjaGFudFNl
c3Npb24uZG9tYWluTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHBheW1lbnRNZXJjaGFudFNlc3Npb24uZXBvY2hUaW1lc3RhbXApKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXltZW50TWVyY2hhbnRT
ZXNzaW9uLnNpZ25hdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudE1ldGhvZD46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXRo
b2QmIHBheW1lbnRNZXRob2QpCit7CisgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJs
ZURhdGEgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5
ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQo
KV0pOworCisgICAgW2FyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisKKyAg
ICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0OnBheW1lbnRNZXRob2QucGtQYXltZW50TWV0aG9kKCkg
Zm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgW2FyY2hpdmVyIGZpbmlz
aEVuY29kaW5nXTsKKworICAgIGVuY29kZXIgPDwgRGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Cit9CisKK2Jvb2wg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWV0aG9kPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UGF5bWVudE1ldGhvZCYgcGF5bWVudE1ldGhvZCkKK3sK
KyAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihkYXRhUmVmZXJlbmNlLmRhdGEo
KSkpIGxlbmd0aDpkYXRhUmVmZXJlbmNlLnNpemUoKSBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICBh
dXRvIHVuYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZFVuYXJjaGl2ZXIgYWxsb2NdIGluaXRG
b3JSZWFkaW5nV2l0aERhdGE6ZGF0YS5nZXQoKV0pOworICAgIFt1bmFyY2hpdmVyIHNldFJlcXVp
cmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgQHRyeSB7CisgICAgICAgIFBLUGF5bWVudE1ldGhv
ZCAqcGtQYXltZW50TWV0aG9kID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpnZXRQ
S1BheW1lbnRNZXRob2RDbGFzcygpIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXld
OworICAgICAgICBwYXltZW50TWV0aG9kID0gUGF5bWVudE1ldGhvZChwa1BheW1lbnRNZXRob2Qp
OworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGRlY29kZSBQS1BheW1lbnQ6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFt1bmFyY2hpdmVyIGZpbmlzaERlY29kaW5n
XTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1
ZXN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGF5bWVudFJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0LmNvdW50cnlDb2RlKCk7Cisg
ICAgZW5jb2RlciA8PCByZXF1ZXN0LmN1cnJlbmN5Q29kZSgpOworICAgIGVuY29kZXIgPDwgcmVx
dWVzdC5yZXF1aXJlZEJpbGxpbmdBZGRyZXNzRmllbGRzKCk7CisgICAgZW5jb2RlciA8PCByZXF1
ZXN0LmJpbGxpbmdDb250YWN0KCk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0LnJlcXVpcmVkU2hp
cHBpbmdBZGRyZXNzRmllbGRzKCk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0LnNoaXBwaW5nQ29u
dGFjdCgpOworICAgIGVuY29kZXIgPDwgcmVxdWVzdC5tZXJjaGFudENhcGFiaWxpdGllcygpOwor
ICAgIGVuY29kZXIgPDwgcmVxdWVzdC5zdXBwb3J0ZWROZXR3b3JrcygpOworICAgIGVuY29kZXIu
ZW5jb2RlRW51bShyZXF1ZXN0LnNoaXBwaW5nVHlwZSgpKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVl
c3Quc2hpcHBpbmdNZXRob2RzKCk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0LmxpbmVJdGVtcygp
OworICAgIGVuY29kZXIgPDwgcmVxdWVzdC50b3RhbCgpOworICAgIGVuY29kZXIgPDwgcmVxdWVz
dC5hcHBsaWNhdGlvbkRhdGEoKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1
ZXN0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGF5bWVudFJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgU3RyaW5nIGNvdW50cnlDb2RlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoY291bnRyeUNvZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRD
b3VudHJ5Q29kZShjb3VudHJ5Q29kZSk7CisKKyAgICBTdHJpbmcgY3VycmVuY3lDb2RlOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY3VycmVuY3lDb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlcXVlc3Quc2V0Q3VycmVuY3lDb2RlKGN1cnJlbmN5Q29kZSk7CisKKyAgICBQYXlt
ZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxkcyByZXF1aXJlZEJpbGxpbmdBZGRyZXNzRmllbGRzOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKHJlcXVpcmVkQmlsbGluZ0FkZHJlc3NGaWVsZHMpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0UmVxdWlyZWRCaWxsaW5nQWRk
cmVzc0ZpZWxkcyhyZXF1aXJlZEJpbGxpbmdBZGRyZXNzRmllbGRzKTsKKworICAgIFBheW1lbnRD
b250YWN0IGJpbGxpbmdDb250YWN0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmlsbGluZ0Nv
bnRhY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRCaWxsaW5nQ29u
dGFjdChiaWxsaW5nQ29udGFjdCk7CisKKyAgICBQYXltZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxk
cyByZXF1aXJlZFNoaXBwaW5nQWRkcmVzc0ZpZWxkczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KChyZXF1aXJlZFNoaXBwaW5nQWRkcmVzc0ZpZWxkcykpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVxdWVzdC5zZXRSZXF1aXJlZFNoaXBwaW5nQWRkcmVzc0ZpZWxkcyhyZXF1aXJlZFNo
aXBwaW5nQWRkcmVzc0ZpZWxkcyk7CisKKyAgICBQYXltZW50Q29udGFjdCBzaGlwcGluZ0NvbnRh
Y3Q7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaGlwcGluZ0NvbnRhY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRTaGlwcGluZ0NvbnRhY3Qoc2hpcHBpbmdDb250
YWN0KTsKKworICAgIFBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyBtZXJjaGFu
dENhcGFiaWxpdGllczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lcmNoYW50Q2FwYWJpbGl0
aWVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0TWVyY2hhbnRDYXBh
YmlsaXRpZXMobWVyY2hhbnRDYXBhYmlsaXRpZXMpOworCisgICAgUGF5bWVudFJlcXVlc3Q6OlN1
cHBvcnRlZE5ldHdvcmtzIHN1cHBvcnRlZE5ldHdvcmtzOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3VwcG9ydGVkTmV0d29ya3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVz
dC5zZXRTdXBwb3J0ZWROZXR3b3JrcyhzdXBwb3J0ZWROZXR3b3Jrcyk7CisKKyAgICBQYXltZW50
UmVxdWVzdDo6U2hpcHBpbmdUeXBlIHNoaXBwaW5nVHlwZTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShzaGlwcGluZ1R5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVz
dC5zZXRTaGlwcGluZ1R5cGUoc2hpcHBpbmdUeXBlKTsKKworICAgIFZlY3RvcjxQYXltZW50UmVx
dWVzdDo6U2hpcHBpbmdNZXRob2Q+IHNoaXBwaW5nTWV0aG9kczsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHNoaXBwaW5nTWV0aG9kcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXF1
ZXN0LnNldFNoaXBwaW5nTWV0aG9kcyhzaGlwcGluZ01ldGhvZHMpOworCisgICAgVmVjdG9yPFBh
eW1lbnRSZXF1ZXN0OjpMaW5lSXRlbT4gbGluZUl0ZW1zOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobGluZUl0ZW1zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0TGlu
ZUl0ZW1zKGxpbmVJdGVtcyk7CisKKyAgICBQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0gdG90YWw7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b3RhbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXF1ZXN0LnNldFRvdGFsKHRvdGFsKTsKKworICAgIFN0cmluZyBhcHBsaWNhdGlvbkRh
dGE7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcHBsaWNhdGlvbkRhdGEpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRBcHBsaWNhdGlvbkRhdGEoYXBwbGljYXRpb25E
YXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8UGF5bWVu
dFJlcXVlc3Q6OkFkZHJlc3NGaWVsZHM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBQYXltZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxkcyYgYWRkcmVzc0ZpZWxkcykKK3sK
KyAgICBlbmNvZGVyIDw8IGFkZHJlc3NGaWVsZHMucG9zdGFsQWRkcmVzczsKKyAgICBlbmNvZGVy
IDw8IGFkZHJlc3NGaWVsZHMucGhvbmU7CisgICAgZW5jb2RlciA8PCBhZGRyZXNzRmllbGRzLmVt
YWlsOworICAgIGVuY29kZXIgPDwgYWRkcmVzc0ZpZWxkcy5uYW1lOworfQorCitib29sIEFyZ3Vt
ZW50Q29kZXI8UGF5bWVudFJlcXVlc3Q6OkFkZHJlc3NGaWVsZHM+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyJiBkZWNvZGVyLCBQYXltZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxkcyYgYWRkcmVzc0Zp
ZWxkcykKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFkZHJlc3NGaWVsZHMucG9zdGFsQWRk
cmVzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFk
ZHJlc3NGaWVsZHMucGhvbmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShhZGRyZXNzRmllbGRzLmVtYWlsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYWRkcmVzc0ZpZWxkcy5uYW1lKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxQ
YXltZW50UmVxdWVzdDo6TGluZUl0ZW0+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0mIGxpbmVJdGVtKQoreworICAgIGVuY29k
ZXIuZW5jb2RlRW51bShsaW5lSXRlbS50eXBlKTsKKyAgICBlbmNvZGVyIDw8IGxpbmVJdGVtLmxh
YmVsOworICAgIGVuY29kZXIgPDwgbGluZUl0ZW0uYW1vdW50OworfQorCitib29sIEFyZ3VtZW50
Q29kZXI8UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYg
ZGVjb2RlciwgUGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtJiBsaW5lSXRlbSkKK3sKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRW51bShsaW5lSXRlbS50eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGluZUl0ZW0ubGFiZWwpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsaW5lSXRlbS5hbW91bnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVu
dENvZGVyPFBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFi
aWxpdGllcyYgbWVyY2hhbnRDYXBhYmlsaXRpZXMpCit7CisgICAgZW5jb2RlciA8PCBtZXJjaGFu
dENhcGFiaWxpdGllcy5zdXBwb3J0czNEUzsKKyAgICBlbmNvZGVyIDw8IG1lcmNoYW50Q2FwYWJp
bGl0aWVzLnN1cHBvcnRzRU1WOworICAgIGVuY29kZXIgPDwgbWVyY2hhbnRDYXBhYmlsaXRpZXMu
c3VwcG9ydHNDcmVkaXQ7CisgICAgZW5jb2RlciA8PCBtZXJjaGFudENhcGFiaWxpdGllcy5zdXBw
b3J0c0RlYml0OworfQorCitib29sIEFyZ3VtZW50Q29kZXI8UGF5bWVudFJlcXVlc3Q6Ok1lcmNo
YW50Q2FwYWJpbGl0aWVzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGF5bWVu
dFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzJiBtZXJjaGFudENhcGFiaWxpdGllcykKK3sK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lcmNoYW50Q2FwYWJpbGl0aWVzLnN1cHBvcnRzM0RT
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVyY2hh
bnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNFTVYpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShtZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0c0NyZWRpdCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lcmNoYW50
Q2FwYWJpbGl0aWVzLnN1cHBvcnRzRGViaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpT
dXBwb3J0ZWROZXR3b3Jrcz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFBheW1lbnRSZXF1ZXN0OjpTdXBwb3J0ZWROZXR3b3JrcyYgc3VwcG9ydGVkTmV0d29ya3MpCit7
CisgICAgZW5jb2RlciA8PCBzdXBwb3J0ZWROZXR3b3Jrcy5hbWV4OworICAgIGVuY29kZXIgPDwg
c3VwcG9ydGVkTmV0d29ya3MuY2hpbmFVbmlvblBheTsKKyAgICBlbmNvZGVyIDw8IHN1cHBvcnRl
ZE5ldHdvcmtzLmRpc2NvdmVyOworICAgIGVuY29kZXIgPDwgc3VwcG9ydGVkTmV0d29ya3MuaW50
ZXJhYzsKKyAgICBlbmNvZGVyIDw8IHN1cHBvcnRlZE5ldHdvcmtzLm1hc3RlckNhcmQ7CisgICAg
ZW5jb2RlciA8PCBzdXBwb3J0ZWROZXR3b3Jrcy5wcml2YXRlTGFiZWw7CisgICAgZW5jb2RlciA8
PCBzdXBwb3J0ZWROZXR3b3Jrcy52aXNhOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8UGF5bWVu
dFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdvcmtzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgUGF5bWVudFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdvcmtzJiBzdXBwb3J0ZWROZXR3b3Jr
cykKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdvcmtzLmFtZXgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdXBwb3J0ZWRO
ZXR3b3Jrcy5jaGluYVVuaW9uUGF5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3VwcG9ydGVkTmV0d29ya3MuZGlzY292ZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdXBwb3J0ZWROZXR3b3Jrcy5pbnRl
cmFjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Vw
cG9ydGVkTmV0d29ya3MubWFzdGVyQ2FyZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdvcmtzLnByaXZhdGVMYWJlbCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdv
cmtzLnZpc2EpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFBheW1lbnRSZXF1ZXN0OjpTaGlw
cGluZ01ldGhvZCYgc2hpcHBpbmdNZXRob2QpCit7CisgICAgZW5jb2RlciA8PCBzaGlwcGluZ01l
dGhvZC5sYWJlbDsKKyAgICBlbmNvZGVyIDw8IHNoaXBwaW5nTWV0aG9kLmRldGFpbDsKKyAgICBl
bmNvZGVyIDw8IHNoaXBwaW5nTWV0aG9kLmFtb3VudDsKKyAgICBlbmNvZGVyIDw8IHNoaXBwaW5n
TWV0aG9kLmlkZW50aWZpZXI7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxQYXltZW50UmVxdWVz
dDo6U2hpcHBpbmdNZXRob2Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBQYXlt
ZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmIHNoaXBwaW5nTWV0aG9kKQoreworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2hpcHBpbmdNZXRob2QubGFiZWwpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaGlwcGluZ01ldGhvZC5kZXRhaWwpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaGlwcGluZ01ldGhv
ZC5hbW91bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzaGlwcGluZ01ldGhvZC5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8UGF5bWVudFJlcXVlc3Q6OlRv
dGFsQW5kTGluZUl0ZW1zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zJiB0b3RhbEFuZExpbmVJdGVtcykKK3sK
KyAgICBlbmNvZGVyIDw8IHRvdGFsQW5kTGluZUl0ZW1zLnRvdGFsOworICAgIGVuY29kZXIgPDwg
dG90YWxBbmRMaW5lSXRlbXMubGluZUl0ZW1zOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8UGF5
bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYg
ZGVjb2RlciwgUGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zJiB0b3RhbEFuZExpbmVJ
dGVtcykKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvdGFsQW5kTGluZUl0ZW1zLnRvdGFs
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodG90YWxB
bmRMaW5lSXRlbXMubGluZUl0ZW1zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvY29hL1dlYktpdEFkZGl0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2Nv
YS9XZWJLaXRBZGRpdGlvbnMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNWU4
NDVjMjAzZmFkZjU3ZDkwZTFhZTBlNGNhMTY5NDZhNGVhYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dl
YktpdEFkZGl0aW9ucy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0ICJjb25maWcuaCIKLQotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0j
aW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViS2l0QWRkaXRpb25zLm1tPgotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTRmMTFjZGU0MDllMWUwOTY3
YzlkYzhmOGEzYmRiM2MyNjc0OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcApAQCAtMCww
ICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oIgorCisjaWYgRU5BQkxFKEFQUExFX1BB
WSkKKworI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBheW1lbnRDb29y
ZGluYXRvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eShX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQ
cm94eSkKKyAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OklkbGUpCisgICAgLCBtX21lcmNoYW50VmFsaWRhdGlvblN0YXRlKE1lcmNoYW50VmFsaWRhdGlv
blN0YXRlOjpJZGxlKQoreworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5Ojp+V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkoKQorewor
ICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpJZGxlKQorICAgICAgICBoaWRlUGF5bWVudFVJKCk7
CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHk6OmNhbk1ha2VQYXltZW50cyhib29sJiByZXBseSkKK3sKKyAgICByZXBseSA9IHBs
YXRmb3JtQ2FuTWFrZVBheW1lbnRzKCk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHk6OmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYgbWVyY2hh
bnRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbk5hbWUsIHVpbnQ2NF90IHJlcXVlc3RJ
RCkKK3sKKyAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRy
KCk7CisgICAgcGxhdGZvcm1DYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChtZXJjaGFudElk
ZW50aWZpZXIsIGRvbWFpbk5hbWUsIFt3ZWFrVGhpcywgcmVxdWVzdElEXShib29sIGNhbk1ha2VQ
YXltZW50cykgeworICAgICAgICBhdXRvIHBheW1lbnRDb29yZGluYXRvclByb3h5ID0gd2Vha1Ro
aXMuZ2V0KCk7CisgICAgICAgIGlmICghcGF5bWVudENvb3JkaW5hdG9yUHJveHkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgcGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fd2ViUGFn
ZVByb3h5LnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvcjo6Q2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmRSZXBseShyZXF1ZXN0SUQsIGNhbk1ha2VQYXltZW50cykpOworICAg
IH0pOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVudFVJ
KGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBsaW5rSWNvblVSTFN0cmluZ3MsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0JiBwYXlt
ZW50UmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGEgbWVzc2FnZSBjaGVjay4K
KyAgICBBU1NFUlQoY2FuQmVnaW4oKSk7CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2YXRp
bmc7CisKKyAgICBXZWJDb3JlOjpVUkwgb3JpZ2luYXRpbmdVUkwoV2ViQ29yZTo6VVJMKCksIG9y
aWdpbmF0aW5nVVJMU3RyaW5nKTsKKworICAgIFZlY3RvcjxXZWJDb3JlOjpVUkw+IGxpbmtJY29u
VVJMczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDogbGlua0ljb25V
UkxTdHJpbmdzKQorICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFdlYkNvcmU6OlVSTChXZWJD
b3JlOjpVUkwoKSwgbGlua0ljb25VUkxTdHJpbmcpKTsKKworICAgIHBsYXRmb3JtU2hvd1BheW1l
bnRVSShvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVzdCwgW3RoaXNd
KGJvb2wgcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmF0
aW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGRpZENhbmNlbFBheW1l
bnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6QWN0aXZlOworICAgIH0pOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkRW51bShX
ZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cyBzdGF0dXMpCit7CisgICAgc3dpdGNo
IChzdGF0dXMpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVz
OjpTdWNjZXNzOgorICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM6
OkZhaWx1cmU6CisgICAgY2FzZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6
SW52YWxpZEJpbGxpbmdQb3N0YWxBZGRyZXNzOgorICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1
dGhvcml6YXRpb25TdGF0dXM6OkludmFsaWRTaGlwcGluZ1Bvc3RhbEFkZHJlc3M6CisgICAgY2Fz
ZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6SW52YWxpZFNoaXBwaW5nQ29u
dGFjdDoKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpQSU5S
ZXF1aXJlZDoKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpQ
SU5JbmNvcnJlY3Q6CisgICAgY2FzZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1
czo6UElOTG9ja291dDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Ojpjb21wbGV0ZU1l
cmNoYW50VmFsaWRhdGlvbihjb25zdCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJiBw
YXltZW50TWVyY2hhbnRTZXNzaW9uKQoreworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUg
cGF5bWVudCBoYXMgYmVlbiBjYW5jZWxlZCBhbHJlYWR5LgorICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpJZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYSBNRVNTQUdFX0NIRUNLLgorICAgIEFTU0VSVChtX21lcmNoYW50VmFsaWRhdGlvblN0YXRl
ID09IE1lcmNoYW50VmFsaWRhdGlvblN0YXRlOjpWYWxpZGF0aW5nKTsKKworICAgIHBsYXRmb3Jt
Q29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudE1lcmNoYW50U2Vzc2lvbik7CisgICAg
bV9tZXJjaGFudFZhbGlkYXRpb25TdGF0ZSA9IE1lcmNoYW50VmFsaWRhdGlvblN0YXRlOjpWYWxp
ZGF0aW9uQ29tcGxldGU7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmNv
bXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24odWludDMyX3Qgb3BhcXVlU3RhdHVzLCBjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+JiBu
ZXdUb3RhbEFuZExpbmVJdGVtcykKK3sKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHBh
eW1lbnQgaGFzIGJlZW4gY2FuY2VsZWQgYWxyZWFkeS4KKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6SWRsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGEgTUVTU0FHRV9DSEVDSy4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6U2hpcHBpbmdN
ZXRob2RTZWxlY3RlZCk7CisKKyAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzPihvcGFxdWVTdGF0dXMpOworCisgICAgLy8gRklY
TUU6IE1ha2UgdGhpcyBhIG1lc3NhZ2UgY2hlY2suCisgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxp
ZEVudW0oc3RhdHVzKSk7CisKKyAgICBwbGF0Zm9ybUNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxl
Y3Rpb24oc3RhdHVzLCBuZXdUb3RhbEFuZExpbmVJdGVtcyk7CisgICAgbV9zdGF0ZSA9IFN0YXRl
OjpBY3RpdmU7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmNvbXBsZXRl
U2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHVpbnQzMl90IG9wYXF1ZVN0YXR1cywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD4mIG5ld1NoaXBwaW5n
TWV0aG9kcywgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5k
TGluZUl0ZW1zPiYgbmV3VG90YWxBbmRMaW5lSXRlbXMpCit7CisgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHRoZSBwYXltZW50IGhhcyBiZWVuIGNhbmNlbGVkIGFscmVhZHkuCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OklkbGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBhIE1FU1NBR0VfQ0hFQ0suCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3Rh
dGU6OlNoaXBwaW5nQ29udGFjdFNlbGVjdGVkKTsKKworICAgIGF1dG8gc3RhdHVzID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM+KG9wYXF1ZVN0YXR1cyk7
CisKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGEgbWVzc2FnZSBjaGVjay4KKyAgICBSRUxFQVNF
X0FTU0VSVChpc1ZhbGlkRW51bShzdGF0dXMpKTsKKworICAgIHBsYXRmb3JtQ29tcGxldGVTaGlw
cGluZ0NvbnRhY3RTZWxlY3Rpb24oc3RhdHVzLCBuZXdTaGlwcGluZ01ldGhvZHMsIG5ld1RvdGFs
QW5kTGluZUl0ZW1zKTsKKyAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKK30KKwordm9pZCBX
ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6Y29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9u
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVt
cz4mIG5ld1RvdGFsQW5kTGluZUl0ZW1zKQoreworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0
aGUgcGF5bWVudCBoYXMgYmVlbiBjYW5jZWxlZCBhbHJlYWR5LgorICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpJZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSBNRVNTQUdFX0NIRUNLLgorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpQYXlt
ZW50TWV0aG9kU2VsZWN0ZWQpOworCisgICAgcGxhdGZvcm1Db21wbGV0ZVBheW1lbnRNZXRob2RT
ZWxlY3Rpb24obmV3VG90YWxBbmRMaW5lSXRlbXMpOworICAgIG1fc3RhdGUgPSBTdGF0ZTo6QWN0
aXZlOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Ojpjb21wbGV0ZVBheW1l
bnRTZXNzaW9uKHVpbnQzMl90IG9wYXF1ZVN0YXR1cykKK3sKKyAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhlIHBheW1lbnQgaGFzIGJlZW4gY2FuY2VsZWQgYWxyZWFkeS4KKyAgICBpZiAoIWNh
bkNvbXBsZXRlUGF5bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHN0YXR1cyA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzPihvcGFxdWVT
dGF0dXMpOworCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIG1lc3NhZ2UgY2hlY2suCisgICAg
UkVMRUFTRV9BU1NFUlQoaXNWYWxpZEVudW0oc3RhdHVzKSk7CisKKyAgICBwbGF0Zm9ybUNvbXBs
ZXRlUGF5bWVudFNlc3Npb24oc3RhdHVzKTsKKworICAgIGRpZFJlYWNoRmluYWxTdGF0ZSgpOwor
fQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjphYm9ydFBheW1lbnRTZXNzaW9u
KCkKK3sKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHBheW1lbnQgaGFzIGJlZW4gY2Fu
Y2VsZWQgYWxyZWFkeS4KKyAgICBpZiAoIWNhbkFib3J0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGhpZGVQYXltZW50VUkoKTsKKworICAgIGRpZFJlYWNoRmluYWxTdGF0ZSgpOworfQorCit2
b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpkaWRDYW5jZWxQYXltZW50KCkKK3sKKyAg
ICBBU1NFUlQoY2FuQ2FuY2VsKCkpOworCisgICAgbV93ZWJQYWdlUHJveHkuc2VuZChNZXNzYWdl
czo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpEaWRDYW5jZWxQYXltZW50KCkpOworCisgICAgZGlk
UmVhY2hGaW5hbFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OnZhbGlkYXRlTWVyY2hhbnQoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwpCit7CisgICAgQVNTRVJU
KG1fbWVyY2hhbnRWYWxpZGF0aW9uU3RhdGUgPT0gTWVyY2hhbnRWYWxpZGF0aW9uU3RhdGU6Oklk
bGUpOworCisgICAgbV9tZXJjaGFudFZhbGlkYXRpb25TdGF0ZSA9IE1lcmNoYW50VmFsaWRhdGlv
blN0YXRlOjpWYWxpZGF0aW5nOworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6Oldl
YlBheW1lbnRDb29yZGluYXRvcjo6VmFsaWRhdGVNZXJjaGFudCh1cmwuc3RyaW5nKCkpKTsKK30K
Kwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6ZGlkQXV0aG9yaXplUGF5bWVudChj
b25zdCBXZWJDb3JlOjpQYXltZW50JiBwYXltZW50KQoreworICAgIG1fc3RhdGUgPSBTdGF0ZTo6
QXV0aG9yaXplZDsKKyAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50
Q29vcmRpbmF0b3I6OkRpZEF1dGhvcml6ZVBheW1lbnQocGF5bWVudCkpOworfQorCit2b2lkIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5OjpkaWRTZWxlY3RTaGlwcGluZ01ldGhvZChjb25zdCBX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmIHNoaXBwaW5nTWV0aG9kKQor
eworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUpOworCisgICAgbV9zdGF0ZSA9
IFN0YXRlOjpTaGlwcGluZ01ldGhvZFNlbGVjdGVkOworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQo
TWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvcjo6RGlkU2VsZWN0U2hpcHBpbmdNZXRob2Qo
c2hpcHBpbmdNZXRob2QpKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6
ZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0KGNvbnN0IFdlYkNvcmU6OlBheW1lbnRDb250YWN0JiBz
aGlwcGluZ0NvbnRhY3QpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkFjdGl2ZSk7
CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlNoaXBwaW5nQ29udGFjdFNlbGVjdGVkOworICAgIG1f
d2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvcjo6RGlkU2Vs
ZWN0U2hpcHBpbmdDb250YWN0KHNoaXBwaW5nQ29udGFjdCkpOworfQorCit2b2lkIFdlYlBheW1l
bnRDb29yZGluYXRvclByb3h5OjpkaWRTZWxlY3RQYXltZW50TWV0aG9kKGNvbnN0IFdlYkNvcmU6
OlBheW1lbnRNZXRob2QmIHBheW1lbnRNZXRob2QpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0g
U3RhdGU6OkFjdGl2ZSk7CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlBheW1lbnRNZXRob2RTZWxl
Y3RlZDsKKyAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRp
bmF0b3I6OkRpZFNlbGVjdFBheW1lbnRNZXRob2QocGF5bWVudE1ldGhvZCkpOworfQorCitib29s
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpjYW5CZWdpbigpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhdGU6OklkbGU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBjYXNlIFN0YXRlOjpBY3RpdmF0aW5nOgorICAgICAgICBj
YXNlIFN0YXRlOjpBY3RpdmU6CisgICAgICAgIGNhc2UgU3RhdGU6OkF1dGhvcml6ZWQ6CisgICAg
ICAgIGNhc2UgU3RhdGU6OlNoaXBwaW5nTWV0aG9kU2VsZWN0ZWQ6CisgICAgICAgIGNhc2UgU3Rh
dGU6OlNoaXBwaW5nQ29udGFjdFNlbGVjdGVkOgorICAgICAgICBjYXNlIFN0YXRlOjpQYXltZW50
TWV0aG9kU2VsZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpjYW5DYW5jZWwoKSBjb25zdAoreworICAg
IHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRlOjpBY3RpdmF0aW5nOgorICAg
ICAgICBjYXNlIFN0YXRlOjpBY3RpdmU6CisgICAgICAgIGNhc2UgU3RhdGU6OkF1dGhvcml6ZWQ6
CisgICAgICAgIGNhc2UgU3RhdGU6OlNoaXBwaW5nTWV0aG9kU2VsZWN0ZWQ6CisgICAgICAgIGNh
c2UgU3RhdGU6OlNoaXBwaW5nQ29udGFjdFNlbGVjdGVkOgorICAgICAgICBjYXNlIFN0YXRlOjpQ
YXltZW50TWV0aG9kU2VsZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBjYXNlIFN0YXRlOjpJZGxlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6Y2FuQ29tcGxldGVQYXltZW50KCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6QXV0
aG9yaXplZDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGNhc2UgU3RhdGU6
OklkbGU6CisgICAgICAgIGNhc2UgU3RhdGU6OkFjdGl2YXRpbmc6CisgICAgICAgIGNhc2UgU3Rh
dGU6OkFjdGl2ZToKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2hpcHBpbmdNZXRob2RTZWxlY3RlZDoK
KyAgICAgICAgY2FzZSBTdGF0ZTo6U2hpcHBpbmdDb250YWN0U2VsZWN0ZWQ6CisgICAgICAgIGNh
c2UgU3RhdGU6OlBheW1lbnRNZXRob2RTZWxlY3RlZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmNhbkFib3J0
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6
QWN0aXZhdGluZzoKKyAgICAgICAgY2FzZSBTdGF0ZTo6QWN0aXZlOgorICAgICAgICBjYXNlIFN0
YXRlOjpBdXRob3JpemVkOgorICAgICAgICBjYXNlIFN0YXRlOjpTaGlwcGluZ01ldGhvZFNlbGVj
dGVkOgorICAgICAgICBjYXNlIFN0YXRlOjpTaGlwcGluZ0NvbnRhY3RTZWxlY3RlZDoKKyAgICAg
ICAgY2FzZSBTdGF0ZTo6UGF5bWVudE1ldGhvZFNlbGVjdGVkOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6SWRsZToKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmRpZFJl
YWNoRmluYWxTdGF0ZSgpCit7CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpJZGxlOworICAgIG1fbWVy
Y2hhbnRWYWxpZGF0aW9uU3RhdGUgPSBNZXJjaGFudFZhbGlkYXRpb25TdGF0ZTo6SWRsZTsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMy
ZDYxZTNmMGZlOTRmOWZhZTIwM2YzZGYzMjRhM2M0NzIzZDgyMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoQVBQTEVfUEFZKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9QYXltZW50SGVhZGVycy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworZW51bSBjbGFzcyBQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czsKK2NsYXNzIFBh
eW1lbnQ7CitjbGFzcyBQYXltZW50Q29udGFjdDsKK2NsYXNzIFBheW1lbnRNZXRob2Q7CitjbGFz
cyBVUkw7CitzdHJ1Y3QgUGF5bWVudE1lcmNoYW50U2Vzc2lvbjsKK30KKworT0JKQ19DTEFTUyBO
U1dpbmRvdzsKK09CSkNfQ0xBU1MgUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVy
OworT0JKQ19DTEFTUyBXS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3Mg
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eShXZWJQ
YWdlUHJveHkmKTsKKyAgICB+V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkoKTsKKworICAgIHZv
aWQgZGlkQ2FuY2VsUGF5bWVudCgpOworICAgIHZvaWQgdmFsaWRhdGVNZXJjaGFudChjb25zdCBX
ZWJDb3JlOjpVUkwmKTsKKyAgICB2b2lkIGRpZEF1dGhvcml6ZVBheW1lbnQoY29uc3QgV2ViQ29y
ZTo6UGF5bWVudCYpOworICAgIHZvaWQgZGlkU2VsZWN0U2hpcHBpbmdNZXRob2QoY29uc3QgV2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kJik7CisgICAgdm9pZCBkaWRTZWxl
Y3RTaGlwcGluZ0NvbnRhY3QoY29uc3QgV2ViQ29yZTo6UGF5bWVudENvbnRhY3QmKTsKKyAgICB2
b2lkIGRpZFNlbGVjdFBheW1lbnRNZXRob2QoY29uc3QgV2ViQ29yZTo6UGF5bWVudE1ldGhvZCYp
OworCisgICAgdm9pZCBoaWRlUGF5bWVudFVJKCk7CisKK3ByaXZhdGU6CisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpIG92ZXJyaWRlOworCisgICAgLy8gTWVz
c2FnZSBoYW5kbGVycy4KKyAgICB2b2lkIGNhbk1ha2VQYXltZW50cyhib29sJiByZXBseSk7Cisg
ICAgdm9pZCBjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChjb25zdCBTdHJpbmcmIG1lcmNo
YW50SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkb21haW5OYW1lLCB1aW50NjRfdCByZXF1ZXN0
SUQpOworICAgIHZvaWQgc2hvd1BheW1lbnRVSShjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJM
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGlua0ljb25VUkxTdHJpbmdzLCBjb25zdCBX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdCYpOworICAgIHZvaWQgY29tcGxldGVNZXJjaGFudFZhbGlk
YXRpb24oY29uc3QgV2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYpOworICAgIHZvaWQg
Y29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbih1aW50MzJfdCBvcGFxdWVTdGF0dXMsIGNv
bnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4m
KTsKKyAgICB2b2lkIGNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHVpbnQzMl90IG9w
YXF1ZVN0YXR1cywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGlu
Z01ldGhvZD4mIG5ld1NoaXBwaW5nTWV0aG9kcywgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6UGF5
bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiYpOworICAgIHZvaWQgY29tcGxldGVQYXlt
ZW50TWV0aG9kU2VsZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0
OjpUb3RhbEFuZExpbmVJdGVtcz4mKTsKKyAgICB2b2lkIGNvbXBsZXRlUGF5bWVudFNlc3Npb24o
dWludDMyX3Qgb3BhcXVlU3RhdHVzKTsKKyAgICB2b2lkIGFib3J0UGF5bWVudFNlc3Npb24oKTsK
KworICAgIGJvb2wgY2FuQmVnaW4oKSBjb25zdDsKKyAgICBib29sIGNhbkNhbmNlbCgpIGNvbnN0
OworICAgIGJvb2wgY2FuQ29tcGxldGVQYXltZW50KCkgY29uc3Q7CisgICAgYm9vbCBjYW5BYm9y
dCgpIGNvbnN0OworCisgICAgdm9pZCBkaWRSZWFjaEZpbmFsU3RhdGUoKTsKKworICAgIGJvb2wg
cGxhdGZvcm1DYW5NYWtlUGF5bWVudHMoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmQoY29uc3QgU3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZG9tYWluTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxldGlv
bkhhbmRsZXIpOworICAgIHZvaWQgcGxhdGZvcm1TaG93UGF5bWVudFVJKGNvbnN0IFdlYkNvcmU6
OlVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpVUkw+JiBsaW5rSWNv
blVSTHMsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lk
IChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgcGxhdGZvcm1Db21wbGV0ZU1l
cmNoYW50VmFsaWRhdGlvbihjb25zdCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJik7
CisgICAgdm9pZCBwbGF0Zm9ybUNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24oV2ViQ29y
ZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBh
eW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29t
cGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdN
ZXRob2Q+JiBuZXdTaGlwcGluZ01ldGhvZHMsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29tcGxl
dGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29tcGxldGVQ
YXltZW50U2Vzc2lvbihXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cyk7CisKKyAg
ICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OworICAgIFdlYWtQdHJGYWN0b3J5PFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5PiBtX3dlYWtQdHJGYWN0b3J5OworCisgICAgZW51bSBjbGFz
cyBTdGF0ZSB7CisgICAgICAgIC8vIElkbGUgLSBOb3RoaW5nJ3MgaGFwcGVuaW5nLgorICAgICAg
ICBJZGxlLAorCisgICAgICAgIC8vIEFjdGl2YXRpbmcgLSBXYWl0aW5nIHRvIHNob3cgdGhlIHBh
eW1lbnQgVUkuCisgICAgICAgIEFjdGl2YXRpbmcsCisKKyAgICAgICAgLy8gQWN0aXZlIC0gU2hv
d2luZyBwYXltZW50IFVJLgorICAgICAgICBBY3RpdmUsCisKKyAgICAgICAgLy8gQXV0aG9yaXpl
ZCAtIERpc3BhdGNoaW5nIHRoZSBhdXRob3JpemVkIGV2ZW50IGFuZCB3YWl0aW5nIGZvciB0aGUg
cGF5bWVudFNlc3Npb25Db21wbGV0ZWQgbWVzc2FnZS4KKyAgICAgICAgQXV0aG9yaXplZCwKKwor
ICAgICAgICAvLyBTaGlwcGluZ01ldGhvZFNlbGVjdGVkIC0gRGlzcGF0Y2hpbmcgdGhlIHNoaXBw
aW5nbWV0aG9kc2VsZWN0ZWQgZXZlbnQgYW5kIHdhaXRpbmcgZm9yIGEgcmVwbHkuCisgICAgICAg
IFNoaXBwaW5nTWV0aG9kU2VsZWN0ZWQsCisKKyAgICAgICAgLy8gU2hpcHBpbmdDb250YWN0U2Vs
ZWN0ZWQgLSBEaXNwYXRjaGluZyB0aGUgc2hpcHBpbmdjb250YWN0c2VsZWN0ZWQgZXZlbnQgYW5k
IHdhaXRpbmcgZm9yIGEgcmVwbHkuCisgICAgICAgIFNoaXBwaW5nQ29udGFjdFNlbGVjdGVkLAor
CisgICAgICAgIC8vIFBheW1lbnRNZXRob2RTZWxlY3RlZCAtIERpc3BhdGNoaW5nIHRoZSBwYXlt
ZW50bWV0aG9kc2VsZWN0ZWQgZXZlbnQgYW5kIHdhaXRpbmcgZm9yIGEgcmVwbHkuCisgICAgICAg
IFBheW1lbnRNZXRob2RTZWxlY3RlZCwKKyAgICB9IG1fc3RhdGU7CisKKyAgICBlbnVtIGNsYXNz
IE1lcmNoYW50VmFsaWRhdGlvblN0YXRlIHsKKyAgICAgICAgLy8gSWRsZSAtIE5vdGhpbmcncyBo
YXBwZW5pbmcuCisgICAgICAgIElkbGUsCisKKyAgICAgICAgLy8gVmFsaWRhdGluZyAtIERpc3Bh
dGNoaW5nIHRoZSB2YWxpZGF0ZW1lcmNoYW50IGV2ZW50IGFuZCB3YWl0aW5nIGZvciBhIHJlcGx5
LgorICAgICAgICBWYWxpZGF0aW5nLAorCisgICAgICAgIC8vIFZhbGlkYXRpb25Db21wbGV0ZSAt
IEEgbWVyY2hhbnQgc2Vzc2lvbiBoYXMgYmVlbiBzZW50IGFsb25nIHRvIFBhc3NLaXQuCisgICAg
ICAgIFZhbGlkYXRpb25Db21wbGV0ZQorICAgIH0gbV9tZXJjaGFudFZhbGlkYXRpb25TdGF0ZTsK
KworICAgIFJldGFpblB0cjxQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXI+IG1f
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V0tQYXlt
ZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGF5bWVudEF1dGhvcml6
YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHVp
bnQ2NF90IG1fc2hvd1BheW1lbnRVSVJlcXVlc3RTZWVkIHsgMCB9OworICAgIFJldGFpblB0cjxO
U1dpbmRvdz4gbV9zaGVldFdpbmRvdzsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBh
eS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mzhj
YjVkYjIwYTIwN2JmN2RiMWZjZGVjYzRhYTE0YTJhMjg4MDdhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisjLworCisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworbWVzc2FnZXMgLT4g
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgeworCisgICAgQ2FuTWFrZVBheW1lbnRzKCkgLT4g
KGJvb2wgcmVzdWx0KQorICAgIENhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKFN0cmluZyBt
ZXJjaGFudElkZW50aWZpZXIsIFN0cmluZyBkb21haW5OYW1lLCB1aW50NjRfdCByZXF1ZXN0SUQp
CisKKyAgICBTaG93UGF5bWVudFVJKFN0cmluZyBvcmlnaW5hdGluZ1VSTFN0cmluZywgVmVjdG9y
PFN0cmluZz4gbGlua0ljb25VUkxTdHJpbmdzLCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCBwYXlt
ZW50UmVxdWVzdCkKKyAgICBDb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihzdHJ1Y3QgV2ViQ29y
ZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiBwYXltZW50TWVyY2hhbnRTZXNzaW9uKTsKKyAgICBD
b21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHVpbnQzMl90IG9wYXF1ZVN0YXR1cywgT3B0
aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiBuZXdUb3Rh
bEFuZEl0ZW1zKQorICAgIENvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHVpbnQzMl90
IG9wYXF1ZVN0YXR1cywgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01l
dGhvZD4gbmV3U2hpcHBpbmdNZXRob2RzLCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVz
dDo6VG90YWxBbmRMaW5lSXRlbXM+IG5ld1RvdGFsQW5kSXRlbXMpCisgICAgQ29tcGxldGVQYXlt
ZW50TWV0aG9kU2VsZWN0aW9uKE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3Rh
bEFuZExpbmVJdGVtcz4gbmV3VG90YWxBbmRJdGVtcykKKyAgICBDb21wbGV0ZVBheW1lbnRTZXNz
aW9uKHVpbnQzMl90IG9wYXF1ZVN0YXR1cykKKyAgICBBYm9ydFBheW1lbnRTZXNzaW9uKCkKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkv
Y29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2Eu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNDQ5OWMxNDU2NzYxZmZhNjI4MDU1OWJkMDVlOGI5ZjA3OWQ4Njc1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29h
L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaApAQCAtMCwwICsxLDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorCisjaW1wb3J0
IDxQYXNzS2l0L1BLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlci5oPgorI2ltcG9y
dCA8UGFzc0tpdC9QS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9QYXltZW50SGVhZGVycy5oPgorI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CitjbGFzcyBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTsKKworUmV0YWluUHRy
PFBLUGF5bWVudFJlcXVlc3Q+IHRvUEtQYXltZW50UmVxdWVzdChjb25zdCBXZWJDb3JlOjpVUkwm
IG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VVJMPiYgbGlua0ljb25VUkxz
LCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpOworCit9CisK
K0BpbnRlcmZhY2UgV0tQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUg
OiBOU09iamVjdCA8UEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUs
IFBLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlclByaXZhdGVEZWxlZ2F0ZT4gewor
QHBhY2thZ2UKKyAgICBXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5KiBfd2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHk7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9wYXltZW50U3Vt
bWFyeUl0ZW1zOworICAgIFJldGFpblB0cjxOU0FycmF5PiBfc2hpcHBpbmdNZXRob2RzOworCisg
ICAgQmxvY2tQdHI8dm9pZCAoUEtQYXltZW50TWVyY2hhbnRTZXNzaW9uICosIE5TRXJyb3IgKik+
IF9zZXNzaW9uQmxvY2s7CisKKyAgICBCT09MIF9hdXRob3JpemVkOworICAgIEJsb2NrUHRyPHZv
aWQgKFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMpPiBfcGF5bWVudEF1dGhvcml6ZWRDb21w
bGV0aW9uOworICAgIEJsb2NrUHRyPHZvaWQgKE5TQXJyYXkgKik+IF9kaWRTZWxlY3RQYXltZW50
TWV0aG9kQ29tcGxldGlvbjsKKyAgICBCbG9ja1B0cjx2b2lkIChQS1BheW1lbnRBdXRob3JpemF0
aW9uU3RhdHVzLCBOU0FycmF5ICopPiBfZGlkU2VsZWN0U2hpcHBpbmdNZXRob2RDb21wbGV0aW9u
OworICAgIEJsb2NrUHRyPHZvaWQgKFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMsIE5TQXJy
YXkgKiwgTlNBcnJheSAqKT4gX2RpZFNlbGVjdFNoaXBwaW5nQ29udGFjdENvbXBsZXRpb247Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheW1lbnRDb29yZGluYXRvclByb3h5OihXZWJL
aXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5Jil3ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eTsKKworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvY29j
b2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzVjZGMw
ZjUzNWYzOTNlZTBiMDAwMzQ0ZmIwNzJlMTc2ZDhmOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRv
clByb3h5Q29jb2EubW0KQEAgLTAsMCArMSw1MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5oIgor
CisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworI2ltcG9ydCAiV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudEhlYWRlcnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29m
dExpbmtpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDx3dGYvUnVuTG9v
cC5oPgorI2ltcG9ydCA8UGFzc0tpdC9QS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xs
ZXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8UGFzc0tpdENvcmUvUEtQYXltZW50TWVyY2hhbnRTZXNz
aW9uLmg+CisKKyNpZiBQTEFURk9STShNQUMpCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUkso
UGFzc0tpdCkKKyNlbHNlCitTT0ZUX0xJTktfRlJBTUVXT1JLKFBhc3NLaXQpCisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKE1BQykKKy8vIEZJWE1FOiBPbmNlIDxyZGFyOi8vcHJvYmxlbS8yNjA3NDg1
MT4gaGFzIGJlZW4gZml4ZWQgd2Ugbm8gbG9uZ2VyCisvLyBoYXZlIHRvIGZhbGwgYmFjayB0byBQ
S0luQXBwUGF5bWVudFNlcnZpY2UuCisjaW1wb3J0IDxQYXNzS2l0Q29yZS9QS0luQXBwUGF5bWVu
dFNlcnZpY2UuaD4KK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS0luQXBwUGF5bWVudFNlcnZp
Y2UpCisjZW5kaWYKKworU09GVF9MSU5LX0NMQVNTKFBhc3NLaXQsIFBLUGF5bWVudEF1dGhvcml6
YXRpb25WaWV3Q29udHJvbGxlcik7CitTT0ZUX0xJTktfQ0xBU1MoUGFzc0tpdCwgUEtQYXltZW50
TWVyY2hhbnRTZXNzaW9uKTsKK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRSZXF1
ZXN0KTsKK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRTdW1tYXJ5SXRlbSk7CitT
T0ZUX0xJTktfQ0xBU1MoUGFzc0tpdCwgUEtTaGlwcGluZ01ldGhvZCk7CitTT0ZUX0xJTktfQ09O
U1RBTlQoUGFzc0tpdCwgUEtQYXltZW50TmV0d29ya0FtZXgsIE5TU3RyaW5nICopOworU09GVF9M
SU5LX0NPTlNUQU5UKFBhc3NLaXQsIFBLUGF5bWVudE5ldHdvcmtDaGluYVVuaW9uUGF5LCBOU1N0
cmluZyAqKTsKK1NPRlRfTElOS19DT05TVEFOVChQYXNzS2l0LCBQS1BheW1lbnROZXR3b3JrRGlz
Y292ZXIsIE5TU3RyaW5nICopOworU09GVF9MSU5LX0NPTlNUQU5UKFBhc3NLaXQsIFBLUGF5bWVu
dE5ldHdvcmtJbnRlcmFjLCBOU1N0cmluZyAqKTsKK1NPRlRfTElOS19DT05TVEFOVChQYXNzS2l0
LCBQS1BheW1lbnROZXR3b3JrTWFzdGVyQ2FyZCwgTlNTdHJpbmcgKik7CitTT0ZUX0xJTktfQ09O
U1RBTlQoUGFzc0tpdCwgUEtQYXltZW50TmV0d29ya1ByaXZhdGVMYWJlbCwgTlNTdHJpbmcgKik7
CitTT0ZUX0xJTktfQ09OU1RBTlQoUGFzc0tpdCwgUEtQYXltZW50TmV0d29ya1Zpc2EsIE5TU3Ry
aW5nICopOworCit0eXBlZGVmIHZvaWQgKF5QS0Nhbk1ha2VQYXltZW50c0NvbXBsZXRpb24pKEJP
T0wgaXNWYWxpZCwgTlNFcnJvciAqZXJyb3IpOworZXh0ZXJuICJDIiB2b2lkIFBLQ2FuTWFrZVBh
eW1lbnRzV2l0aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbihOU1N0cmluZyAqaWRlbnRpZmll
ciwgTlNTdHJpbmcgKmRvbWFpbiwgUEtDYW5NYWtlUGF5bWVudHNDb21wbGV0aW9uIGNvbXBsZXRp
b24pOworCitTT0ZUX0xJTktfRlVOQ1RJT05fTUFZX0ZBSUxfRk9SX1NPVVJDRShXZWJLaXQsIFBh
c3NLaXQsIFBLQ2FuTWFrZVBheW1lbnRzV2l0aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbiwg
dm9pZCwgKE5TU3RyaW5nICppZGVudGlmaWVyLCBOU1N0cmluZyAqZG9tYWluLCBQS0Nhbk1ha2VQ
YXltZW50c0NvbXBsZXRpb24gY29tcGxldGlvbiksIChpZGVudGlmaWVyLCBkb21haW4sIGNvbXBs
ZXRpb24pKTsKKworQGltcGxlbWVudGF0aW9uIFdLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckRlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheW1lbnRDb29yZGlu
YXRvclByb3h5OihXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5Jil3ZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSA9
ICZ3ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgPSBu
dWxscHRyOworICAgIGlmIChfcGF5bWVudEF1dGhvcml6ZWRDb21wbGV0aW9uKSB7CisgICAgICAg
IF9wYXltZW50QXV0aG9yaXplZENvbXBsZXRpb24oUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1
c0ZhaWx1cmUpOworICAgICAgICBfcGF5bWVudEF1dGhvcml6ZWRDb21wbGV0aW9uID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKKy0gKHZvaWQpcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxl
cjooUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyICopY29udHJvbGxlciB3aWxs
RmluaXNoV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKK3sKK30KKworLSAodm9pZClwYXltZW50
QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyOihQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0Nv
bnRyb2xsZXIgKiljb250cm9sbGVyIGRpZFJlcXVlc3RNZXJjaGFudFNlc3Npb246KHZvaWQoXiko
UEtQYXltZW50TWVyY2hhbnRTZXNzaW9uICosIE5TRXJyb3IgKikpc2Vzc2lvbkJsb2NrCit7Cisg
ICAgQVNTRVJUKCFfc2Vzc2lvbkJsb2NrKTsKKyAgICBfc2Vzc2lvbkJsb2NrID0gc2Vzc2lvbkJs
b2NrOworCisgICAgW2dldFBLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckNsYXNz
KCkgcGF5bWVudFNlcnZpY2VzTWVyY2hhbnRVUkw6XihOU1VSTCAqbWVyY2hhbnRVUkwsIE5TRXJy
b3IgKmVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIExPR19FUlJPUigi
UEtDYW5NYWtlUGF5bWVudHNXaXRoTWVyY2hhbnRJZGVudGlmaWVyQW5kRG9tYWluIGVycm9yICVA
IiwgZXJyb3IpOworCisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgICAgICBBU1NFUlQoX3Nlc3Npb25CbG9jayk7CisKKyAgICAgICAg
ICAgIGlmICghX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5KSB7CisgICAgICAgICAgICAgICAg
X3Nlc3Npb25CbG9jayhudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eS0+dmFsaWRhdGVNZXJjaGFudChtZXJjaGFudFVSTCk7CisgICAgICAgIH0pOworICAgIH1dOwor
fQorCistICh2b2lkKXBheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXI6KFBLUGF5bWVu
dEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgZGlkQXV0aG9yaXplUGF5
bWVudDooUEtQYXltZW50ICopcGF5bWVudCBjb21wbGV0aW9uOih2b2lkICheKShQS1BheW1lbnRB
dXRob3JpemF0aW9uU3RhdHVzKSljb21wbGV0aW9uCit7CisgICAgaWYgKCFfd2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHkpIHsKKyAgICAgICAgY29tcGxldGlvbihQS1BheW1lbnRBdXRob3JpemF0
aW9uU3RhdHVzRmFpbHVyZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQo
IV9wYXltZW50QXV0aG9yaXplZENvbXBsZXRpb24pOworICAgIF9wYXltZW50QXV0aG9yaXplZENv
bXBsZXRpb24gPSBjb21wbGV0aW9uOworCisgICAgX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5
LT5kaWRBdXRob3JpemVQYXltZW50KFdlYkNvcmU6OlBheW1lbnQocGF5bWVudCkpOworfQorCist
ICh2b2lkKXBheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEaWRGaW5pc2g6KFBLUGF5
bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKK3sKKyAgICBpZiAo
IV93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFfYXV0aG9yaXplZCkKKyAgICAgICAgX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LT5kaWRD
YW5jZWxQYXltZW50KCk7CisKKyAgICBfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHktPmhpZGVQ
YXltZW50VUkoKTsKK30KKworc3RhdGljIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGlu
Z01ldGhvZCB0b1NoaXBwaW5nTWV0aG9kKFBLU2hpcHBpbmdNZXRob2QgKnNoaXBwaW5nTWV0aG9k
KQoreworICAgIEFTU0VSVChzaGlwcGluZ01ldGhvZCk7CisKKyAgICBXZWJDb3JlOjpQYXltZW50
UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QgcmVzdWx0OworICAgIHJlc3VsdC5sYWJlbCA9IHNoaXBw
aW5nTWV0aG9kLmxhYmVsOworICAgIHJlc3VsdC5kZXRhaWwgPSBzaGlwcGluZ01ldGhvZC5kZXRh
aWw7CisgICAgcmVzdWx0LmFtb3VudCA9IFtzaGlwcGluZ01ldGhvZC5hbW91bnQgZGVjaW1hbE51
bWJlckJ5TXVsdGlwbHlpbmdCeVBvd2VyT2YxMDoyXS5pbnRlZ2VyVmFsdWU7CisgICAgcmVzdWx0
LmlkZW50aWZpZXIgPSBzaGlwcGluZ01ldGhvZC5pZGVudGlmaWVyOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLSAodm9pZClwYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyOihQ
S1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIGRpZFNlbGVj
dFNoaXBwaW5nTWV0aG9kOihQS1NoaXBwaW5nTWV0aG9kICopc2hpcHBpbmdNZXRob2QgY29tcGxl
dGlvbjoodm9pZCAoXikoUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cyBzdGF0dXMsIE5TQXJy
YXk8UEtQYXltZW50U3VtbWFyeUl0ZW0gKj4gKnN1bW1hcnlJdGVtcykpY29tcGxldGlvbgorewor
ICAgIGlmICghX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5KSB7CisgICAgICAgIGNvbXBsZXRp
b24oUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1c0ZhaWx1cmUsIEBbXSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoIV9kaWRTZWxlY3RTaGlwcGluZ01ldGhvZENvbXBs
ZXRpb24pOworICAgIF9kaWRTZWxlY3RTaGlwcGluZ01ldGhvZENvbXBsZXRpb24gPSBjb21wbGV0
aW9uOworICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS0+ZGlkU2VsZWN0U2hpcHBpbmdN
ZXRob2QodG9TaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCkpOworfQorCistICh2b2lkKXBh
eW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXI6KFBLUGF5bWVudEF1dGhvcml6YXRpb25W
aWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0OihQS0Nv
bnRhY3QgKiljb250YWN0IGNvbXBsZXRpb246KHZvaWQgKF4pKFBLUGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXMgc3RhdHVzLCBOU0FycmF5PFBLU2hpcHBpbmdNZXRob2QgKj4gKnNoaXBwaW5nTWV0
aG9kcywgTlNBcnJheTxQS1BheW1lbnRTdW1tYXJ5SXRlbSAqPiAqc3VtbWFyeUl0ZW1zKSljb21w
bGV0aW9uCit7CisgICAgaWYgKCFfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkpIHsKKyAgICAg
ICAgY29tcGxldGlvbihQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzRmFpbHVyZSwgQFtdLCBA
W10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCFfZGlkU2VsZWN0U2hp
cHBpbmdDb250YWN0Q29tcGxldGlvbik7CisgICAgX2RpZFNlbGVjdFNoaXBwaW5nQ29udGFjdENv
bXBsZXRpb24gPSBjb21wbGV0aW9uOworICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS0+
ZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0KFdlYkNvcmU6OlBheW1lbnRDb250YWN0KGNvbnRhY3Qp
KTsKK30KKworLSAodm9pZClwYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyOihQS1Bh
eW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyCisgICAgICAgICAg
ICAgICAgICAgIGRpZFNlbGVjdFBheW1lbnRNZXRob2Q6KFBLUGF5bWVudE1ldGhvZCAqKXBheW1l
bnRNZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjoodm9p
ZCAoXikoTlNBcnJheTxQS1BheW1lbnRTdW1tYXJ5SXRlbSAqPiAqc3VtbWFyeUl0ZW1zKSljb21w
bGV0aW9uCit7CisgICAgaWYgKCFfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkpIHsKKyAgICAg
ICAgY29tcGxldGlvbihAW10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
KCFfZGlkU2VsZWN0UGF5bWVudE1ldGhvZENvbXBsZXRpb24pOworICAgIF9kaWRTZWxlY3RQYXlt
ZW50TWV0aG9kQ29tcGxldGlvbiA9IGNvbXBsZXRpb247CisKKyAgICBfd2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHktPmRpZFNlbGVjdFBheW1lbnRNZXRob2QoV2ViQ29yZTo6UGF5bWVudE1ldGhv
ZChwYXltZW50TWV0aG9kKSk7Cit9CisKK0BlbmQKKworLy8gRklYTUU6IE9uY2UgcmRhcjovL3By
b2JsZW0vMjQ0MjAwMjQgaGFzIGJlZW4gZml4ZWQsIGltcG9ydCBQS1BheW1lbnRSZXF1ZXN0X1By
aXZhdGUuaCBpbnN0ZWFkLgorQGludGVyZmFjZSBQS1BheW1lbnRSZXF1ZXN0ICgpCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBOU1VSTCAqb3JpZ2luYXRpbmdVUkw7CitAZW5kCisKK0Bp
bnRlcmZhY2UgUEtQYXltZW50UmVxdWVzdCAoKQorLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ug
aXQncyBpbiBhbiBTREsuCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU0FycmF5ICp0
aHVtYm5haWxVUkxzOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNVUkwgKnRodW1i
bmFpbFVSTDsKKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9PTCBleHBlY3RzTWVy
Y2hhbnRTZXNzaW9uOworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1DYW5NYWtlUGF5bWVudHMoKQoreworICAgIHJl
dHVybiBbZ2V0UEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyQ2xhc3MoKSBjYW5N
YWtlUGF5bWVudHNdOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0
Zm9ybUNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbk5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
Ym9vbCk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghY2FuTG9hZF9QYXNzS2l0X1BL
Q2FuTWFrZVBheW1lbnRzV2l0aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbigpKSB7CisgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzb2Z0TGlua19QYXNzS2l0X1BLQ2FuTWFrZVBheW1lbnRzV2l0
aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbihtZXJjaGFudElkZW50aWZpZXIsIGRvbWFpbk5h
bWUsIFtjb21wbGV0aW9uSGFuZGxlcl0oQk9PTCBjYW5NYWtlUGF5bWVudHMsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIExPR19FUlJPUigiUEtDYW5N
YWtlUGF5bWVudHNXaXRoTWVyY2hhbnRJZGVudGlmaWVyQW5kRG9tYWluIGVycm9yICVAIiwgZXJy
b3IpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXIsIGNhbk1ha2VQYXltZW50c10geworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY2Fu
TWFrZVBheW1lbnRzKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBQS0FkZHJl
c3NGaWVsZCB0b1BLQWRkcmVzc0ZpZWxkKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpB
ZGRyZXNzRmllbGRzJiBhZGRyZXNzRmllbGRzKQoreworICAgIFBLQWRkcmVzc0ZpZWxkIHJlc3Vs
dCA9IDA7CisKKyAgICBpZiAoYWRkcmVzc0ZpZWxkcy5wb3N0YWxBZGRyZXNzKQorICAgICAgICBy
ZXN1bHQgfD0gUEtBZGRyZXNzRmllbGRQb3N0YWxBZGRyZXNzOworICAgIGlmIChhZGRyZXNzRmll
bGRzLnBob25lKQorICAgICAgICByZXN1bHQgfD0gUEtBZGRyZXNzRmllbGRQaG9uZTsKKyAgICBp
ZiAoYWRkcmVzc0ZpZWxkcy5lbWFpbCkKKyAgICAgICAgcmVzdWx0IHw9IFBLQWRkcmVzc0ZpZWxk
RW1haWw7CisgICAgaWYgKGFkZHJlc3NGaWVsZHMubmFtZSkKKyAgICAgICAgcmVzdWx0IHw9IFBL
QWRkcmVzc0ZpZWxkTmFtZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQS1Bh
eW1lbnRTdW1tYXJ5SXRlbVR5cGUgdG9QS1BheW1lbnRTdW1tYXJ5SXRlbVR5cGUoV2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtOjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtOjpUeXBl
OjpGaW5hbDoKKyAgICAgICAgICAgIHJldHVybiBQS1BheW1lbnRTdW1tYXJ5SXRlbVR5cGVGaW5h
bDsKKworICAgICAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpMaW5lSXRlbTo6VHlw
ZTo6UGVuZGluZzoKKyAgICAgICAgICAgIHJldHVybiBQS1BheW1lbnRTdW1tYXJ5SXRlbVR5cGVQ
ZW5kaW5nOworICAgIH0KK30KKworc3RhdGljIFJldGFpblB0cjxQS1BheW1lbnRTdW1tYXJ5SXRl
bT4gdG9QS1BheW1lbnRTdW1tYXJ5SXRlbShjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6
TGluZUl0ZW0mIGxpbmVJdGVtKQoreworICAgIGF1dG8gYW1vdW50ID0gYWRvcHROUyhbW05TRGVj
aW1hbE51bWJlciBhbGxvY10gaW5pdFdpdGhNYW50aXNzYTpsaW5lSXRlbS5hbW91bnQudmFsdWVP
cigwKSBleHBvbmVudDotMiBpc05lZ2F0aXZlOipsaW5lSXRlbS5hbW91bnQgPCAwXSk7CisKKyAg
ICByZXR1cm4gW2dldFBLUGF5bWVudFN1bW1hcnlJdGVtQ2xhc3MoKSBzdW1tYXJ5SXRlbVdpdGhM
YWJlbDpsaW5lSXRlbS5sYWJlbCBhbW91bnQ6YW1vdW50LmdldCgpIHR5cGU6dG9QS1BheW1lbnRT
dW1tYXJ5SXRlbVR5cGUobGluZUl0ZW0udHlwZSldOworfQorCitzdGF0aWMgUEtNZXJjaGFudENh
cGFiaWxpdHkgdG9QS01lcmNoYW50Q2FwYWJpbGl0aWVzKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyYgbWVyY2hhbnRDYXBhYmlsaXRpZXMpCit7Cisg
ICAgUEtNZXJjaGFudENhcGFiaWxpdHkgcmVzdWx0ID0gMDsKKyAgICBpZiAobWVyY2hhbnRDYXBh
YmlsaXRpZXMuc3VwcG9ydHMzRFMpCisgICAgICAgIHJlc3VsdCB8PSBQS01lcmNoYW50Q2FwYWJp
bGl0eTNEUzsKKyAgICBpZiAobWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNFTVYpCisgICAg
ICAgIHJlc3VsdCB8PSBQS01lcmNoYW50Q2FwYWJpbGl0eUVNVjsKKyAgICBpZiAobWVyY2hhbnRD
YXBhYmlsaXRpZXMuc3VwcG9ydHNDcmVkaXQpCisgICAgICAgIHJlc3VsdCB8PSBQS01lcmNoYW50
Q2FwYWJpbGl0eUNyZWRpdDsKKyAgICBpZiAobWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNE
ZWJpdCkKKyAgICAgICAgcmVzdWx0IHw9IFBLTWVyY2hhbnRDYXBhYmlsaXR5RGViaXQ7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRvU3VwcG9y
dGVkTmV0d29ya3MoY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdv
cmtzJiBzdXBwb3J0ZWROZXR3b3JrcykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKHN1cHBvcnRlZE5ldHdvcmtz
LmFtZXgpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdvcmtBbWV4
KCldOworICAgIGlmIChzdXBwb3J0ZWROZXR3b3Jrcy5jaGluYVVuaW9uUGF5KQorICAgICAgICBb
cmVzdWx0IGFkZE9iamVjdDpnZXRQS1BheW1lbnROZXR3b3JrQ2hpbmFVbmlvblBheSgpXTsKKyAg
ICBpZiAoc3VwcG9ydGVkTmV0d29ya3MuZGlzY292ZXIpCisgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OmdldFBLUGF5bWVudE5ldHdvcmtEaXNjb3ZlcigpXTsKKyAgICBpZiAoc3VwcG9ydGVkTmV0
d29ya3MuaW50ZXJhYykKKyAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6Z2V0UEtQYXltZW50TmV0
d29ya0ludGVyYWMoKV07CisgICAgaWYgKHN1cHBvcnRlZE5ldHdvcmtzLm1hc3RlckNhcmQpCisg
ICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdvcmtNYXN0ZXJDYXJkKCld
OworICAgIGlmIChzdXBwb3J0ZWROZXR3b3Jrcy5wcml2YXRlTGFiZWwpCisgICAgICAgIFtyZXN1
bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdvcmtQcml2YXRlTGFiZWwoKV07CisgICAgaWYg
KHN1cHBvcnRlZE5ldHdvcmtzLnZpc2EpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBL
UGF5bWVudE5ldHdvcmtWaXNhKCldOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IFBLU2hpcHBpbmdUeXBlIHRvUEtTaGlwcGluZ1R5cGUoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6
OlNoaXBwaW5nVHlwZSBzaGlwcGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChzaGlwcGluZ1R5cGUp
IHsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ1R5cGU6OlNoaXBw
aW5nOgorICAgICAgICByZXR1cm4gUEtTaGlwcGluZ1R5cGVTaGlwcGluZzsKKworICAgIGNhc2Ug
V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nVHlwZTo6RGVsaXZlcnk6CisgICAgICAg
IHJldHVybiBQS1NoaXBwaW5nVHlwZURlbGl2ZXJ5OworCisgICAgY2FzZSBXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdDo6U2hpcHBpbmdUeXBlOjpTdG9yZVBpY2t1cDoKKyAgICAgICAgcmV0dXJuIFBL
U2hpcHBpbmdUeXBlU3RvcmVQaWNrdXA7CisKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRSZXF1
ZXN0OjpTaGlwcGluZ1R5cGU6OlNlcnZpY2VQaWNrdXA6CisgICAgICAgIHJldHVybiBQS1NoaXBw
aW5nVHlwZVNlcnZpY2VQaWNrdXA7CisgICAgfQorfQorCitzdGF0aWMgUmV0YWluUHRyPFBLU2hp
cHBpbmdNZXRob2Q+IHRvUEtTaGlwcGluZ01ldGhvZChjb25zdCBXZWJDb3JlOjpQYXltZW50UmVx
dWVzdDo6U2hpcHBpbmdNZXRob2QmIHNoaXBwaW5nTWV0aG9kKQoreworICAgIGF1dG8gYW1vdW50
ID0gYWRvcHROUyhbW05TRGVjaW1hbE51bWJlciBhbGxvY10gaW5pdFdpdGhNYW50aXNzYTpzaGlw
cGluZ01ldGhvZC5hbW91bnQgZXhwb25lbnQ6LTIgaXNOZWdhdGl2ZTpOT10pOworCisgICAgUmV0
YWluUHRyPFBLU2hpcHBpbmdNZXRob2Q+IHJlc3VsdCA9IFtnZXRQS1NoaXBwaW5nTWV0aG9kQ2xh
c3MoKSBzdW1tYXJ5SXRlbVdpdGhMYWJlbDpzaGlwcGluZ01ldGhvZC5sYWJlbCBhbW91bnQ6YW1v
dW50LmdldCgpXTsKKyAgICBbcmVzdWx0IHNldElkZW50aWZpZXI6c2hpcHBpbmdNZXRob2QuaWRl
bnRpZmllcl07CisgICAgW3Jlc3VsdCBzZXREZXRhaWw6c2hpcHBpbmdNZXRob2QuZGV0YWlsXTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8UEtQYXltZW50TWVy
Y2hhbnRTZXNzaW9uPiB0b1BLUGF5bWVudE1lcmNoYW50U2Vzc2lvbihjb25zdCBXZWJDb3JlOjpQ
YXltZW50TWVyY2hhbnRTZXNzaW9uJiBwYXltZW50TWVyY2hhbnRTZXNzaW9uKQoreworICAgIE5T
RGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7CisgICAgICAgIEAibWVyY2hhbnRTZXNzaW9uSWRl
bnRpZmllciIgOiBwYXltZW50TWVyY2hhbnRTZXNzaW9uLnNlc3Npb25JZGVudGlmaWVyLAorICAg
ICAgICBAIm1lcmNoYW50SWRlbnRpZmllciIgOiBwYXltZW50TWVyY2hhbnRTZXNzaW9uLm1lcmNo
YW50SWRlbnRpZmllciwKKyAgICAgICAgQCJuT25jZSIgOiBwYXltZW50TWVyY2hhbnRTZXNzaW9u
Lm5vbmNlLAorICAgICAgICBAImVwb2NoVGltZXN0YW1wIiA6IEAoc3RhdGljX2Nhc3Q8TlNVSW50
ZWdlcj4ocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5lcG9jaFRpbWVzdGFtcCkpLAorICAgICAgICBA
IkZRRE4iIDogcGF5bWVudE1lcmNoYW50U2Vzc2lvbi5kb21haW5OYW1lLAorICAgICAgICBAInNp
Z25hdHVyZSIgOiBwYXltZW50TWVyY2hhbnRTZXNzaW9uLnNpZ25hdHVyZSwKKyAgICB9OworCisg
ICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jUEtQYXltZW50TWVyY2hhbnRTZXNzaW9uSW5zdGFuY2Uo
KSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFyeV0pOworfQorCitSZXRhaW5QdHI8UEtQYXlt
ZW50UmVxdWVzdD4gdG9QS1BheW1lbnRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2lu
YXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0
IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IGFkb3B0TlMoW2FsbG9jUEtQYXltZW50UmVxdWVzdEluc3RhbmNlKCkgaW5pdF0pOwor
CisgICAgW3Jlc3VsdCBzZXRPcmlnaW5hdGluZ1VSTDpvcmlnaW5hdGluZ1VSTF07CisKKyAgICBp
ZiAoW3Jlc3VsdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFRodW1ibmFpbFVSTHM6
KV0pIHsKKyAgICAgICAgYXV0byB0aHVtYm5haWxVUkxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIGZvciAoYXV0byYgbGlua0ljb25VUkwgOiBsaW5r
SWNvblVSTHMpCisgICAgICAgICAgICBbdGh1bWJuYWlsVVJMcyBhZGRPYmplY3Q6c3RhdGljX2Nh
c3Q8TlNVUkwgKj4obGlua0ljb25VUkwpXTsKKworICAgICAgICBbcmVzdWx0IHNldFRodW1ibmFp
bFVSTHM6dGh1bWJuYWlsVVJMcy5nZXQoKV07CisgICAgfSBlbHNlIGlmICghbGlua0ljb25VUkxz
LmlzRW1wdHkoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkw6bGlua0ljb25VUkxz
WzBdXTsKKworICAgIFtyZXN1bHQgc2V0Q291bnRyeUNvZGU6cGF5bWVudFJlcXVlc3QuY291bnRy
eUNvZGUoKV07CisgICAgW3Jlc3VsdCBzZXRDdXJyZW5jeUNvZGU6cGF5bWVudFJlcXVlc3QuY3Vy
cmVuY3lDb2RlKCldOworICAgIFtyZXN1bHQgc2V0UmVxdWlyZWRCaWxsaW5nQWRkcmVzc0ZpZWxk
czp0b1BLQWRkcmVzc0ZpZWxkKHBheW1lbnRSZXF1ZXN0LnJlcXVpcmVkQmlsbGluZ0FkZHJlc3NG
aWVsZHMoKSldOworICAgIFtyZXN1bHQgc2V0QmlsbGluZ0NvbnRhY3Q6cGF5bWVudFJlcXVlc3Qu
YmlsbGluZ0NvbnRhY3QoKS5wa0NvbnRhY3QoKV07CisgICAgW3Jlc3VsdCBzZXRSZXF1aXJlZFNo
aXBwaW5nQWRkcmVzc0ZpZWxkczp0b1BLQWRkcmVzc0ZpZWxkKHBheW1lbnRSZXF1ZXN0LnJlcXVp
cmVkU2hpcHBpbmdBZGRyZXNzRmllbGRzKCkpXTsKKyAgICBbcmVzdWx0IHNldFNoaXBwaW5nQ29u
dGFjdDpwYXltZW50UmVxdWVzdC5zaGlwcGluZ0NvbnRhY3QoKS5wa0NvbnRhY3QoKV07CisKKyAg
ICBbcmVzdWx0IHNldFN1cHBvcnRlZE5ldHdvcmtzOnRvU3VwcG9ydGVkTmV0d29ya3MocGF5bWVu
dFJlcXVlc3Quc3VwcG9ydGVkTmV0d29ya3MoKSkuZ2V0KCldOworICAgIFtyZXN1bHQgc2V0TWVy
Y2hhbnRDYXBhYmlsaXRpZXM6dG9QS01lcmNoYW50Q2FwYWJpbGl0aWVzKHBheW1lbnRSZXF1ZXN0
Lm1lcmNoYW50Q2FwYWJpbGl0aWVzKCkpXTsKKworICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdUeXBl
OnRvUEtTaGlwcGluZ1R5cGUocGF5bWVudFJlcXVlc3Quc2hpcHBpbmdUeXBlKCkpXTsKKworICAg
IGF1dG8gc2hpcHBpbmdNZXRob2RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CisgICAgZm9yIChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHBheW1lbnRSZXF1ZXN0LnNo
aXBwaW5nTWV0aG9kcygpKQorICAgICAgICBbc2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BL
U2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRob2QpLmdldCgpXTsKKyAgICBbcmVzdWx0IHNldFNo
aXBwaW5nTWV0aG9kczpzaGlwcGluZ01ldGhvZHMuZ2V0KCldOworCisgICAgYXV0byBwYXltZW50
U3VtbWFyeUl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Cisg
ICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IHBheW1lbnRSZXF1ZXN0LmxpbmVJdGVtcygpKSB7Cisg
ICAgICAgIGlmIChhdXRvIHN1bW1hcnlJdGVtID0gdG9QS1BheW1lbnRTdW1tYXJ5SXRlbShsaW5l
SXRlbSkpCisgICAgICAgICAgICBbcGF5bWVudFN1bW1hcnlJdGVtcyBhZGRPYmplY3Q6c3VtbWFy
eUl0ZW0uZ2V0KCldOworICAgIH0KKworICAgIGlmIChhdXRvIHRvdGFsSXRlbSA9IHRvUEtQYXlt
ZW50U3VtbWFyeUl0ZW0ocGF5bWVudFJlcXVlc3QudG90YWwoKSkpCisgICAgICAgIFtwYXltZW50
U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDp0b3RhbEl0ZW0uZ2V0KCldOworCisgICAgW3Jlc3VsdCBz
ZXRQYXltZW50U3VtbWFyeUl0ZW1zOnBheW1lbnRTdW1tYXJ5SXRlbXMuZ2V0KCldOworCisgICAg
W3Jlc3VsdCBzZXRFeHBlY3RzTWVyY2hhbnRTZXNzaW9uOllFU107CisKKyAgICBpZiAoIXBheW1l
bnRSZXF1ZXN0LmFwcGxpY2F0aW9uRGF0YSgpLmlzTnVsbCgpKSB7CisgICAgICAgIGF1dG8gYXBw
bGljYXRpb25EYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCYXNlNjRFbmNv
ZGVkU3RyaW5nOnBheW1lbnRSZXF1ZXN0LmFwcGxpY2F0aW9uRGF0YSgpIG9wdGlvbnM6MF0pOwor
ICAgICAgIFtyZXN1bHQgc2V0QXBwbGljYXRpb25EYXRhOmFwcGxpY2F0aW9uRGF0YS5nZXQoKV07
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFBLUGF5bWVudEF1dGhv
cml6YXRpb25TdGF0dXMgdG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzKFdlYkNvcmU6OlBh
eW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cykKK3sKKyAgICBzd2l0Y2ggKHN0YXR1cykg
eworICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM6OlN1Y2Nlc3M6
CisgICAgICAgIHJldHVybiBQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzU3VjY2VzczsKKyAg
ICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpGYWlsdXJlOgorICAg
ICAgICByZXR1cm4gUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1c0ZhaWx1cmU7CisgICAgY2Fz
ZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6SW52YWxpZEJpbGxpbmdQb3N0
YWxBZGRyZXNzOgorICAgICAgICByZXR1cm4gUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1c0lu
dmFsaWRCaWxsaW5nUG9zdGFsQWRkcmVzczsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRo
b3JpemF0aW9uU3RhdHVzOjpJbnZhbGlkU2hpcHBpbmdQb3N0YWxBZGRyZXNzOgorICAgICAgICBy
ZXR1cm4gUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1c0ludmFsaWRTaGlwcGluZ1Bvc3RhbEFk
ZHJlc3M7CisgICAgY2FzZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6SW52
YWxpZFNoaXBwaW5nQ29udGFjdDoKKyAgICAgICAgcmV0dXJuIFBLUGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXNJbnZhbGlkU2hpcHBpbmdDb250YWN0OworICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVu
dEF1dGhvcml6YXRpb25TdGF0dXM6OlBJTlJlcXVpcmVkOgorICAgICAgICByZXR1cm4gUEtQYXlt
ZW50QXV0aG9yaXphdGlvblN0YXR1c1BJTlJlcXVpcmVkOworICAgIGNhc2UgV2ViQ29yZTo6UGF5
bWVudEF1dGhvcml6YXRpb25TdGF0dXM6OlBJTkluY29ycmVjdDoKKyAgICAgICAgcmV0dXJuIFBL
UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNQSU5JbmNvcnJlY3Q7CisgICAgY2FzZSBXZWJDb3Jl
OjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6UElOTG9ja291dDoKKyAgICAgICAgcmV0dXJu
IFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNQSU5Mb2Nrb3V0OworICAgIH0KK30KKwordm9p
ZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1Db21wbGV0ZVBheW1lbnRTZXNz
aW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cykKK3sKKyAgICBB
U1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKTsKKyAgICBBU1NFUlQo
bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUpOworCisgICAgbV9w
YXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9hdXRob3JpemVkID0g
WUVTOworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5f
cGF5bWVudEF1dGhvcml6ZWRDb21wbGV0aW9uKHRvUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1
cyhzdGF0dXMpKTsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZS0+X3BheW1lbnRBdXRob3JpemVkQ29tcGxldGlvbiA9IG51bGxwdHI7Cit9CisKK3ZvaWQg
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnBsYXRmb3JtQ29tcGxldGVNZXJjaGFudFZhbGlk
YXRpb24oY29uc3QgV2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYgcGF5bWVudE1lcmNo
YW50U2Vzc2lvbikKK3sKKyAgICBBU1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250
cm9sbGVyKTsKKyAgICBBU1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVy
RGVsZWdhdGUpOworCisgICAgbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVs
ZWdhdGUtPl9zZXNzaW9uQmxvY2sodG9QS1BheW1lbnRNZXJjaGFudFNlc3Npb24ocGF5bWVudE1l
cmNoYW50U2Vzc2lvbikuZ2V0KCksIG51bGxwdHIpOworICAgIG1fcGF5bWVudEF1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fc2Vzc2lvbkJsb2NrID0gbnVsbHB0cjsKK30KKwor
dm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1Db21wbGV0ZVNoaXBwaW5n
TWV0aG9kU2VsZWN0aW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1
cywgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0
ZW1zPiYgbmV3VG90YWxBbmRMaW5lSXRlbXMpCit7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhv
cml6YXRpb25WaWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlckRlbGVnYXRlKTsKKworICAgIGlmIChuZXdUb3RhbEFuZExpbmVJdGVt
cykgeworICAgICAgICBhdXRvIHBheW1lbnRTdW1tYXJ5SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG5l
d1RvdGFsQW5kTGluZUl0ZW1zLT5saW5lSXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHN1
bW1hcnlJdGVtID0gdG9QS1BheW1lbnRTdW1tYXJ5SXRlbShsaW5lSXRlbSkpCisgICAgICAgICAg
ICAgICAgW3BheW1lbnRTdW1tYXJ5SXRlbXMgYWRkT2JqZWN0OnN1bW1hcnlJdGVtLmdldCgpXTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvIHRvdGFsSXRlbSA9IHRvUEtQYXltZW50U3Vt
bWFyeUl0ZW0obmV3VG90YWxBbmRMaW5lSXRlbXMtPnRvdGFsKSkKKyAgICAgICAgICAgIFtwYXlt
ZW50U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDp0b3RhbEl0ZW0uZ2V0KCldOworCisgICAgICAgIG1f
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fcGF5bWVudFN1bW1h
cnlJdGVtcyA9IFdURk1vdmUocGF5bWVudFN1bW1hcnlJdGVtcyk7CisgICAgfQorCisgICAgbV9w
YXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9kaWRTZWxlY3RTaGlw
cGluZ01ldGhvZENvbXBsZXRpb24odG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzKHN0YXR1
cyksIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fcGF5bWVu
dFN1bW1hcnlJdGVtcy5nZXQoKSk7CisgICAgbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250
cm9sbGVyRGVsZWdhdGUtPl9kaWRTZWxlY3RTaGlwcGluZ01ldGhvZENvbXBsZXRpb24gPSBudWxs
cHRyOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0Zm9ybUNvbXBs
ZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9u
U3RhdHVzIHN0YXR1cywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlw
cGluZ01ldGhvZD4mIG5ld1NoaXBwaW5nTWV0aG9kcywgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiYgbmV3VG90YWxBbmRMaW5lSXRlbXMp
Cit7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcik7Cisg
ICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlKTsK
KworICAgIGlmIChuZXdUb3RhbEFuZExpbmVJdGVtcykgeworICAgICAgICBhdXRvIHBheW1lbnRT
dW1tYXJ5SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG5ld1RvdGFsQW5kTGluZUl0ZW1zLT5saW5lSXRl
bXMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHN1bW1hcnlJdGVtID0gdG9QS1BheW1lbnRTdW1t
YXJ5SXRlbShsaW5lSXRlbSkpCisgICAgICAgICAgICAgICAgW3BheW1lbnRTdW1tYXJ5SXRlbXMg
YWRkT2JqZWN0OnN1bW1hcnlJdGVtLmdldCgpXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
dXRvIHRvdGFsSXRlbSA9IHRvUEtQYXltZW50U3VtbWFyeUl0ZW0obmV3VG90YWxBbmRMaW5lSXRl
bXMtPnRvdGFsKSkKKyAgICAgICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDp0
b3RhbEl0ZW0uZ2V0KCldOworCisgICAgICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckRlbGVnYXRlLT5fcGF5bWVudFN1bW1hcnlJdGVtcyA9IFdURk1vdmUocGF5bWVudFN1
bW1hcnlJdGVtcyk7CisKKyAgICAgICAgYXV0byBzaGlwcGluZ01ldGhvZHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgZm9yIChhdXRvJiBzaGlwcGlu
Z01ldGhvZCA6IG5ld1NoaXBwaW5nTWV0aG9kcykKKyAgICAgICAgICAgIFtzaGlwcGluZ01ldGhv
ZHMgYWRkT2JqZWN0OnRvUEtTaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCkuZ2V0KCldOwor
CisgICAgICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5f
c2hpcHBpbmdNZXRob2RzID0gV1RGTW92ZShzaGlwcGluZ01ldGhvZHMpOworICAgIH0KKworICAg
IG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fZGlkU2VsZWN0
U2hpcHBpbmdDb250YWN0Q29tcGxldGlvbih0b1BLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMo
c3RhdHVzKSwgbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9z
aGlwcGluZ01ldGhvZHMuZ2V0KCksIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxl
ckRlbGVnYXRlLT5fcGF5bWVudFN1bW1hcnlJdGVtcy5nZXQoKSk7CisgICAgbV9wYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9kaWRTZWxlY3RTaGlwcGluZ0NvbnRh
Y3RDb21wbGV0aW9uID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eTo6cGxhdGZvcm1Db21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oY29uc3QgT3B0aW9u
YWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiYgbmV3VG90YWxB
bmRMaW5lSXRlbXMpCit7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlcik7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxl
ckRlbGVnYXRlKTsKKworICAgIGlmIChuZXdUb3RhbEFuZExpbmVJdGVtcykgeworICAgICAgICBh
dXRvIHBheW1lbnRTdW1tYXJ5SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKKyAgICAgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG5ld1RvdGFsQW5kTGluZUl0
ZW1zLT5saW5lSXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHN1bW1hcnlJdGVtID0gdG9Q
S1BheW1lbnRTdW1tYXJ5SXRlbShsaW5lSXRlbSkpCisgICAgICAgICAgICAgICAgW3BheW1lbnRT
dW1tYXJ5SXRlbXMgYWRkT2JqZWN0OnN1bW1hcnlJdGVtLmdldCgpXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhdXRvIHRvdGFsSXRlbSA9IHRvUEtQYXltZW50U3VtbWFyeUl0ZW0obmV3VG90
YWxBbmRMaW5lSXRlbXMtPnRvdGFsKSkKKyAgICAgICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1z
IGFkZE9iamVjdDp0b3RhbEl0ZW0uZ2V0KCldOworCisgICAgICAgIG1fcGF5bWVudEF1dGhvcml6
YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fcGF5bWVudFN1bW1hcnlJdGVtcyA9IFdURk1v
dmUocGF5bWVudFN1bW1hcnlJdGVtcyk7CisgICAgfQorCisgICAgbV9wYXltZW50QXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9kaWRTZWxlY3RQYXltZW50TWV0aG9kQ29tcGxl
dGlvbihtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3BheW1l
bnRTdW1tYXJ5SXRlbXMuZ2V0KCkpOworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckRlbGVnYXRlLT5fZGlkU2VsZWN0UGF5bWVudE1ldGhvZENvbXBsZXRpb24gPSBudWxs
cHRyOworfQorCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQXBwbGVQYXkvaW9zL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2lvcy9XZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eUlPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWQ4OTZiZDhiNzZjNDVkZDFhZDViZTlkZjczYWUyZTU3
NzYxMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxl
UGF5L2lvcy9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtMCwwICsxLDkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoQVBQTEVfUEFZ
KQorCisjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisj
aW1wb3J0ICJXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmgiCisjaW1wb3J0IDxQYXNz
S2l0Q29yZS9QS1BheW1lbnRNZXJjaGFudFNlc3Npb24uaD4KKyNpbXBvcnQgPFBhc3NLaXQvUGFz
c0tpdC5oPgorI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QYXltZW50QXV0aG9yaXphdGlvblN0YXR1cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0
TGlua2luZy5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisKK1NPRlRfTElOS19GUkFNRVdP
UksoUGFzc0tpdCkKK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRBdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXIpOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1TaG93UGF5bWVudFVJKGNvbnN0IFdlYkNvcmU6
OlVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpVUkw+JiBsaW5rSWNv
blVSTFN0cmluZ3MsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBVSVZpZXdD
b250cm9sbGVyICpwcmVzZW50aW5nVmlld0NvbnRyb2xsZXIgPSBtX3dlYlBhZ2VQcm94eS51aUNs
aWVudCgpLnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigpOworCisgICAgaWYgKCFwcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCFtX3BheW1lbnRBdXRob3JpemF0aW9u
Vmlld0NvbnRyb2xsZXIpOworCisgICAgYXV0byBwYXltZW50UmVxdWVzdCA9IHRvUEtQYXltZW50
UmVxdWVzdChvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxTdHJpbmdzLCByZXF1ZXN0KTsKKwor
ICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9j
UEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aFBh
eW1lbnRSZXF1ZXN0OnBheW1lbnRSZXF1ZXN0LmdldCgpXSk7CisgICAgaWYgKCFtX3BheW1lbnRB
dXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXltZW50QXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tQYXltZW50QXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUGF5bWVudENvb3JkaW5h
dG9yUHJveHk6KnRoaXNdKTsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZS0+X3BheW1lbnRTdW1tYXJ5SXRlbXMgPSBbcGF5bWVudFJlcXVlc3QgcGF5bWVu
dFN1bW1hcnlJdGVtc107CisgICAgbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVy
RGVsZWdhdGUtPl9zaGlwcGluZ01ldGhvZHMgPSBbcGF5bWVudFJlcXVlc3Qgc2hpcHBpbmdNZXRo
b2RzXTsKKworICAgIFttX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgc2V0RGVs
ZWdhdGU6bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCld
OworICAgIFttX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgc2V0UHJpdmF0ZURl
bGVnYXRlOm1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgp
XTsKKworICAgIFtwcmVzZW50aW5nVmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVy
Om1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlci5nZXQoKSBhbmltYXRlZDpZRVMg
Y29tcGxldGlvbjpudWxscHRyXTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworfQor
Cit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpoaWRlUGF5bWVudFVJKCkKK3sKKyAg
ICBBU1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKTsKKyAgICBBU1NF
UlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUpOworCisgICAg
W1ttX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgcHJlc2VudGluZ1ZpZXdDb250
cm9sbGVyXSBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpudWxs
cHRyXTsKKyAgICBbbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyIHNldERlbGVn
YXRlOm5pbF07CisgICAgW21fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBzZXRQ
cml2YXRlRGVsZWdhdGU6bmlsXTsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRy
b2xsZXIgPSBudWxscHRyOworCisgICAgW21fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJv
bGxlckRlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3
Q29udHJvbGxlckRlbGVnYXRlID0gbnVsbHB0cjsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9tYWMvV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvbWFj
L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmYzk3NGU4ZmZj
YTU0N2I5OTllZTI1Yjk4ZjlhMjMxMTM0MDBmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvbWFjL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5
TWFjLm1tCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoQVBQTEVfUEFZKQorCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNp
bXBvcnQgIldlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaCIKKyNpbXBvcnQgPEZvdW5k
YXRpb24vTlNFeHRlbnNpb24uaD4KKyNpbXBvcnQgPFBhc3NLaXQvUEtQYXltZW50QXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtp
bmcuaD4KKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFBhc3NLaXQpCisKK1NPRlRfTElO
S19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOwor
U09GVF9MSU5LX0NPTlNUQU5UKFBhc3NLaXQsIFBLRXh0ZW5zaW9uUGF5bWVudEF1dGhvcml6YXRp
b25VSUV4dGVuc2lvblBvaW50TmFtZSwgTlNTdHJpbmcgKik7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVNob3dQYXltZW50
VUkoY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlVSTD4mIGxpbmtJY29uVVJMU3RyaW5ncywgY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVl
c3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGF1dG8gcGF5bWVudFJlcXVlc3QgPSB0b1BLUGF5bWVudFJlcXVlc3Qob3JpZ2lu
YXRpbmdVUkwsIGxpbmtJY29uVVJMU3RyaW5ncywgcmVxdWVzdCk7CisKKyAgICBhdXRvIHNob3dQ
YXltZW50VUlSZXF1ZXN0U2VlZCA9IG1fc2hvd1BheW1lbnRVSVJlcXVlc3RTZWVkOworICAgIGF1
dG8gd2Vha1RoaXMgPSBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsKKyAgICBbZ2V0
UEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyQ2xhc3MoKSByZXF1ZXN0Vmlld0Nv
bnRyb2xsZXJXaXRoUGF5bWVudFJlcXVlc3Q6cGF5bWVudFJlcXVlc3QuZ2V0KCkgY29tcGxldGlv
bjpbcGF5bWVudFJlcXVlc3QsIHNob3dQYXltZW50VUlSZXF1ZXN0U2VlZCwgd2Vha1RoaXMsIGNv
bXBsZXRpb25IYW5kbGVyXShQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgKnZp
ZXdDb250cm9sbGVyLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBhdXRvIHBheW1lbnRDb29y
ZGluYXRvclByb3h5ID0gd2Vha1RoaXMuZ2V0KCk7CisgICAgICAgIGlmICghcGF5bWVudENvb3Jk
aW5hdG9yUHJveHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGVycm9yKSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIitbUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250
cm9sbGVyIHJlcXVlc3RWaWV3Q29udHJvbGxlcldpdGhQYXltZW50UmVxdWVzdDpjb21wbGV0aW9u
Ol0gZXJyb3IgJUAiLCBlcnJvcik7CisKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG93
UGF5bWVudFVJUmVxdWVzdFNlZWQgIT0gcGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fc2hvd1Bh
eW1lbnRVSVJlcXVlc3RTZWVkKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4g
YXNrZWQgdG8gaGlkZSB0aGUgcGF5bWVudCBVSS4gRG9uJ3QgYXR0ZW1wdCB0byBzaG93IGl0Lgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKHZpZXdDb250
cm9sbGVyKTsKKworICAgICAgICBwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tQYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUGF5bWVudENv
b3JkaW5hdG9yUHJveHk6KnBheW1lbnRDb29yZGluYXRvclByb3h5XSk7CisgICAgICAgIHBheW1l
bnRDb29yZGluYXRvclByb3h5LT5tX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZS0+X3BheW1lbnRTdW1tYXJ5SXRlbXMgPSBbcGF5bWVudFJlcXVlc3QgcGF5bWVudFN1
bW1hcnlJdGVtc107CisgICAgICAgIHBheW1lbnRDb29yZGluYXRvclByb3h5LT5tX3BheW1lbnRB
dXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3NoaXBwaW5nTWV0aG9kcyA9IFtw
YXltZW50UmVxdWVzdCBzaGlwcGluZ01ldGhvZHNdOworICAgICAgICBwYXltZW50Q29vcmRpbmF0
b3JQcm94eS0+bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyID0gdmlld0NvbnRy
b2xsZXI7CisgICAgICAgIFtwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50QXV0aG9y
aXphdGlvblZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOnBheW1lbnRDb29yZGluYXRvclByb3h5
LT5tX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07Cisg
ICAgICAgIFtwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50QXV0aG9yaXphdGlvblZp
ZXdDb250cm9sbGVyIHNldFByaXZhdGVEZWxlZ2F0ZTpwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+
bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworCisg
ICAgICAgIEFTU0VSVCghcGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fc2hlZXRXaW5kb3cpOwor
ICAgICAgICBwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9zaGVldFdpbmRvdyA9IFtOU1dpbmRv
dyB3aW5kb3dXaXRoQ29udGVudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyXTsKKyAgICAg
ICAgW3BheW1lbnRDb29yZGluYXRvclByb3h5LT5tX3dlYlBhZ2VQcm94eS5wbGF0Zm9ybVdpbmRv
dygpIGJlZ2luU2hlZXQ6cGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fc2hlZXRXaW5kb3cuZ2V0
KCkgY29tcGxldGlvbkhhbmRsZXI6bnVsbHB0cl07CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIodHJ1ZSk7CisgICAgfV07Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OmhpZGVQYXltZW50VUkoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmF0aW5n
KSB7CisgICAgICAgICsrbV9zaG93UGF5bWVudFVJUmVxdWVzdFNlZWQ7CisKKyAgICAgICAgQVNT
RVJUKCFtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOworICAgICAgICBBU1NF
UlQoIW1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlKTsKKyAgICAg
ICAgQVNTRVJUKCFtX3NoZWV0V2luZG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVChtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOworICAgIEFTU0VS
VChtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSk7CisgICAgQVNT
RVJUKG1fc2hlZXRXaW5kb3cpOworCisgICAgW1ttX3NoZWV0V2luZG93IHNoZWV0UGFyZW50XSBl
bmRTaGVldDptX3NoZWV0V2luZG93LmdldCgpXTsKKyAgICBbbV9wYXltZW50QXV0aG9yaXphdGlv
blZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW21fcGF5bWVudEF1dGhvcml6
YXRpb25WaWV3Q29udHJvbGxlciBzZXRQcml2YXRlRGVsZWdhdGU6bmlsXTsKKyAgICBtX3BheW1l
bnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgPSBudWxscHRyOworCisgICAgW21fcGF5bWVu
dEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlIGludmFsaWRhdGVdOworICAgIG1f
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlID0gbnVsbHB0cjsKKwor
ICAgIG1fc2hlZXRXaW5kb3cgPSBudWxscHRyOworfQorCit9CisKK2V4dGVybiAiQyIgeworV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5RW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBcHBs
ZVBheUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVk
KTsKKworV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5Q2FwYWJpbGl0eURp
c2Nsb3N1cmVBbGxvd2VkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpOworV0tfRVhQ
T1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxv
d2VkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgYWxsb3dlZCk7CisKKy8v
IEZJWE1FOiBHZXQgcmlkIG9mIHRoZXNlIGluIGZhdm9yIG9mIHRoZSBvbmVzIHRoYXQgbWVudGlv
biBBcHBsZSBQYXkuCitXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0UGF5bWVudHNFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldFBheW1lbnRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBib29sIGVuYWJsZWQpOworfQorCitXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0
QXBwbGVQYXlFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCit7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YXBwbGVQYXlFbmFibGVkKCk7
Cit9CisKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldEFwcGxlUGF5RW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRBcHBsZVBheUVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK2Jvb2wg
V0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCit7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+YXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQoKTsK
K30KKwordm9pZCBXS1ByZWZlcmVuY2VzU2V0QXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3VyZUFs
bG93ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBhbGxvd2VkKQorewor
ICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QXBwbGVQYXlDYXBhYmlsaXR5
RGlzY2xvc3VyZUFsbG93ZWQoYWxsb3dlZCk7Cit9CisKK2Jvb2wgV0tQcmVmZXJlbmNlc0dldFBh
eW1lbnRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJl
dHVybiBXS1ByZWZlcmVuY2VzR2V0QXBwbGVQYXlFbmFibGVkKHByZWZlcmVuY2VzUmVmKTsKK30K
Kwordm9pZCBXS1ByZWZlcmVuY2VzU2V0UGF5bWVudHNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXS1ByZWZlcmVuY2VzU2V0QXBw
bGVQYXlFbmFibGVkKHByZWZlcmVuY2VzUmVmLCBlbmFibGVkKTsKK30KKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAxN2RjOTFlZjg2MTY3ZTc0
YThjNzBmMzg2NGFjMzE4OTFkYzc3MWRkLi5lM2YzYzU1M2UwMzJiNTk5NGY2OGQ0ODNjNmFiOTU3
ZWVmNzAzYzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtOTcsNiArOTcsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cERhdGEuaCIKICNpbmNsdWRl
ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIldlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9w
dXBJdGVtLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgpAQCAtMTY2LDEwICsxNjcsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTWVk
aWFTZXNzaW9uTWV0YWRhdGEuaD4KICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV2ViUGFnZVByb3h5SW5jbHVkZXMuaD4KLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpKQogI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJQcm94eS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggMDVjN2JlZWE4OTZmMDJhNmY4MTIzNTljZTE5NzI2NmEzN2U4ODY2OS4uNzkyMDgyMTlh
OTM0MjdiNzY1ZWJlNzc0M2E1MDYyZTkxOTdlMzMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDbGllbnQuaD4gLy8gRklYTUU6
IE5lZWRlZCBieSBXZWJQYWdlUHJveHlNZXNzYWdlcy5oIGZvciBESUNUQVRJT05fQUxURVJOQVRJ
VkVTLgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC0xMTYsMTAgKzExNyw2
IEBAIE9CSkNfQ0xBU1MgX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk7CiAjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg+CiAjZW5kaWYKIAotI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1dlYlBhZ2VQcm94eUlu
Y2x1ZGVzLmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgTWVkaWFTZXNzaW9uTWV0YWRhdGE7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjEwZTBmZjRmN2E3
MmI4MDM4ZDA3NDg1ZjY3YmRmMDUzZGU4MmM4OS4uYzg0Nzg1MzhlMjUzN2FhMmVmNDFkYjYzMGRi
MzNhYzhjYzRlOWUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMjk2LDcgKzI5Niw2IEBACiAJCTFBNkZCRDI4MTFFNjlCQzIw
MERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE2RkJEMjYxMUU2OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1
Z2luLmggKi87IH07CiAJCTFBNkZCRDI5MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdp
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZG
QkQyNzExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwICovOyB9OwogCQkxQTcy
ODQ0ODE5NTlGODA0MDAwN0JDRTUgLyogU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTcyODQ0NDE5NTlFRDEw
MDAwN0JDRTUgLyogU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgKi87IH07Ci0JCTFBNzgxQUU3
MUM1NzE0REEwMEZCOTZERCAvKiBXZWJLaXRBZGRpdGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc4MUFFNTFDNTcxNERBMDBGQjk2REQgLyog
V2ViS2l0QWRkaXRpb25zLm1tICovOyB9OwogCQkxQTc4NjVCOTE2Q0FDNzE1MDBBQ0U4M0EgLyog
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzg2NUI3MTZDQUM3MTUw
MEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwogCQkxQTc4NjVCQTE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNzg2NUI4MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwogCQkxQTdDMERGNjFCN0QxRjEwMDBB
OUI4NDggLyogV0tXaW5kb3dGZWF0dXJlc1JlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdDMERGNDFCN0QxRjEwMDBBOUI4NDggLyogV0tXaW5k
b3dGZWF0dXJlc1JlZi5jcHAgKi87IH07CkBAIC0zODMsNiArMzgyLDE5IEBACiAJCTFBQjE2QUUy
MTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIxNkFFMDE2NDg2
NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oICovOyB9Owog
CQkxQUIxNkFFOTE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjE2QUU3MTY0
QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tICovOyB9OwogCQkxQUIx
NkFFQTE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMTZBRTgxNjRCM0E4ODAw
MjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCAqLzsgfTsKKwkJMUFCMUY3NzQxRDFC
MkY4QTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIxRjc3MTFEMUIyRjdFMDA3QzlCRDEg
LyogV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCAqLzsgfTsKKwkJMUFCMUY3N0UxRDFCMzBBOTAw
N0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzc4MUQxQjMwQTkwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmggKi87IH07CisJCTFBQjFGNzdG
MUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMUY3NzkxRDFC
MzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0gKi87IH07
CisJCTFBQjFGNzgwMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QjFGNzdCMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUlPUy5t
bSAqLzsgfTsKKwkJMUFCMUY3ODExRDFCMzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFCMUY3N0QxRDFCMzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5TWFjLm1tICovOyB9OworCQkxQUIxRjc4QjFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFCMUY3ODgxRDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5LmNwcCAqLzsgfTsKKwkJMUFCMUY3OEMxRDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUIxRjc4OTFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHkuaCAqLzsgfTsKKwkJMUFCMUY3OTAxRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNv
cmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFCMUY3OEUxRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tICovOyB9OworCQkxQUIxRjc5MTFEMUIzNEE2MDA3QzlCRDEgLyogV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQjFGNzhGMUQxQjM0QTYwMDdDOUJEMSAvKiBXZWJDb3JlQXJndW1l
bnRDb2RlcnNDb2NvYS5oICovOyB9OworCQkxQUIxRjc5NjFEMUIzNjEzMDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzkyMUQxQjM2MTMwMDdDOUJEMSAvKiBX
ZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkxQUIxRjc5
NzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzkzMUQxQjM2
MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovOyB9OworCQkx
QUIxRjc5ODFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFCMUY3OTQxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAv
KiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFBQjMxQTk2
MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIzMUE5NDE2QkM2
ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9Owog
CQkxQUIzMUE5NzE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMzFBOTUxNkJD
Njg4MTAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMUFCNDBF
RTUxQkY2NzdFMzAwQkE4MUJFIC8qIFdLTWVudUl0ZW1JZGVudGlmaWVycy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjQwRUUzMUJGNjc3RTMwMEJB
ODFCRSAvKiBXS01lbnVJdGVtSWRlbnRpZmllcnMubW0gKi87IH07CkBAIC0yMjU1LDcgKzIyNjcs
NiBAQAogCQkxQTZGQkQyNzExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTcyODQ0NDE5NTlFRDEwMDAwN0JDRTUgLyog
U2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE3Mjg0NDUxOTU5RUQxMDAwMDdCQ0U1IC8qIFNlc3Npb25TdGF0ZUNvbnZlcnNp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vzc2lvblN0YXRlQ29udmVy
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTc4MUFFNTFDNTcxNERBMDBG
Qjk2REQgLyogV2ViS2l0QWRkaXRpb25zLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViS2l0QWRkaXRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTc4NjVCNjE2Q0FDNkZEMDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3ODY1QjcxNkNBQzcx
NTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTc4NjVCODE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzNTYsNiArMjM2NywyMiBAQAogCQkxQUIxNkFFMDE2NDg2NTZEMDAy
OTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQjE2QUU3MTY0QjNBODgwMDI5MEQ2MiAvKiBS
ZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFCMTZBRTgxNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc3MTFEMUIyRjdFMDA3
QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBQjFGNzcyMUQxQjJGN0UwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGF5bWVudENv
b3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzczMUQxQjJG
N0UwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gV2ViUGF5bWVudENvb3JkaW5hdG9yLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc3ODFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBQjFGNzc5MUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUFCMUY3N0IxRDFCMzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFBQjFGNzdEMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQUIxRjc4ODFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc4OTFE
MUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3OEExRDFCMzM1NTAwN0M5QkQxIC8qIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQUIxRjc4RTFEMUIzNEE2MDA3QzlCRDEgLyogV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUFCMUY3OEYxRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVBcmd1bWVudENv
ZGVyc0NvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzkyMUQxQjM2
MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGF5bWVudENvb3JkaW5hdG9y
TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzkzMUQxQjM2
MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oOyBw
YXRoID0gV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUFCMUY3OTQxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
cGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3OTUxRDFCMzYxMzAwN0M5QkQxIC8qIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oOyBwYXRoID0g
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUIzMUE5MzE2QkM2NUFCMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXIubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQjMxQTk0MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdG9yYWdlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBQjMxQTk1MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VNYW5hZ2VyTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MTcsNyArNDQ0NCw3IEBA
CiAJCQkJNTE4RThFRjExNkIyMDhGMDAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uICovLAogCQkJ
CTFBQUYwQzQ3MTJCMTYzMjgwMDhFNDlFMiAvKiBjZiAqLywKIAkJCQlDMDFBMjVGRjEyNjYyRjIx
MDBDOUVENTUgLyogY2cgKi8sCi0JCQkJMzdDNEMwOTAxODE0QjM3QjAwMzY4OEI5IC8qIENvY29h
ICovLAorCQkJCTM3QzRDMDkwMTgxNEIzN0IwMDM2ODhCOSAvKiBjb2NvYSAqLywKIAkJCQk1MUUz
NTFDMjE4MEYyQzg1MDBFNTNCRTkgLyogRGF0YWJhc2VzICovLAogCQkJCUJDODI4MzY4MTZCMzU4
NzkwMEEyNzhGRSAvKiBFbnRyeVBvaW50VXRpbGl0aWVzICovLAogCQkJCUUxNzA4NzcyMTZENkNG
RUMwMEY5OTIyNiAvKiBGaWxlQVBJICovLApAQCAtNDYxOCw2ICs0NjQ1LDU0IEBACiAJCQlwYXRo
ID0gY2Y7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkxQUIxRjc3MDFEMUIy
RjVEMDA3QzlCRDEgLyogQXBwbGVQYXkgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTFBQjFGNzcxMUQxQjJGN0UwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3IuY3BwICovLAorCQkJCTFBQjFGNzcyMUQxQjJGN0UwMDdDOUJEMSAvKiBXZWJQYXlt
ZW50Q29vcmRpbmF0b3IuaCAqLywKKwkJCQkxQUIxRjc3MzFEMUIyRjdFMDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yLm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCXBhdGggPSBBcHBs
ZVBheTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBQjFGNzc2MUQxQjMw
QTkwMDdDOUJEMSAvKiBBcHBsZVBheSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMUFCMUY3NzcxRDFCMzBBOTAwN0M5QkQxIC8qIGNvY29hICovLAorCQkJ
CTFBQjFGNzdBMUQxQjMwQTkwMDdDOUJEMSAvKiBpb3MgKi8sCisJCQkJMUFCMUY3N0MxRDFCMzBB
OTAwN0M5QkQxIC8qIG1hYyAqLywKKwkJCQkxQUIxRjc4ODFEMUIzMzU1MDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwICovLAorCQkJCTFBQjFGNzg5MUQxQjMzNTUwMDdD
OUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oICovLAorCQkJCTFBQjFGNzhBMUQx
QjMzNTUwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiAq
LywKKwkJCSk7CisJCQlwYXRoID0gQXBwbGVQYXk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQkxQUIxRjc3NzFEMUIzMEE5MDA3QzlCRDEgLyogY29jb2EgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBQjFGNzc4MUQxQjMwQTkwMDdD
OUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmggKi8sCisJCQkJMUFCMUY3
NzkxRDFCMzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0g
Ki8sCisJCQkpOworCQkJcGF0aCA9IGNvY29hOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJMUFCMUY3N0ExRDFCMzBBOTAwN0M5QkQxIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUFCMUY3N0IxRDFCMzBBOTAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5SU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGgg
PSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxQUIxRjc3QzFEMUIz
MEE5MDA3QzlCRDEgLyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQkxQUIxRjc3RDFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHlNYWMubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1hYzsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTFBQjdENEM3MTI4OEFBOUEwMENGRDA4QyAvKiBEb3dubG9h
ZHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTE2MCwx
NiArNTIzNSwxNyBAQAogCQkJcGF0aCA9IENvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKLQkJMzdDNEMwOTAxODE0QjM3QjAwMzY4OEI5IC8qIENvY29hICovID0geworCQkz
N0M0QzA5MDE4MTRCMzdCMDAzNjg4QjkgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFBQjFGNzhFMUQxQjM0QTYwMDdDOUJEMSAvKiBXZWJD
b3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSAqLywKKwkJCQkxQUIxRjc4RjFEMUIzNEE2MDA3QzlC
RDEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EuaCAqLywKIAkJCQkxQTFFRjE5NzFBMUQ1
QjQyMDAyMzIwMEEgLyogQVBJRGF0YUNvY29hLm1tICovLAogCQkJCTM3OEUxQTNCMTgxRUQ2RkYw
MDMxMDA3QSAvKiBBUElPYmplY3QubW0gKi8sCiAJCQkJMzdCRUM0REYxOTQ5MTQ4NjAwOEI0Mjg2
IC8qIENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIuaCAqLywKIAkJCQkzN0JFQzRERTE5NDkx
NDg2MDA4QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5tbSAqLywKIAkJCQlD
NTVGOTE2QzFDNTk1RTQ0MDAyOUU5MkQgLyogRGF0YURldGVjdGlvblJlc3VsdC5oICovLAogCQkJ
CUM1NUY5MTZEMUM1OTVFNDQwMDI5RTkyRCAvKiBEYXRhRGV0ZWN0aW9uUmVzdWx0Lm1tICovLAot
CQkJCTFBNzgxQUU1MUM1NzE0REEwMEZCOTZERCAvKiBXZWJLaXRBZGRpdGlvbnMubW0gKi8sCiAJ
CQkJMzdDNEMwOTIxODE0QjNBRjAwMzY4OEI5IC8qIFdLTlNBcnJheS5oICovLAogCQkJCTM3QzRD
MDkxMTgxNEIzQUYwMDM2ODhCOSAvKiBXS05TQXJyYXkubW0gKi8sCiAJCQkJMzczQ0VBRDQxODU0
MTdBRTAwOEMzNjNEIC8qIFdLTlNEYXRhLmggKi8sCkBAIC01MTg5LDYgKzUyNjUsNyBAQAogCQkJ
CTM3OEUxQTNGMTgxRURBMDEwMDMxMDA3QSAvKiBXS09iamVjdC5oICovLAogCQkJCTM3NDQzNjg3
MTgyMEU3MjQwMDQ5NTc5RiAvKiBXS09iamVjdC5tbSAqLywKIAkJCSk7CisJCQluYW1lID0gY29j
b2E7CiAJCQlwYXRoID0gQ29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwpA
QCAtNTcxMyw2ICs1NzkwLDcgQEAKIAkJQkMwMzJENUMxMEY0MzZENTAwNThDMTVBIC8qIFdlYlBy
b2Nlc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFB
QjFGNzcwMUQxQjJGNUQwMDdDOUJEMSAvKiBBcHBsZVBheSAqLywKIAkJCQkxQzBBMTk0MzFDOEZG
MUE4MDBGRTBFQkIgLyogQXV0b21hdGlvbiAqLywKIAkJCQk3QzZFNzBGODE4QjJENDdFMDBGMjRF
MkUgLyogY29jb2EgKi8sCiAJCQkJMzMwOTM0NEIxMzE1QjkzQTAwOTdBN0JDIC8qIENvb2tpZXMg
Ki8sCkBAIC01ODUyLDYgKzU5MzAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlCQzAzMkRDNDEwRjQzODdDMDA1OEMxNUEgLyogQVBJICovLAorCQkJCTFBQjFG
Nzc2MUQxQjMwQTkwMDdDOUJEMSAvKiBBcHBsZVBheSAqLywKIAkJCQk1MTJGNTg4RDEyQTg4MzZG
MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb24gKi8sCiAJCQkJOTk1NUE2RTgxQzc5ODA5MDAwRUI2
QTkzIC8qIEF1dG9tYXRpb24gKi8sCiAJCQkJMUFCQzNERjIxODk5RTQxNTAwNEYwNjI2IC8qIENv
Y29hICovLApAQCAtNjg2MSw2ICs2OTQwLDEwIEBACiAJCUMwQ0U3MjlEMTI0N0U3MUQwMEJDMEVD
NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTFBQjFGNzkyMUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRp
bmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTFBQjFGNzkzMUQxQjM2MTMwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oICovLAorCQkJCTFBQjFGNzk0MUQx
QjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCisJCQkJMUFCMUY3OTUxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQk1MTJGNThBMDEyQTg4M0FEMDA2Mjk1MzAg
LyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQk1MTJG
NThBMTEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCAq
LywKIAkJCQk5OTU1QTZGMDFDNzk4NjY0MDBFQjZBOTMgLyogQXV0b21hdGlvbkJhY2tlbmREaXNw
YXRjaGVycy5jcHAgKi8sCkBAIC03NzAwLDYgKzc3ODMsNyBAQAogCQkJCTkzOTFGMkNCMTIxQjY3
QUQwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0I5RjZBMDExMjNBODRCMDBBMTM3RTAgLyogV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCMzhBMTEwRjUzOEJFMDA0NDNBMTUgLyogV2Vi
RnJhbWVQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUFCMUY3OTkxRDFCMzYxMzAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMUJFMUUwMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMwRTVGRTUxMkQ2OTcxNjAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0
aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwRTYwNjIxMkQ2QkE5MTAwMTJBNzJB
IC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3
ODEsNiArNzg2NSw3IEBACiAJCQkJQkMzMDY4MjQxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkE0QjkwMUE2NUE5
RTIwMDZDNEFCNCAvKiBXZWJQcm9jZXNzTGlmZXRpbWVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFGQTRCOEMxQTY1QTFEMDAwNkM0QUI0IC8qIFdlYlByb2Nlc3NMaWZldGltZVRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBQjFGNzhDMUQxQjMzNTUwMDdDOUJEMSAvKiBXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDY2QkYxMjVB
NDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NFNEQyMUIxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Q0U0RDIyODFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTAxLDYgKzc5ODYsNyBAQAogCQkJCTMzMDkzNDVCMTMx
NUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tpZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
MkY1OEZBMTJBODhBNTQwMDYyOTUzMCAvKiBXS0NyZWRlbnRpYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxOEFDRjExMTJCMDE1RjgwMEIwNEI4MyAvKiBXS0NyZWRlbnRpYWxUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUFCMUY3OTcxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29y
ZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzVGODEyNEZGMDI3MDA2
OEYyMEEgLyogV0tEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzdFQUQ0NTE3RTJDNTFBMDAy
RDE5M0QgLyogV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
NzJEQjJGMUE2NzdENEEwMEM2OTdDNSAvKiBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04MDQ4LDEwICs4MTM0LDEyIEBACiAJCQkJMUFEMDFCQ0QxOTA1
RDU0OTAwQzlDNDVGIC8qIFdLUmVsb2FkRnJhbWVFcnJvclJlY292ZXJ5QXR0ZW1wdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTlFMzI5QjE4MjJFMUNDMDBGNUQwNEMgLyogV0tSZW1vdGVPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOUUzMjlGMTgyMkZFREQwMEY1RDA0QyAvKiBXS1Jl
bW90ZU9iamVjdENvZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUIxRjc5MTFEMUIzNEE2MDA3
QzlCRDEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3OTQ4NDA5MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzNzYwODgyMzE1MDQxNEY3MDBGQzgyQzcgLyogV0tSZW5kZXJPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMzMzY3NjNCMTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2Fj
aGVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTlERDNDMDFEMDdEMTY4MDBBQzgyM0Ig
LyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFBQjFGNzdFMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNv
Y29hLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBNTAxNTExNzY1RjU2MDA3NTc1NzMgLyogV0tS
ZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0UzNzc5MThFNEE0RkUwMDNEMEZGRiAv
KiBXS1NjcmlwdE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0UzNzc1MThFNEEzM0Ew
MDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
MDQsNiArOTA5Miw3IEBACiAJCQkJQkNDNDNBQkExMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3Jt
UG9wdXBNZW51RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTZGQjdEMjExRTY1MUUyMDBE
QjEzNzEgLyogUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxQTY3RTBDMTY1QjJBOTkw
MDZDQkE2NiAvKiBQbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkxQUIxRjc5NjFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGNENDMTI1MjQwMzcwMEY3MDY3
RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDkx
QTYxMjgxRDczOTAwMUVCOTYyIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBOEVGOTZFMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDI1LDYgKzkxMTQs
NyBAQAogCQkJCTFBMEVDNzVGMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDkwQkIxMjgxQzkzMTAwMUVCOTYyIC8qIFBsdWdp
blByb2Nlc3NQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQzQjVEMTI0RDVFOUQw
MEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUFCMUY3NzQxRDFCMkY4QTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTA0M0RDMjEyNEZGODc1MDBGRkJGQjUgLyog
UGx1Z2luUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVC
OTYyIC8qIFBsdWdpblByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUZBNzAxMjUy
Qjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtOTIwNCw2ICs5Mjk0LDcgQEAKIAkJCQk1MTgzNDU5MjEzNDUzMkU5MDA5MkI2OTYg
LyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDAyRjY0
MTMyRUM1QjkwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTExQjI0QTYxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRh
YmFzZVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBQjFGNzdGMUQxQjMwQTkwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFEMDJGNkIxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDUyMzZGMUM3MzlENDIwMDc5OTND
QiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEw
NTIzNzkxQzczREE3NzAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyMjQsNyArOTMxNSw2IEBACiAJCQkJQzAz
MzdERDMxMjdBMkEwRTAwOEZGNEY0IC8qIFdlYktleWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE2MjgwRjMxOTE5OTgyQTAwNkFEOUY5IC8qIFdlYktpdC5tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM5QkE1MDQxNjk3QzQ1MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0aWFsaXplLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTFBNzgxQUU3MUM1NzE0REEwMEZCOTZERCAvKiBXZWJLaXRB
ZGRpdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUZCMDhGRjE2MzlERTFBMDBFQzMyNEEg
LyogV2ViTG9hZGVyU3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0QwMDNBNTIxOUQ0
OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzk4QzQ4QTUxQjZGRDRDMzAwMTQ1MTAzIC8qIFdlYk1lZGlhU2Vzc2lvbkZvY3Vz
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyNDQsOCArOTMzNCwxMCBAQAogCQkJCUJD
ODU3Rjg2MTJCODJEMEIwMEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzg1N0Y3RTEyQjgyQ0VFMDBFREVCMkUgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk2M0Q2QjEx
M0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUIxRjc4
QjFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8qIFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM3MkRCMjgxQTY3NTYyODAwQzY5
N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxQUIxRjc5ODFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMDcxMjlBMEE2
NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjI1
MzEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzdCNjIxNjEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC05MzY1LDYgKzk0NTcsNyBAQAogCQkJCUVEQ0E3MUI3MTI4RERBOEMw
MDIwMUIyNiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NjBDNTdBMTI0MEE1NDYwMDhDNUUyOSAvKiBXS0J1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMTRERjlFMTIwQjYzNUYwMDgyNkMwQyAvKiBXS0J1bmRsZVNjcmlwdFdv
cmxkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBQjFGNzgwMUQxQjMwQTkwMDdDOUJEMSAvKiBX
ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3
NUY1MTI0RkYwMjcwMDY4RjIwQSAvKiBXS0NlcnRpZmljYXRlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzQwNzYyODEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0EyODRENjE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05Mzc4LDYgKzk0NzEsNyBAQAogCQkJCTMzMDkz
NDVBMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tpZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzQwNzVGNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBQjFGNzkwMUQxQjM0QTYwMDdDOUJEMSAvKiBXZWJDb3JlQXJndW1l
bnRDb2RlcnNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlB
QjE1QSAvKiBXS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0
MDc1RjkxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzAxN0QwODE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1bWVudC5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtOTQ5MSw2ICs5NTg1LDcgQEAKIAkJCQkwRkNCNEU2OTE4QkJFM0Q5MDAwRkNG
QzkgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc2MDcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0Q1RUJCRTE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBQjFGNzgxMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjA5MTI0RkYwMjcwMDY4
RjIwQSAvKiBXS1VSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYxQjEyNEZGMDM3MDA2
OEYyMEEgLyogV0tVUkxDRi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjBCMTI0RkYwMjcw
MDY4RjIwQSAvKiBXS1VSTFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGlu
YXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ0ZmY0OTBkMTZlYmUwODg0YzVkOGQ0ZDJkN2Q3MTA5NjIw
NTZkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYXltZW50Q29vcmRp
bmF0b3IuaCIKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL01haW5G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGF5bWVudENvb3JkaW5hdG9yLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9VUkwuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBheW1lbnRDb29y
ZGluYXRvcjo6V2ViUGF5bWVudENvb3JkaW5hdG9yKFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBt
X3dlYlBhZ2Uod2ViUGFnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0aGlzKTsKK30KKworV2ViUGF5bWVudENv
b3JkaW5hdG9yOjp+V2ViUGF5bWVudENvb3JkaW5hdG9yKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBheW1lbnRDb29y
ZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOworfQor
Citib29sIFdlYlBheW1lbnRDb29yZGluYXRvcjo6c3VwcG9ydHNWZXJzaW9uKHVuc2lnbmVkIHZl
cnNpb24pCit7CisgICAgQVNTRVJUKHZlcnNpb24gPiAwKTsKKworICAgIGlmICh2ZXJzaW9uID09
IDEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFdlYlBheW1lbnRDb29yZGluYXRvcjo6Y2FuTWFrZVBheW1lbnRzKCkKK3sKKyAgICBib29sIGNh
bk1ha2VQYXltZW50czsKKyAgICBpZiAoIW1fd2ViUGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNhbk1ha2VQYXltZW50cygpLCBNZXNzYWdlczo6V2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNhbk1ha2VQYXltZW50czo6UmVwbHkoY2FuTWFrZVBh
eW1lbnRzKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjYW5NYWtlUGF5
bWVudHM7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUNhbk1ha2VQYXltZW50c1dpdGhB
Y3RpdmVDYXJkUmVwbHlJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNhbk1ha2VQYXltZW50
c1dpdGhBY3RpdmVDYXJkUmVwbHlJRDsKKworICAgIHJldHVybiArK2Nhbk1ha2VQYXltZW50c1dp
dGhBY3RpdmVDYXJkUmVwbHlJRDsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmNh
bk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbk5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gcmVwbHlJRCA9IGdlbmVyYXRlQ2FuTWFr
ZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmRSZXBseUlEKCk7CisKKyAgICBtX3BlbmRpbmdDYW5NYWtl
UGF5bWVudHNXaXRoQWN0aXZlQ2FyZENhbGxiYWNrcy5hZGQocmVwbHlJRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eTo6Q2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQobWVyY2hhbnRJ
ZGVudGlmaWVyLCBkb21haW5OYW1lLCByZXBseUlEKSk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENv
b3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYXRpbmdV
UkwsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNv
cmU6OlBheW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBsaW5rSWNvblVSTFN0cmluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTCA6
IGxpbmtJY29uVVJMcykKKyAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChsaW5rSWNv
blVSTC5zdHJpbmcoKSk7CisKKyAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXltZW50VUkob3JpZ2luYXRpbmdVUkwuc3RyaW5nKCks
IGxpbmtJY29uVVJMU3RyaW5ncywgcGF5bWVudFJlcXVlc3QpKTsKK30KKwordm9pZCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3I6OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6
OlBheW1lbnRNZXJjaGFudFNlc3Npb24mIHBheW1lbnRNZXJjaGFudFNlc3Npb24pCit7CisgICAg
bV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpDb21w
bGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50TWVyY2hhbnRTZXNzaW9uKSk7Cit9CisKK3Zv
aWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9u
KFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cywgT3B0aW9uYWw8V2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiBuZXdUb3RhbEFuZEl0ZW1z
KQoreworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eTo6Q29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oc3RhdHVzKSwgbmV3VG90YWxBbmRJdGVtcykpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29y
ZGluYXRvcjo6Y29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oV2ViQ29yZTo6UGF5bWVu
dEF1dGhvcml6YXRpb25TdGF0dXMgc3RhdHVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGF5bWVu
dFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPiYgbmV3U2hpcHBpbmdNZXRob2RzLCBPcHRpb25hbDxX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+IG5ld1RvdGFsQW5kSXRl
bXMpCit7CisgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRv
clByb3h5OjpDb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihzdGF0aWNfY2FzdDx1aW50
MzJfdD4oc3RhdHVzKSwgbmV3U2hpcHBpbmdNZXRob2RzLCBuZXdUb3RhbEFuZEl0ZW1zKSk7Cit9
CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpjb21wbGV0ZVBheW1lbnRNZXRob2RTZWxl
Y3Rpb24oT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1z
PiBuZXdUb3RhbEFuZEl0ZW1zKQoreworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eTo6Q29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKG5l
d1RvdGFsQW5kSXRlbXMpKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmNvbXBs
ZXRlUGF5bWVudFNlc3Npb24oV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMgc3Rh
dHVzKQoreworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eTo6Q29tcGxldGVQYXltZW50U2Vzc2lvbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3Rh
dHVzKSkpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6YWJvcnRQYXltZW50U2Vz
c2lvbigpCit7CisgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5OjpBYm9ydFBheW1lbnRTZXNzaW9uKCkpOworfQorCit2b2lkIFdlYlBheW1lbnRD
b29yZGluYXRvcjo6bWFpbkZyYW1lRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30K
Kwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OnZhbGlkYXRlTWVyY2hhbnQoY29uc3QgU3Ry
aW5nJiB2YWxpZGF0aW9uVVJMU3RyaW5nKQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigpLnZh
bGlkYXRlTWVyY2hhbnQoV2ViQ29yZTo6VVJMKFdlYkNvcmU6OlVSTCgpLCB2YWxpZGF0aW9uVVJM
U3RyaW5nKSk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpkaWRBdXRob3JpemVQ
YXltZW50KGNvbnN0IFdlYkNvcmU6OlBheW1lbnQmIHBheW1lbnQpCit7CisgICAgcGF5bWVudENv
b3JkaW5hdG9yKCkuZGlkQXV0aG9yaXplUGF5bWVudChwYXltZW50KTsKK30KKwordm9pZCBXZWJQ
YXltZW50Q29vcmRpbmF0b3I6OmRpZFNlbGVjdFNoaXBwaW5nTWV0aG9kKGNvbnN0IFdlYkNvcmU6
OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZCYgc2hpcHBpbmdNZXRob2QpCit7CisgICAg
cGF5bWVudENvb3JkaW5hdG9yKCkuZGlkU2VsZWN0U2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRo
b2QpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6ZGlkU2VsZWN0U2hpcHBpbmdD
b250YWN0KGNvbnN0IFdlYkNvcmU6OlBheW1lbnRDb250YWN0JiBzaGlwcGluZ0NvbnRhY3QpCit7
CisgICAgcGF5bWVudENvb3JkaW5hdG9yKCkuZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0KHNoaXBw
aW5nQ29udGFjdCk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpkaWRTZWxlY3RQ
YXltZW50TWV0aG9kKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXRob2QmIHBheW1lbnRNZXRob2Qp
Cit7CisgICAgcGF5bWVudENvb3JkaW5hdG9yKCkuZGlkU2VsZWN0UGF5bWVudE1ldGhvZChwYXlt
ZW50TWV0aG9kKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmRpZENhbmNlbFBh
eW1lbnQoKQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigpLmRpZENhbmNlbFBheW1lbnQoKTsK
K30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmNhbk1ha2VQYXltZW50c1dpdGhBY3Rp
dmVDYXJkUmVwbHkodWludDY0X3QgcmVxdWVzdElELCBib29sIGNhbk1ha2VQYXltZW50cykKK3sK
KyAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nQ2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNh
cmRDYWxsYmFja3MudGFrZShyZXF1ZXN0SUQpOworICAgIGNhbGxiYWNrKGNhbk1ha2VQYXltZW50
cyk7Cit9CisKK1dlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvciYgV2ViUGF5bWVudENvb3JkaW5h
dG9yOjpwYXltZW50Q29vcmRpbmF0b3IoKQoreworICAgIHJldHVybiBtX3dlYlBhZ2UubWFpbkZy
YW1lKCktPnBheW1lbnRDb29yZGluYXRvcigpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3Jk
aW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZmNDdhZDMxNDA3MWEwNGEyYzA0NDA2YTEzNDM5NGYyMGFk
MmY5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGF5bWVudEhlYWRlcnMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BheW1lbnRDb29yZGluYXRvckNsaWVudC5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIElQ
QyB7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBQYXltZW50Q29vcmRpbmF0b3I7CitjbGFzcyBQYXltZW50Q29udGFjdDsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYlBheW1lbnRDb29yZGlu
YXRvciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3JDbGllbnQsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlBh
eW1lbnRDb29yZGluYXRvcihXZWJQYWdlJik7CisgICAgfldlYlBheW1lbnRDb29yZGluYXRvcigp
OworCitwcml2YXRlOgorICAgIC8vIFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvckNsaWVudC4K
KyAgICBib29sIHN1cHBvcnRzVmVyc2lvbih1bnNpZ25lZCB2ZXJzaW9uKSBvdmVycmlkZTsKKyAg
ICBib29sIGNhbk1ha2VQYXltZW50cygpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmQoY29uc3QgU3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZG9tYWluTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxldGlv
bkhhbmRsZXIpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd1BheW1lbnRVSShjb25zdCBXZWJDb3Jl
OjpVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VVJMPiYgbGlua0lj
b25VUkxzLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYpIG92ZXJyaWRlOworICAgIHZv
aWQgY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oY29uc3QgV2ViQ29yZTo6UGF5bWVudE1lcmNo
YW50U2Vzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tcGxldGVTaGlwcGluZ01ldGhvZFNl
bGVjdGlvbihXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cywgT3B0aW9uYWw8V2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiBuZXdUb3RhbEFuZEl0ZW1z
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKFdl
YkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPiYsIE9wdGlvbmFsPFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4gbmV3VG90YWxBbmRJdGVtcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBjb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oT3B0aW9uYWw8V2ViQ29y
ZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjb21wbGV0ZVBheW1lbnRTZXNzaW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3Rh
dHVzIHN0YXR1cykgb3ZlcnJpZGU7CisgICAgdm9pZCBhYm9ydFBheW1lbnRTZXNzaW9uKCkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIG1haW5GcmFtZURlc3Ryb3llZCgpIG92ZXJyaWRlOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBN
ZXNzYWdlIGhhbmRsZXJzLgorICAgIHZvaWQgdmFsaWRhdGVNZXJjaGFudChjb25zdCBTdHJpbmcm
IHZhbGlkYXRpb25VUkxTdHJpbmcpOworICAgIHZvaWQgZGlkQXV0aG9yaXplUGF5bWVudChjb25z
dCBXZWJDb3JlOjpQYXltZW50Jik7CisgICAgdm9pZCBkaWRTZWxlY3RTaGlwcGluZ01ldGhvZChj
b25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmKTsKKyAgICB2b2lk
IGRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdChjb25zdCBXZWJDb3JlOjpQYXltZW50Q29udGFjdCYp
OworICAgIHZvaWQgZGlkU2VsZWN0UGF5bWVudE1ldGhvZChjb25zdCBXZWJDb3JlOjpQYXltZW50
TWV0aG9kJik7CisgICAgdm9pZCBkaWRDYW5jZWxQYXltZW50KCk7CisgICAgdm9pZCBjYW5NYWtl
UGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBjYW5N
YWtlUGF5bWVudHMpOworCisgICAgV2ViQ29yZTo6UGF5bWVudENvb3JkaW5hdG9yJiBwYXltZW50
Q29vcmRpbmF0b3IoKTsKKworICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKworICAgIEhhc2hNYXA8
dWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+PiBtX3BlbmRpbmdDYW5NYWtlUGF5
bWVudHNXaXRoQWN0aXZlQ2FyZENhbGxiYWNrczsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0
b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBh
eW1lbnRDb29yZGluYXRvci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTM3OTdkZmJkODY4NTlm
MTBjZDJiNTU0OTMxODVkZDE3N2FlZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IubWVzc2FnZXMuaW4K
QEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMv
CisKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorCittZXNzYWdlcyAtPiBXZWJQYXltZW50Q29vcmRp
bmF0b3IgeworCisgICAgVmFsaWRhdGVNZXJjaGFudChTdHJpbmcgdmFsaWRhdGlvblVSTFN0cmlu
ZykKKyAgICBEaWRBdXRob3JpemVQYXltZW50KFdlYkNvcmU6OlBheW1lbnQgcGF5bWVudCkKKyAg
ICBEaWRTZWxlY3RTaGlwcGluZ01ldGhvZChXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBp
bmdNZXRob2Qgc2hpcHBpbmdNZXRob2QpCisgICAgRGlkU2VsZWN0U2hpcHBpbmdDb250YWN0KFdl
YkNvcmU6OlBheW1lbnRDb250YWN0IHNoaXBwaW5nQ29udGFjdCkKKyAgICBEaWRTZWxlY3RQYXlt
ZW50TWV0aG9kKFdlYkNvcmU6OlBheW1lbnRNZXRob2QgcGF5bWVudE1ldGhvZCkKKyAgICBEaWRD
YW5jZWxQYXltZW50KCkKKyAgICBDYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5KHVp
bnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBjYW5NYWtlUGF5bWVudHMpCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281986</attachid>
            <date>2016-06-24 09:39:38 -0700</date>
            <delta_ts>2016-06-24 10:36:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159041-20160624093927.patch</filename>
            <type>text/plain</type>
            <size>122225</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGQ3Y2Y3ODhjMTcwYzQ2
YmM0ZDczZDQzMzVjYTgyNmE2ZjAzNzk1Ni4uODc5ZjQ5MDcyYWNhZjMwM2ZlYTIxYWQyNDkxZWFi
MTc0MGRjMWQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA2LTIyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWJLaXQy
IEFwcGxlIFBheSBjb2RlIHRvIHRoZSBvcGVuIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkwNDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLmg6
IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2Nv
YS5tbTogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FwcGxlUGF5L1dl
YlBheW1lbnRDb29yZGluYXRvclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
cHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5Q29jb2EuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dl
YlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW06IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BcHBsZVBheS9pb3MvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1MubW06IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BcHBsZVBheS9tYWMvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlNYWMubW06IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9BcHBsZVBh
eS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5tZXNzYWdlcy5pbjogQWRkZWQu
CisKIDIwMTYtMDYtMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgbG9nZ2luZyByZWxhdGVkIHRvIHByb2Nlc3MgYXNzZXJ0aW9ucyB0byBoZWxwIGRlYnVn
IHByb2Nlc3Mgc3VzcGVuc2lvbiBpc3N1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMjNhZjVl
OGVmYWQzY2JkMjU0ZmU3N2ZhZjgxNjk2MDQ4NmVkOTE4OS4uODZkOTg2YjViN2FjYWVmNzY5Mzc0
OTYyYTIzZWMxM2RkMmY5NTMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTI5LDYgKzI5LDcg
QEAgc2V0KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwIgorICAgICIke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQXBwbGVQYXkiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BdXRoZW50
aWNhdGlvbiIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0F1dG9tYXRpb24iCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9EYXRhYmFzZXMiCkBAIC00Myw2ICs0NCw3IEBAIHNl
dChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9j
ZXNzL1VzZXJDb250ZW50IgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MiCisgICAgIiR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvQXBwbGVQYXkiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvQXBw
bGljYXRpb25DYWNoZSIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9BdXRvbWF0aW9u
IgogICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0JhdHRlcnkiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdDIvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCBhMTViYmZiMjI5ZTU2NTAxZmViZjA0MTY1OWQ3ZGE5MGYwOTA0
NWUxLi4yMjBiOGE4NTZkMmI5MzhjN2FiYjA4ZmRiN2FjZDczN2Q0ZmE5ZjM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBcCiAgICAgJChX
ZWJLaXQyKS9TaGFyZWQvQVBJL0NvY29hIFwKICAgICAkKFdlYktpdDIpL1NoYXJlZC9BdXRoZW50
aWNhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9TaGFyZWQvbWFjIFwKKyAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvQXBwbGVQYXkgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9BcHBsaWNhdGlv
bkNhY2hlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvQXV0b21hdGlvbiBcCiAgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTcsNiArNTgsNyBAQCBWUEFUSCA9IFwK
ICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvaW9zIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nl
c3MgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BcHBsZVBheSBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvQXV0b21hdGlvbiBcCiAgICAg
JChXZWJLaXQyKS9VSVByb2Nlc3MvQ29jb2EgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0Rh
dGFiYXNlcyBcCkBAIC0xMzgsNiArMTQwLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAg
V2ViUGFnZSBcCiAgICAgV2ViUGFnZVByb3h5IFwKICAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAor
ICAgIFdlYlBheW1lbnRDb29yZGluYXRvciBcCisgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHkgXAogICAgIFdlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIgXAogICAgIFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI5NGFmNGNhMGI1NGMwNzExNjA4MjQ5YWZlY2YzNWQ3M2IxM2RmODMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzQ29jb2EuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorCisjaW5jbHVkZSA8V2ViQ29yZS9QYXltZW50SGVhZGVy
cy5oPgorCituYW1lc3BhY2UgSVBDIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQYXltZW50PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
QXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6UGF5bWVudCYpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50Q29udGFjdD4geworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXltZW50Q29u
dGFjdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3Jl
OjpQYXltZW50Q29udGFjdCYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uPiB7CisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Np
b24mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6
UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWV0aG9kPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXRob2QmKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6UGF5bWVudE1ldGhv
ZCYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShB
cmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYpOworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6QWRkcmVz
c0ZpZWxkcz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxkcyYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6QWRk
cmVzc0ZpZWxkcyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVt
Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBh
eW1lbnRSZXF1ZXN0OjpMaW5lSXRlbSYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRpZXM+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzJik7CisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpNZXJjaGFu
dENhcGFiaWxpdGllcyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6
OlNoaXBwaW5nTWV0aG9kJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYsIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZCYpOworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U3Vw
cG9ydGVkTmV0d29ya3M+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdvcmtzJik7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpTdXBwb3J0ZWROZXR3b3JrcyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zJik7CisgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExp
bmVJdGVtcyYpOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42YjViMmU1MTRiNWVjNDk4ZGFiZGE5NGQ2YzlhYjQyN2MwYWI5MWNkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworI2lmIEVOQUJMRShBUFBMRV9Q
QVkpCisKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgPFBhc3NLaXQvUGFzc0tp
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorCisjaWYgUExBVEZPUk0oTUFD
KQorU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFBhc3NLaXQpCisjZWxzZQorU09GVF9MSU5L
X0ZSQU1FV09SSyhQYXNzS2l0KQorI2VuZGlmCisKK1NPRlRfTElOS19DTEFTUyhQYXNzS2l0LCBQ
S0NvbnRhY3QpOworU09GVF9MSU5LX0NMQVNTKFBhc3NLaXQsIFBLUGF5bWVudCk7CitTT0ZUX0xJ
TktfQ0xBU1MoUGFzc0tpdCwgUEtQYXltZW50TWV0aG9kKTsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBJUEMgeworCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UGF5bWVudD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6
OlBheW1lbnQmIHBheW1lbnQpCit7CisgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJs
ZURhdGEgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5
ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQo
KV0pOworCisgICAgW2FyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisKKyAg
ICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0OnBheW1lbnQucGtQYXltZW50KCkgZm9yS2V5Ok5TS2V5
ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsK
KworICAgIGVuY29kZXIgPDwgRGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQYXltZW50Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2Vi
Q29yZTo6UGF5bWVudCYgcGF5bWVudCkKK3sKKyAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJl
ZmVyZW5jZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0
IHZvaWQqPihkYXRhUmVmZXJlbmNlLmRhdGEoKSkpIGxlbmd0aDpkYXRhUmVmZXJlbmNlLnNpemUo
KSBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICBhdXRvIHVuYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNL
ZXllZFVuYXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5nV2l0aERhdGE6ZGF0YS5nZXQoKV0p
OworICAgIFt1bmFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisgICAgQHRy
eSB7CisgICAgICAgIFBLUGF5bWVudCAqcGtQYXltZW50ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2Jq
ZWN0T2ZDbGFzczpnZXRQS1BheW1lbnRDbGFzcygpIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RP
YmplY3RLZXldOworICAgICAgICBwYXltZW50ID0gUGF5bWVudChwa1BheW1lbnQpOworICAgIH0g
QGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGRlY29kZSBQS1BheW1lbnQ6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFt1bmFyY2hpdmVyIGZpbmlzaERlY29kaW5nXTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRDb250
YWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UGF5
bWVudENvbnRhY3QmIHBheW1lbnRDb250YWN0KQoreworICAgIGF1dG8gZGF0YSA9IGFkb3B0TlMo
W1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBhcmNoaXZlciA9IGFkb3B0
TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JXcml0aW5nV2l0aE11dGFibGVEYXRh
OmRhdGEuZ2V0KCldKTsKKworICAgIFthcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZ
RVNdOworCisgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpwYXltZW50Q29udGFjdC5wa0NvbnRh
Y3QoKSBmb3JLZXk6TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKKyAgICBbYXJjaGl2ZXIg
ZmluaXNoRW5jb2RpbmddOworCisgICAgZW5jb2RlciA8PCBEYXRhUmVmZXJlbmNlKHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKK30KKwor
Ym9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRDb250YWN0Pjo6ZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UGF5bWVudENvbnRhY3QmIHBheW1lbnRDb250
YWN0KQoreworICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0Nv
cHk6Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KGRhdGFSZWZlcmVu
Y2UuZGF0YSgpKSkgbGVuZ3RoOmRhdGFSZWZlcmVuY2Uuc2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10p
OworICAgIGF1dG8gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxv
Y10gaW5pdEZvclJlYWRpbmdXaXRoRGF0YTpkYXRhLmdldCgpXSk7CisgICAgW3VuYXJjaGl2ZXIg
c2V0UmVxdWlyZXNTZWN1cmVDb2Rpbmc6WUVTXTsKKyAgICBAdHJ5IHsKKyAgICAgICAgUEtDb250
YWN0ICpwa0NvbnRhY3QgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOmdldFBLQ29u
dGFjdENsYXNzKCkgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgICAg
IHBheW1lbnRDb250YWN0ID0gUGF5bWVudENvbnRhY3QocGtDb250YWN0KTsKKyAgICB9IEBjYXRj
aCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBkZWNvZGUgUEtDb250YWN0OiAlQCIsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRT
ZXNzaW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYgcGF5bWVudE1lcmNoYW50U2Vzc2lvbikKK3sKKyAgICBl
bmNvZGVyIDw8IHBheW1lbnRNZXJjaGFudFNlc3Npb24ubWVyY2hhbnRJZGVudGlmaWVyOworICAg
IGVuY29kZXIgPDwgcGF5bWVudE1lcmNoYW50U2Vzc2lvbi5zZXNzaW9uSWRlbnRpZmllcjsKKyAg
ICBlbmNvZGVyIDw8IHBheW1lbnRNZXJjaGFudFNlc3Npb24ubm9uY2U7CisgICAgZW5jb2RlciA8
PCBwYXltZW50TWVyY2hhbnRTZXNzaW9uLmRvbWFpbk5hbWU7CisgICAgZW5jb2RlciA8PCBwYXlt
ZW50TWVyY2hhbnRTZXNzaW9uLmVwb2NoVGltZXN0YW1wOworICAgIGVuY29kZXIgPDwgcGF5bWVu
dE1lcmNoYW50U2Vzc2lvbi5zaWduYXR1cmU7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgV2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYgcGF5bWVudE1lcmNoYW50U2Vz
c2lvbikKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBheW1lbnRNZXJjaGFudFNlc3Npb24u
bWVyY2hhbnRJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5zZXNzaW9uSWRlbnRpZmllcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBheW1lbnRNZXJj
aGFudFNlc3Npb24ubm9uY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShwYXltZW50TWVyY2hhbnRTZXNzaW9uLmRvbWFpbk5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXltZW50TWVyY2hhbnRTZXNz
aW9uLmVwb2NoVGltZXN0YW1wKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5zaWduYXR1cmUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlBheW1lbnRNZXRob2Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBXZWJDb3JlOjpQYXltZW50TWV0aG9kJiBwYXltZW50TWV0aG9kKQoreworICAgIGF1
dG8gZGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byBhcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JXcml0
aW5nV2l0aE11dGFibGVEYXRhOmRhdGEuZ2V0KCldKTsKKworICAgIFthcmNoaXZlciBzZXRSZXF1
aXJlc1NlY3VyZUNvZGluZzpZRVNdOworCisgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpwYXlt
ZW50TWV0aG9kLnBrUGF5bWVudE1ldGhvZCgpIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmpl
Y3RLZXldOworICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107CisKKyAgICBlbmNvZGVyIDw8
IERhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtkYXRhIGJ5dGVzXSks
IFtkYXRhIGxlbmd0aF0pOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVu
dE1ldGhvZD46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlBheW1l
bnRNZXRob2QmIHBheW1lbnRNZXRob2QpCit7CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFS
ZWZlcmVuY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhUmVmZXJlbmNlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25z
dCB2b2lkKj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkpKSBsZW5ndGg6ZGF0YVJlZmVyZW5jZS5zaXpl
KCkgZnJlZVdoZW5Eb25lOk5PXSk7CisgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05T
S2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ1dpdGhEYXRhOmRhdGEuZ2V0KCld
KTsKKyAgICBbdW5hcmNoaXZlciBzZXRSZXF1aXJlc1NlY3VyZUNvZGluZzpZRVNdOworICAgIEB0
cnkgeworICAgICAgICBQS1BheW1lbnRNZXRob2QgKnBrUGF5bWVudE1ldGhvZCA9IFt1bmFyY2hp
dmVyIGRlY29kZU9iamVjdE9mQ2xhc3M6Z2V0UEtQYXltZW50TWV0aG9kQ2xhc3MoKSBmb3JLZXk6
TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKKyAgICAgICAgcGF5bWVudE1ldGhvZCA9IFBh
eW1lbnRNZXRob2QocGtQYXltZW50TWV0aG9kKTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmV4Y2VwdGlvbikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgUEtQYXlt
ZW50OiAlQCIsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQXJndW1lbnRDb2RlcjxQYXltZW50UmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGVuY29kZXIg
PDwgcmVxdWVzdC5jb3VudHJ5Q29kZSgpOworICAgIGVuY29kZXIgPDwgcmVxdWVzdC5jdXJyZW5j
eUNvZGUoKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3QucmVxdWlyZWRCaWxsaW5nQWRkcmVzc0Zp
ZWxkcygpOworICAgIGVuY29kZXIgPDwgcmVxdWVzdC5iaWxsaW5nQ29udGFjdCgpOworICAgIGVu
Y29kZXIgPDwgcmVxdWVzdC5yZXF1aXJlZFNoaXBwaW5nQWRkcmVzc0ZpZWxkcygpOworICAgIGVu
Y29kZXIgPDwgcmVxdWVzdC5zaGlwcGluZ0NvbnRhY3QoKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVl
c3QubWVyY2hhbnRDYXBhYmlsaXRpZXMoKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3Quc3VwcG9y
dGVkTmV0d29ya3MoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVxdWVzdC5zaGlwcGluZ1R5
cGUoKSk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygpOworICAgIGVu
Y29kZXIgPDwgcmVxdWVzdC5saW5lSXRlbXMoKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3QudG90
YWwoKTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3QuYXBwbGljYXRpb25EYXRhKCk7Cit9CisKK2Jv
b2wgQXJndW1lbnRDb2RlcjxQYXltZW50UmVxdWVzdD46OmRlY29kZShBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIFBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFN0cmluZyBjb3VudHJ5
Q29kZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50cnlDb2RlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0Q291bnRyeUNvZGUoY291bnRyeUNvZGUpOworCisg
ICAgU3RyaW5nIGN1cnJlbmN5Q29kZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGN1cnJlbmN5
Q29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXF1ZXN0LnNldEN1cnJlbmN5Q29k
ZShjdXJyZW5jeUNvZGUpOworCisgICAgUGF5bWVudFJlcXVlc3Q6OkFkZHJlc3NGaWVsZHMgcmVx
dWlyZWRCaWxsaW5nQWRkcmVzc0ZpZWxkczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKChyZXF1
aXJlZEJpbGxpbmdBZGRyZXNzRmllbGRzKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXF1ZXN0LnNldFJlcXVpcmVkQmlsbGluZ0FkZHJlc3NGaWVsZHMocmVxdWlyZWRCaWxsaW5nQWRk
cmVzc0ZpZWxkcyk7CisKKyAgICBQYXltZW50Q29udGFjdCBiaWxsaW5nQ29udGFjdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGJpbGxpbmdDb250YWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlcXVlc3Quc2V0QmlsbGluZ0NvbnRhY3QoYmlsbGluZ0NvbnRhY3QpOworCisgICAg
UGF5bWVudFJlcXVlc3Q6OkFkZHJlc3NGaWVsZHMgcmVxdWlyZWRTaGlwcGluZ0FkZHJlc3NGaWVs
ZHM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSgocmVxdWlyZWRTaGlwcGluZ0FkZHJlc3NGaWVs
ZHMpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0UmVxdWlyZWRTaGlw
cGluZ0FkZHJlc3NGaWVsZHMocmVxdWlyZWRTaGlwcGluZ0FkZHJlc3NGaWVsZHMpOworCisgICAg
UGF5bWVudENvbnRhY3Qgc2hpcHBpbmdDb250YWN0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2hpcHBpbmdDb250YWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0
U2hpcHBpbmdDb250YWN0KHNoaXBwaW5nQ29udGFjdCk7CisKKyAgICBQYXltZW50UmVxdWVzdDo6
TWVyY2hhbnRDYXBhYmlsaXRpZXMgbWVyY2hhbnRDYXBhYmlsaXRpZXM7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShtZXJjaGFudENhcGFiaWxpdGllcykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXF1ZXN0LnNldE1lcmNoYW50Q2FwYWJpbGl0aWVzKG1lcmNoYW50Q2FwYWJpbGl0aWVz
KTsKKworICAgIFBheW1lbnRSZXF1ZXN0OjpTdXBwb3J0ZWROZXR3b3JrcyBzdXBwb3J0ZWROZXR3
b3JrczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdvcmtzKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0U3VwcG9ydGVkTmV0d29ya3Moc3VwcG9y
dGVkTmV0d29ya3MpOworCisgICAgUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nVHlwZSBzaGlwcGlu
Z1R5cGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oc2hpcHBpbmdUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0U2hpcHBpbmdUeXBlKHNoaXBwaW5nVHlw
ZSk7CisKKyAgICBWZWN0b3I8UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPiBzaGlwcGlu
Z01ldGhvZHM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaGlwcGluZ01ldGhvZHMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRTaGlwcGluZ01ldGhvZHMoc2hpcHBp
bmdNZXRob2RzKTsKKworICAgIFZlY3RvcjxQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0+IGxpbmVJ
dGVtczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxpbmVJdGVtcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXF1ZXN0LnNldExpbmVJdGVtcyhsaW5lSXRlbXMpOworCisgICAgUGF5
bWVudFJlcXVlc3Q6OkxpbmVJdGVtIHRvdGFsOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodG90
YWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVxdWVzdC5zZXRUb3RhbCh0b3RhbCk7
CisKKyAgICBTdHJpbmcgYXBwbGljYXRpb25EYXRhOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
YXBwbGljYXRpb25EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlcXVlc3Quc2V0
QXBwbGljYXRpb25EYXRhKGFwcGxpY2F0aW9uRGF0YSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpBZGRyZXNzRmllbGRzPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGF5bWVudFJlcXVlc3Q6OkFkZHJl
c3NGaWVsZHMmIGFkZHJlc3NGaWVsZHMpCit7CisgICAgZW5jb2RlciA8PCBhZGRyZXNzRmllbGRz
LnBvc3RhbEFkZHJlc3M7CisgICAgZW5jb2RlciA8PCBhZGRyZXNzRmllbGRzLnBob25lOworICAg
IGVuY29kZXIgPDwgYWRkcmVzc0ZpZWxkcy5lbWFpbDsKKyAgICBlbmNvZGVyIDw8IGFkZHJlc3NG
aWVsZHMubmFtZTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpBZGRy
ZXNzRmllbGRzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGF5bWVudFJlcXVl
c3Q6OkFkZHJlc3NGaWVsZHMmIGFkZHJlc3NGaWVsZHMpCit7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShhZGRyZXNzRmllbGRzLnBvc3RhbEFkZHJlc3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhZGRyZXNzRmllbGRzLnBob25lKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYWRkcmVzc0ZpZWxkcy5lbWFp
bCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFkZHJl
c3NGaWVsZHMubmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUGF5bWVudFJlcXVlc3Q6OkxpbmVJ
dGVtJiBsaW5lSXRlbSkKK3sKKyAgICBlbmNvZGVyLmVuY29kZUVudW0obGluZUl0ZW0udHlwZSk7
CisgICAgZW5jb2RlciA8PCBsaW5lSXRlbS5sYWJlbDsKKyAgICBlbmNvZGVyIDw8IGxpbmVJdGVt
LmFtb3VudDsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpMaW5lSXRl
bT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFBheW1lbnRSZXF1ZXN0OjpMaW5l
SXRlbSYgbGluZUl0ZW0pCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0obGluZUl0ZW0u
dHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxp
bmVJdGVtLmxhYmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobGluZUl0ZW0uYW1vdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxQYXltZW50UmVxdWVzdDo6TWVyY2hh
bnRDYXBhYmlsaXRpZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQ
YXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRpZXMmIG1lcmNoYW50Q2FwYWJpbGl0aWVz
KQoreworICAgIGVuY29kZXIgPDwgbWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHMzRFM7Cisg
ICAgZW5jb2RlciA8PCBtZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0c0VNVjsKKyAgICBlbmNv
ZGVyIDw8IG1lcmNoYW50Q2FwYWJpbGl0aWVzLnN1cHBvcnRzQ3JlZGl0OworICAgIGVuY29kZXIg
PDwgbWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNEZWJpdDsKK30KKworYm9vbCBBcmd1bWVu
dENvZGVyPFBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmRlY29kZShBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGll
cyYgbWVyY2hhbnRDYXBhYmlsaXRpZXMpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXJj
aGFudENhcGFiaWxpdGllcy5zdXBwb3J0czNEUykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lcmNoYW50Q2FwYWJpbGl0aWVzLnN1cHBvcnRzRU1WKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVyY2hhbnRD
YXBhYmlsaXRpZXMuc3VwcG9ydHNDcmVkaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShtZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0c0RlYml0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxQYXltZW50UmVxdWVzdDo6U3VwcG9ydGVkTmV0d29ya3M+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQYXltZW50UmVxdWVzdDo6U3VwcG9ydGVkTmV0
d29ya3MmIHN1cHBvcnRlZE5ldHdvcmtzKQoreworICAgIGVuY29kZXIgPDwgc3VwcG9ydGVkTmV0
d29ya3MuYW1leDsKKyAgICBlbmNvZGVyIDw8IHN1cHBvcnRlZE5ldHdvcmtzLmNoaW5hVW5pb25Q
YXk7CisgICAgZW5jb2RlciA8PCBzdXBwb3J0ZWROZXR3b3Jrcy5kaXNjb3ZlcjsKKyAgICBlbmNv
ZGVyIDw8IHN1cHBvcnRlZE5ldHdvcmtzLmludGVyYWM7CisgICAgZW5jb2RlciA8PCBzdXBwb3J0
ZWROZXR3b3Jrcy5tYXN0ZXJDYXJkOworICAgIGVuY29kZXIgPDwgc3VwcG9ydGVkTmV0d29ya3Mu
cHJpdmF0ZUxhYmVsOworICAgIGVuY29kZXIgPDwgc3VwcG9ydGVkTmV0d29ya3MudmlzYTsKK30K
KworYm9vbCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpTdXBwb3J0ZWROZXR3b3Jrcz46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFBheW1lbnRSZXF1ZXN0OjpTdXBwb3J0
ZWROZXR3b3JrcyYgc3VwcG9ydGVkTmV0d29ya3MpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdXBwb3J0ZWROZXR3b3Jrcy5hbWV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3VwcG9ydGVkTmV0d29ya3MuY2hpbmFVbmlvblBheSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdv
cmtzLmRpc2NvdmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3VwcG9ydGVkTmV0d29ya3MuaW50ZXJhYykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN1cHBvcnRlZE5ldHdvcmtzLm1hc3RlckNhcmQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdXBwb3J0ZWRO
ZXR3b3Jrcy5wcml2YXRlTGFiZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzdXBwb3J0ZWROZXR3b3Jrcy52aXNhKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxQYXltZW50
UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmIHNoaXBwaW5nTWV0aG9kKQor
eworICAgIGVuY29kZXIgPDwgc2hpcHBpbmdNZXRob2QubGFiZWw7CisgICAgZW5jb2RlciA8PCBz
aGlwcGluZ01ldGhvZC5kZXRhaWw7CisgICAgZW5jb2RlciA8PCBzaGlwcGluZ01ldGhvZC5hbW91
bnQ7CisgICAgZW5jb2RlciA8PCBzaGlwcGluZ01ldGhvZC5pZGVudGlmaWVyOworfQorCitib29s
IEFyZ3VtZW50Q29kZXI8UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciYgZGVjb2RlciwgUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kJiBz
aGlwcGluZ01ldGhvZCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNoaXBwaW5nTWV0aG9k
LmxhYmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2hpcHBpbmdNZXRob2QuZGV0YWlsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2hpcHBpbmdNZXRob2QuYW1vdW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2hpcHBpbmdNZXRob2QuaWRlbnRpZmllcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1
bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJ
dGVtcyYgdG90YWxBbmRMaW5lSXRlbXMpCit7CisgICAgZW5jb2RlciA8PCB0b3RhbEFuZExpbmVJ
dGVtcy50b3RhbDsKKyAgICBlbmNvZGVyIDw8IHRvdGFsQW5kTGluZUl0ZW1zLmxpbmVJdGVtczsK
K30KKworYm9vbCBBcmd1bWVudENvZGVyPFBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVt
cz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFBheW1lbnRSZXF1ZXN0OjpUb3Rh
bEFuZExpbmVJdGVtcyYgdG90YWxBbmRMaW5lSXRlbXMpCit7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0b3RhbEFuZExpbmVJdGVtcy50b3RhbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvdGFsQW5kTGluZUl0ZW1zLmxpbmVJdGVtcykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXRBZGRpdGlvbnMubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV2ViS2l0QWRkaXRpb25zLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTVlODQ1YzIwM2ZhZGY1N2Q5MGUxYWUwZTRjYTE2OTQ2
YTRlYWE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XZWJLaXRBZGRpdGlvbnMubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dlYktp
dEFkZGl0aW9ucy5tbT4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWRiZmRiMTY1ZmY3NjJjNDUzNjM0NmQ2NzYyMDY4YzU5ZjhkOTExNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHkuaCIKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IldlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCisg
ICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCisgICAgLCBtX3dlYWtQdHJGYWN0b3J5
KHRoaXMpCisgICAgLCBtX3N0YXRlKFN0YXRlOjpJZGxlKQorICAgICwgbV9tZXJjaGFudFZhbGlk
YXRpb25TdGF0ZShNZXJjaGFudFZhbGlkYXRpb25TdGF0ZTo6SWRsZSkKK3sKKyAgICBtX3dlYlBh
Z2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQcm94eS5w
YWdlSUQoKSwgKnRoaXMpOworfQorCitXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6fldlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5KCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SWRs
ZSkKKyAgICAgICAgaGlkZVBheW1lbnRVSSgpOworCisgICAgbV93ZWJQYWdlUHJveHkucHJvY2Vz
cygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwor
fQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpjYW5NYWtlUGF5bWVudHMoYm9v
bCYgcmVwbHkpCit7CisgICAgcmVwbHkgPSBwbGF0Zm9ybUNhbk1ha2VQYXltZW50cygpOworfQor
Cit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpjYW5NYWtlUGF5bWVudHNXaXRoQWN0
aXZlQ2FyZChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
b21haW5OYW1lLCB1aW50NjRfdCByZXF1ZXN0SUQpCit7CisgICAgYXV0byB3ZWFrVGhpcyA9IG1f
d2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOworICAgIHBsYXRmb3JtQ2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmQobWVyY2hhbnRJZGVudGlmaWVyLCBkb21haW5OYW1lLCBbd2Vha1Ro
aXMsIHJlcXVlc3RJRF0oYm9vbCBjYW5NYWtlUGF5bWVudHMpIHsKKyAgICAgICAgYXV0byBwYXlt
ZW50Q29vcmRpbmF0b3JQcm94eSA9IHdlYWtUaGlzLmdldCgpOworICAgICAgICBpZiAoIXBheW1l
bnRDb29yZGluYXRvclByb3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHBheW1l
bnRDb29yZGluYXRvclByb3h5LT5tX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXlt
ZW50Q29vcmRpbmF0b3I6OkNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkUmVwbHkocmVxdWVz
dElELCBjYW5NYWtlUGF5bWVudHMpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJM
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGlua0ljb25VUkxTdHJpbmdzLCBjb25zdCBX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpCit7CisgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBhIG1lc3NhZ2UgY2hlY2suCisgICAgQVNTRVJUKGNhbkJlZ2luKCkpOworCisg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpBY3RpdmF0aW5nOworCisgICAgV2ViQ29yZTo6VVJMIG9yaWdp
bmF0aW5nVVJMKFdlYkNvcmU6OlVSTCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CisKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6VVJMPiBsaW5rSWNvblVSTHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBs
aW5rSWNvblVSTFN0cmluZyA6IGxpbmtJY29uVVJMU3RyaW5ncykKKyAgICAgICAgbGlua0ljb25V
UkxzLmFwcGVuZChXZWJDb3JlOjpVUkwoV2ViQ29yZTo6VVJMKCksIGxpbmtJY29uVVJMU3RyaW5n
KSk7CisKKyAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkob3JpZ2luYXRpbmdVUkwsIGxpbmtJY29u
VVJMcywgcGF5bWVudFJlcXVlc3QsIFt0aGlzXShib29sIHJlc3VsdCkgeworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBTdGF0ZTo6QWN0aXZhdGluZyk7CisgICAgICAgIGlmICghcmVzdWx0KSB7
CisgICAgICAgICAgICBkaWRDYW5jZWxQYXltZW50KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKKyAgICB9KTsKK30K
Kworc3RhdGljIGJvb2wgaXNWYWxpZEVudW0oV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25T
dGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6U3VjY2VzczoKKyAgICBjYXNlIFdlYkNvcmU6
OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpGYWlsdXJlOgorICAgIGNhc2UgV2ViQ29yZTo6
UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM6OkludmFsaWRCaWxsaW5nUG9zdGFsQWRkcmVzczoK
KyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpJbnZhbGlkU2hp
cHBpbmdQb3N0YWxBZGRyZXNzOgorICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXM6OkludmFsaWRTaGlwcGluZ0NvbnRhY3Q6CisgICAgY2FzZSBXZWJDb3JlOjpQYXlt
ZW50QXV0aG9yaXphdGlvblN0YXR1czo6UElOUmVxdWlyZWQ6CisgICAgY2FzZSBXZWJDb3JlOjpQ
YXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6UElOSW5jb3JyZWN0OgorICAgIGNhc2UgV2ViQ29y
ZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM6OlBJTkxvY2tvdXQ6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eTo6Y29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oY29uc3QgV2ViQ29y
ZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYgcGF5bWVudE1lcmNoYW50U2Vzc2lvbikKK3sKKyAg
ICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHBheW1lbnQgaGFzIGJlZW4gY2FuY2VsZWQgYWxy
ZWFkeS4KKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6SWRsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgTUVTU0FHRV9DSEVDSy4KKyAgICBBU1NF
UlQobV9tZXJjaGFudFZhbGlkYXRpb25TdGF0ZSA9PSBNZXJjaGFudFZhbGlkYXRpb25TdGF0ZTo6
VmFsaWRhdGluZyk7CisKKyAgICBwbGF0Zm9ybUNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBh
eW1lbnRNZXJjaGFudFNlc3Npb24pOworICAgIG1fbWVyY2hhbnRWYWxpZGF0aW9uU3RhdGUgPSBN
ZXJjaGFudFZhbGlkYXRpb25TdGF0ZTo6VmFsaWRhdGlvbkNvbXBsZXRlOworfQorCit2b2lkIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5Ojpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9u
KHVpbnQzMl90IG9wYXF1ZVN0YXR1cywgY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJl
cXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zPiYgbmV3VG90YWxBbmRMaW5lSXRlbXMpCit7CisgICAg
Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwYXltZW50IGhhcyBiZWVuIGNhbmNlbGVkIGFscmVh
ZHkuCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIE1FU1NBR0VfQ0hFQ0suCisgICAgQVNTRVJU
KG1fc3RhdGUgPT0gU3RhdGU6OlNoaXBwaW5nTWV0aG9kU2VsZWN0ZWQpOworCisgICAgYXV0byBz
dGF0dXMgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cz4o
b3BhcXVlU3RhdHVzKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBtZXNzYWdlIGNoZWNr
LgorICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRFbnVtKHN0YXR1cykpOworCisgICAgcGxhdGZv
cm1Db21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHN0YXR1cywgbmV3VG90YWxBbmRMaW5l
SXRlbXMpOworICAgIG1fc3RhdGUgPSBTdGF0ZTo6QWN0aXZlOworfQorCit2b2lkIFdlYlBheW1l
bnRDb29yZGluYXRvclByb3h5Ojpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbih1aW50
MzJfdCBvcGFxdWVTdGF0dXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6
U2hpcHBpbmdNZXRob2Q+JiBuZXdTaGlwcGluZ01ldGhvZHMsIGNvbnN0IE9wdGlvbmFsPFdlYkNv
cmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mIG5ld1RvdGFsQW5kTGluZUl0
ZW1zKQoreworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgcGF5bWVudCBoYXMgYmVlbiBj
YW5jZWxlZCBhbHJlYWR5LgorICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpJZGxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBNRVNTQUdFX0NIRUNL
LgorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpTaGlwcGluZ0NvbnRhY3RTZWxlY3RlZCk7
CisKKyAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBheW1lbnRBdXRob3Jp
emF0aW9uU3RhdHVzPihvcGFxdWVTdGF0dXMpOworCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBh
IG1lc3NhZ2UgY2hlY2suCisgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEVudW0oc3RhdHVzKSk7
CisKKyAgICBwbGF0Zm9ybUNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHN0YXR1cywg
bmV3U2hpcHBpbmdNZXRob2RzLCBuZXdUb3RhbEFuZExpbmVJdGVtcyk7CisgICAgbV9zdGF0ZSA9
IFN0YXRlOjpBY3RpdmU7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmNv
bXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+JiBuZXdUb3RhbEFuZExpbmVJdGVtcykKK3sK
KyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHBheW1lbnQgaGFzIGJlZW4gY2FuY2VsZWQg
YWxyZWFkeS4KKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6SWRsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgTUVTU0FHRV9DSEVDSy4KKyAgICBB
U1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6UGF5bWVudE1ldGhvZFNlbGVjdGVkKTsKKworICAgIHBs
YXRmb3JtQ29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKG5ld1RvdGFsQW5kTGluZUl0ZW1z
KTsKKyAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKK30KKwordm9pZCBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6Y29tcGxldGVQYXltZW50U2Vzc2lvbih1aW50MzJfdCBvcGFxdWVTdGF0
dXMpCit7CisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwYXltZW50IGhhcyBiZWVuIGNh
bmNlbGVkIGFscmVhZHkuCisgICAgaWYgKCFjYW5Db21wbGV0ZVBheW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBzdGF0dXMgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQYXltZW50
QXV0aG9yaXphdGlvblN0YXR1cz4ob3BhcXVlU3RhdHVzKTsKKworICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgYSBtZXNzYWdlIGNoZWNrLgorICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRFbnVtKHN0
YXR1cykpOworCisgICAgcGxhdGZvcm1Db21wbGV0ZVBheW1lbnRTZXNzaW9uKHN0YXR1cyk7CisK
KyAgICBkaWRSZWFjaEZpbmFsU3RhdGUoKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eTo6YWJvcnRQYXltZW50U2Vzc2lvbigpCit7CisgICAgLy8gSXQncyBwb3NzaWJsZSB0
aGF0IHRoZSBwYXltZW50IGhhcyBiZWVuIGNhbmNlbGVkIGFscmVhZHkuCisgICAgaWYgKCFjYW5B
Ym9ydCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBoaWRlUGF5bWVudFVJKCk7CisKKyAgICBk
aWRSZWFjaEZpbmFsU3RhdGUoKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eTo6ZGlkQ2FuY2VsUGF5bWVudCgpCit7CisgICAgQVNTRVJUKGNhbkNhbmNlbCgpKTsKKworICAg
IG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvcjo6RGlk
Q2FuY2VsUGF5bWVudCgpKTsKKworICAgIGRpZFJlYWNoRmluYWxTdGF0ZSgpOworfQorCit2b2lk
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Ojp2YWxpZGF0ZU1lcmNoYW50KGNvbnN0IFdlYkNv
cmU6OlVSTCYgdXJsKQoreworICAgIEFTU0VSVChtX21lcmNoYW50VmFsaWRhdGlvblN0YXRlID09
IE1lcmNoYW50VmFsaWRhdGlvblN0YXRlOjpJZGxlKTsKKworICAgIG1fbWVyY2hhbnRWYWxpZGF0
aW9uU3RhdGUgPSBNZXJjaGFudFZhbGlkYXRpb25TdGF0ZTo6VmFsaWRhdGluZzsKKyAgICBtX3dl
YlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3I6OlZhbGlkYXRl
TWVyY2hhbnQodXJsLnN0cmluZygpKSk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHk6OmRpZEF1dGhvcml6ZVBheW1lbnQoY29uc3QgV2ViQ29yZTo6UGF5bWVudCYgcGF5bWVu
dCkKK3sKKyAgICBtX3N0YXRlID0gU3RhdGU6OkF1dGhvcml6ZWQ7CisgICAgbV93ZWJQYWdlUHJv
eHkuc2VuZChNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpEaWRBdXRob3JpemVQYXlt
ZW50KHBheW1lbnQpKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6ZGlk
U2VsZWN0U2hpcHBpbmdNZXRob2QoY29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBw
aW5nTWV0aG9kJiBzaGlwcGluZ01ldGhvZCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0
ZTo6QWN0aXZlKTsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6U2hpcHBpbmdNZXRob2RTZWxlY3Rl
ZDsKKyAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0
b3I6OkRpZFNlbGVjdFNoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKSk7Cit9CisKK3ZvaWQg
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdChjb25z
dCBXZWJDb3JlOjpQYXltZW50Q29udGFjdCYgc2hpcHBpbmdDb250YWN0KQoreworICAgIEFTU0VS
VChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUpOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpTaGlw
cGluZ0NvbnRhY3RTZWxlY3RlZDsKKyAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYXltZW50Q29vcmRpbmF0b3I6OkRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdChzaGlwcGluZ0Nv
bnRhY3QpKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6ZGlkU2VsZWN0
UGF5bWVudE1ldGhvZChjb25zdCBXZWJDb3JlOjpQYXltZW50TWV0aG9kJiBwYXltZW50TWV0aG9k
KQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUpOworCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpQYXltZW50TWV0aG9kU2VsZWN0ZWQ7CisgICAgbV93ZWJQYWdlUHJveHkuc2Vu
ZChNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpEaWRTZWxlY3RQYXltZW50TWV0aG9k
KHBheW1lbnRNZXRob2QpKTsKK30KKworYm9vbCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6
Y2FuQmVnaW4oKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgU3Rh
dGU6OklkbGU6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBTdGF0ZTo6QWN0aXZh
dGluZzoKKyAgICBjYXNlIFN0YXRlOjpBY3RpdmU6CisgICAgY2FzZSBTdGF0ZTo6QXV0aG9yaXpl
ZDoKKyAgICBjYXNlIFN0YXRlOjpTaGlwcGluZ01ldGhvZFNlbGVjdGVkOgorICAgIGNhc2UgU3Rh
dGU6OlNoaXBwaW5nQ29udGFjdFNlbGVjdGVkOgorICAgIGNhc2UgU3RhdGU6OlBheW1lbnRNZXRo
b2RTZWxlY3RlZDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eTo6Y2FuQ2FuY2VsKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpBY3RpdmF0aW5nOgorICAgIGNhc2UgU3RhdGU6
OkFjdGl2ZToKKyAgICBjYXNlIFN0YXRlOjpBdXRob3JpemVkOgorICAgIGNhc2UgU3RhdGU6OlNo
aXBwaW5nTWV0aG9kU2VsZWN0ZWQ6CisgICAgY2FzZSBTdGF0ZTo6U2hpcHBpbmdDb250YWN0U2Vs
ZWN0ZWQ6CisgICAgY2FzZSBTdGF0ZTo6UGF5bWVudE1ldGhvZFNlbGVjdGVkOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgU3RhdGU6OklkbGU6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OmNhbkNvbXBs
ZXRlUGF5bWVudCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBT
dGF0ZTo6QXV0aG9yaXplZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRl
OjpJZGxlOgorICAgIGNhc2UgU3RhdGU6OkFjdGl2YXRpbmc6CisgICAgY2FzZSBTdGF0ZTo6QWN0
aXZlOgorICAgIGNhc2UgU3RhdGU6OlNoaXBwaW5nTWV0aG9kU2VsZWN0ZWQ6CisgICAgY2FzZSBT
dGF0ZTo6U2hpcHBpbmdDb250YWN0U2VsZWN0ZWQ6CisgICAgY2FzZSBTdGF0ZTo6UGF5bWVudE1l
dGhvZFNlbGVjdGVkOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5OjpjYW5BYm9ydCgpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6QWN0aXZhdGluZzoKKyAgICBjYXNlIFN0YXRl
OjpBY3RpdmU6CisgICAgY2FzZSBTdGF0ZTo6QXV0aG9yaXplZDoKKyAgICBjYXNlIFN0YXRlOjpT
aGlwcGluZ01ldGhvZFNlbGVjdGVkOgorICAgIGNhc2UgU3RhdGU6OlNoaXBwaW5nQ29udGFjdFNl
bGVjdGVkOgorICAgIGNhc2UgU3RhdGU6OlBheW1lbnRNZXRob2RTZWxlY3RlZDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRlOjpJZGxlOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpkaWRSZWFj
aEZpbmFsU3RhdGUoKQoreworICAgIG1fc3RhdGUgPSBTdGF0ZTo6SWRsZTsKKyAgICBtX21lcmNo
YW50VmFsaWRhdGlvblN0YXRlID0gTWVyY2hhbnRWYWxpZGF0aW9uU3RhdGU6OklkbGU7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMmQ2
MWUzZjBmZTk0ZjlmYWUyMDNmM2RmMzI0YTNjNDcyM2Q4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHkuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEFQUExFX1BBWSkKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUGF5bWVudEhlYWRlcnMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgSVBDIHsKK2NsYXNzIERhdGFSZWZlcmVuY2U7Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2VudW0gY2xhc3MgUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM7CitjbGFzcyBQYXlt
ZW50OworY2xhc3MgUGF5bWVudENvbnRhY3Q7CitjbGFzcyBQYXltZW50TWV0aG9kOworY2xhc3Mg
VVJMOworc3RydWN0IFBheW1lbnRNZXJjaGFudFNlc3Npb247Cit9CisKK09CSkNfQ0xBU1MgTlNX
aW5kb3c7CitPQkpDX0NMQVNTIFBLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcjsK
K09CSkNfQ0xBU1MgV0tQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5IDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkoV2ViUGFn
ZVByb3h5Jik7CisgICAgfldlYlBheW1lbnRDb29yZGluYXRvclByb3h5KCk7CisKKyAgICB2b2lk
IGRpZENhbmNlbFBheW1lbnQoKTsKKyAgICB2b2lkIHZhbGlkYXRlTWVyY2hhbnQoY29uc3QgV2Vi
Q29yZTo6VVJMJik7CisgICAgdm9pZCBkaWRBdXRob3JpemVQYXltZW50KGNvbnN0IFdlYkNvcmU6
OlBheW1lbnQmKTsKKyAgICB2b2lkIGRpZFNlbGVjdFNoaXBwaW5nTWV0aG9kKGNvbnN0IFdlYkNv
cmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZCYpOworICAgIHZvaWQgZGlkU2VsZWN0
U2hpcHBpbmdDb250YWN0KGNvbnN0IFdlYkNvcmU6OlBheW1lbnRDb250YWN0Jik7CisgICAgdm9p
ZCBkaWRTZWxlY3RQYXltZW50TWV0aG9kKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXRob2QmKTsK
KworICAgIHZvaWQgaGlkZVBheW1lbnRVSSgpOworCitwcml2YXRlOgorICAgIC8vIElQQzo6TWVz
c2FnZVJlY2VpdmVyLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVu
aXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mKSBvdmVycmlkZTsKKworICAgIC8vIE1lc3Nh
Z2UgaGFuZGxlcnMuCisgICAgdm9pZCBjYW5NYWtlUGF5bWVudHMoYm9vbCYgcmVwbHkpOworICAg
IHZvaWQgY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoY29uc3QgU3RyaW5nJiBtZXJjaGFu
dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZG9tYWluTmFtZSwgdWludDY0X3QgcmVxdWVzdElE
KTsKKyAgICB2b2lkIHNob3dQYXltZW50VUkoY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGxpbmtJY29uVVJMU3RyaW5ncywgY29uc3QgV2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3QmKTsKKyAgICB2b2lkIGNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0
aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24mKTsKKyAgICB2b2lkIGNv
bXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24odWludDMyX3Qgb3BhcXVlU3RhdHVzLCBjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+Jik7
CisgICAgdm9pZCBjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbih1aW50MzJfdCBvcGFx
dWVTdGF0dXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdN
ZXRob2Q+JiBuZXdTaGlwcGluZ01ldGhvZHMsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mKTsKKyAgICB2b2lkIGNvbXBsZXRlUGF5bWVu
dE1ldGhvZFNlbGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6
VG90YWxBbmRMaW5lSXRlbXM+Jik7CisgICAgdm9pZCBjb21wbGV0ZVBheW1lbnRTZXNzaW9uKHVp
bnQzMl90IG9wYXF1ZVN0YXR1cyk7CisgICAgdm9pZCBhYm9ydFBheW1lbnRTZXNzaW9uKCk7CisK
KyAgICBib29sIGNhbkJlZ2luKCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYW5jZWwoKSBjb25zdDsK
KyAgICBib29sIGNhbkNvbXBsZXRlUGF5bWVudCgpIGNvbnN0OworICAgIGJvb2wgY2FuQWJvcnQo
KSBjb25zdDsKKworICAgIHZvaWQgZGlkUmVhY2hGaW5hbFN0YXRlKCk7CisKKyAgICBib29sIHBs
YXRmb3JtQ2FuTWFrZVBheW1lbnRzKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNhbk1ha2VQYXltZW50
c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGRvbWFpbk5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IGNvbXBsZXRpb25I
YW5kbGVyKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hvd1BheW1lbnRVSShjb25zdCBXZWJDb3JlOjpV
UkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VVJMPiYgbGlua0ljb25V
UkxzLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
Ym9vbCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHBsYXRmb3JtQ29tcGxldGVNZXJj
aGFudFZhbGlkYXRpb24oY29uc3QgV2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYpOwor
ICAgIHZvaWQgcGxhdGZvcm1Db21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKFdlYkNvcmU6
OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+Jik7CisgICAgdm9pZCBwbGF0Zm9ybUNvbXBs
ZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9u
U3RhdHVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0
aG9kPiYgbmV3U2hpcHBpbmdNZXRob2RzLCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50
UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+Jik7CisgICAgdm9pZCBwbGF0Zm9ybUNvbXBsZXRl
UGF5bWVudE1ldGhvZFNlbGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVx
dWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+Jik7CisgICAgdm9pZCBwbGF0Zm9ybUNvbXBsZXRlUGF5
bWVudFNlc3Npb24oV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMpOworCisgICAg
V2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQcm94eTsKKyAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eT4gbV93ZWFrUHRyRmFjdG9yeTsKKworICAgIGVudW0gY2xhc3Mg
U3RhdGUgeworICAgICAgICAvLyBJZGxlIC0gTm90aGluZydzIGhhcHBlbmluZy4KKyAgICAgICAg
SWRsZSwKKworICAgICAgICAvLyBBY3RpdmF0aW5nIC0gV2FpdGluZyB0byBzaG93IHRoZSBwYXlt
ZW50IFVJLgorICAgICAgICBBY3RpdmF0aW5nLAorCisgICAgICAgIC8vIEFjdGl2ZSAtIFNob3dp
bmcgcGF5bWVudCBVSS4KKyAgICAgICAgQWN0aXZlLAorCisgICAgICAgIC8vIEF1dGhvcml6ZWQg
LSBEaXNwYXRjaGluZyB0aGUgYXV0aG9yaXplZCBldmVudCBhbmQgd2FpdGluZyBmb3IgdGhlIHBh
eW1lbnRTZXNzaW9uQ29tcGxldGVkIG1lc3NhZ2UuCisgICAgICAgIEF1dGhvcml6ZWQsCisKKyAg
ICAgICAgLy8gU2hpcHBpbmdNZXRob2RTZWxlY3RlZCAtIERpc3BhdGNoaW5nIHRoZSBzaGlwcGlu
Z21ldGhvZHNlbGVjdGVkIGV2ZW50IGFuZCB3YWl0aW5nIGZvciBhIHJlcGx5LgorICAgICAgICBT
aGlwcGluZ01ldGhvZFNlbGVjdGVkLAorCisgICAgICAgIC8vIFNoaXBwaW5nQ29udGFjdFNlbGVj
dGVkIC0gRGlzcGF0Y2hpbmcgdGhlIHNoaXBwaW5nY29udGFjdHNlbGVjdGVkIGV2ZW50IGFuZCB3
YWl0aW5nIGZvciBhIHJlcGx5LgorICAgICAgICBTaGlwcGluZ0NvbnRhY3RTZWxlY3RlZCwKKwor
ICAgICAgICAvLyBQYXltZW50TWV0aG9kU2VsZWN0ZWQgLSBEaXNwYXRjaGluZyB0aGUgcGF5bWVu
dG1ldGhvZHNlbGVjdGVkIGV2ZW50IGFuZCB3YWl0aW5nIGZvciBhIHJlcGx5LgorICAgICAgICBQ
YXltZW50TWV0aG9kU2VsZWN0ZWQsCisgICAgfSBtX3N0YXRlOworCisgICAgZW51bSBjbGFzcyBN
ZXJjaGFudFZhbGlkYXRpb25TdGF0ZSB7CisgICAgICAgIC8vIElkbGUgLSBOb3RoaW5nJ3MgaGFw
cGVuaW5nLgorICAgICAgICBJZGxlLAorCisgICAgICAgIC8vIFZhbGlkYXRpbmcgLSBEaXNwYXRj
aGluZyB0aGUgdmFsaWRhdGVtZXJjaGFudCBldmVudCBhbmQgd2FpdGluZyBmb3IgYSByZXBseS4K
KyAgICAgICAgVmFsaWRhdGluZywKKworICAgICAgICAvLyBWYWxpZGF0aW9uQ29tcGxldGUgLSBB
IG1lcmNoYW50IHNlc3Npb24gaGFzIGJlZW4gc2VudCBhbG9uZyB0byBQYXNzS2l0LgorICAgICAg
ICBWYWxpZGF0aW9uQ29tcGxldGUKKyAgICB9IG1fbWVyY2hhbnRWYWxpZGF0aW9uU3RhdGU7CisK
KyAgICBSZXRhaW5QdHI8UEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyPiBtX3Bh
eW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFdLUGF5bWVu
dEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BheW1lbnRBdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB1aW50
NjRfdCBtX3Nob3dQYXltZW50VUlSZXF1ZXN0U2VlZCB7IDAgfTsKKyAgICBSZXRhaW5QdHI8TlNX
aW5kb3c+IG1fc2hlZXRXaW5kb3c7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM4Y2I1
ZGIyMGEyMDdiZjdkYjFmY2RlY2M0YWExNGEyYTI4ODA3YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisj
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorIy8KKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisKK21lc3NhZ2VzIC0+IFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5IHsKKworICAgIENhbk1ha2VQYXltZW50cygpIC0+IChi
b29sIHJlc3VsdCkKKyAgICBDYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChTdHJpbmcgbWVy
Y2hhbnRJZGVudGlmaWVyLCBTdHJpbmcgZG9tYWluTmFtZSwgdWludDY0X3QgcmVxdWVzdElEKQor
CisgICAgU2hvd1BheW1lbnRVSShTdHJpbmcgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+IGxpbmtJY29uVVJMU3RyaW5ncywgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3QgcGF5bWVu
dFJlcXVlc3QpCisgICAgQ29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oc3RydWN0IFdlYkNvcmU6
OlBheW1lbnRNZXJjaGFudFNlc3Npb24gcGF5bWVudE1lcmNoYW50U2Vzc2lvbik7CisgICAgQ29t
cGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbih1aW50MzJfdCBvcGFxdWVTdGF0dXMsIE9wdGlv
bmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4gbmV3VG90YWxB
bmRJdGVtcykKKyAgICBDb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbih1aW50MzJfdCBv
cGFxdWVTdGF0dXMsIFZlY3RvcjxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRo
b2Q+IG5ld1NoaXBwaW5nTWV0aG9kcywgT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6
OlRvdGFsQW5kTGluZUl0ZW1zPiBuZXdUb3RhbEFuZEl0ZW1zKQorICAgIENvbXBsZXRlUGF5bWVu
dE1ldGhvZFNlbGVjdGlvbihPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxB
bmRMaW5lSXRlbXM+IG5ld1RvdGFsQW5kSXRlbXMpCisgICAgQ29tcGxldGVQYXltZW50U2Vzc2lv
bih1aW50MzJfdCBvcGFxdWVTdGF0dXMpCisgICAgQWJvcnRQYXltZW50U2Vzc2lvbigpCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2Nv
Y29hL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2RkMTQ3NGFiMGY1MTA1NDc1MTI5MTAwY2YxMjAxODA0ODI2ZTNhMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9jb2NvYS9X
ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKworI2ltcG9ydCA8
UGFzc0tpdC9QS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PFBhc3NLaXQvUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyX1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudEhlYWRlcnMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBVUkw7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk7CisKK1JldGFpblB0cjxQ
S1BheW1lbnRSZXF1ZXN0PiB0b1BLUGF5bWVudFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6VVJMJiBv
cmlnaW5hdGluZ1VSTCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlVSTD4mIGxpbmtJY29uVVJMcywg
Y29uc3QgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3QmKTsKKworfQorCitAaW50ZXJmYWNlIFdLUGF5
bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3QgPFBLUGF5
bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLCBQS1BheW1lbnRBdXRob3Jp
emF0aW9uVmlld0NvbnRyb2xsZXJQcml2YXRlRGVsZWdhdGU+IHsKK0BwYWNrYWdlCisgICAgV2Vi
S2l0OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSogX3dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5OworICAgIFJldGFpblB0cjxOU0FycmF5PiBfcGF5bWVudFN1bW1hcnlJdGVtczsKKyAgICBS
ZXRhaW5QdHI8TlNBcnJheT4gX3NoaXBwaW5nTWV0aG9kczsKKworICAgIEJsb2NrUHRyPHZvaWQg
KFBLUGF5bWVudE1lcmNoYW50U2Vzc2lvbiAqLCBOU0Vycm9yICopPiBfc2Vzc2lvbkJsb2NrOwor
CisgICAgQk9PTCBfYXV0aG9yaXplZDsKKyAgICBCbG9ja1B0cjx2b2lkIChQS1BheW1lbnRBdXRo
b3JpemF0aW9uU3RhdHVzKT4gX3BheW1lbnRBdXRob3JpemVkQ29tcGxldGlvbjsKKyAgICBCbG9j
a1B0cjx2b2lkIChOU0FycmF5ICopPiBfZGlkU2VsZWN0UGF5bWVudE1ldGhvZENvbXBsZXRpb247
CisgICAgQmxvY2tQdHI8dm9pZCAoUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cywgTlNBcnJh
eSAqKT4gX2RpZFNlbGVjdFNoaXBwaW5nTWV0aG9kQ29tcGxldGlvbjsKKyAgICBCbG9ja1B0cjx2
b2lkIChQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLCBOU0FycmF5ICosIE5TQXJyYXkgKik+
IF9kaWRTZWxlY3RTaGlwcGluZ0NvbnRhY3RDb21wbGV0aW9uOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXltZW50Q29vcmRpbmF0b3JQcm94eTooV2ViS2l0OjpXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eSYpd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk7CisKKy0gKHZvaWQpaW52
YWxpZGF0ZTsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5Q29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdmOGE2NTdjMTc4NWFiYTkwZmFjMDdh
ZDU4NDAwYzI5NGY1OTBhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tCkBA
IC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaCIKKworI2lmIEVOQUJMRShBUFBM
RV9QQVkpCisKKyNpbXBvcnQgIldlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmgiCisjaW1wb3J0
IDxQYXNzS2l0L1BLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcl9Qcml2YXRlLmg+
CisjaW1wb3J0IDxQYXNzS2l0Q29yZS9QS1BheW1lbnRNZXJjaGFudFNlc3Npb24uaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUGF5bWVudEhlYWRlcnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorCisjaWYgUExB
VEZPUk0oTUFDKQorU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFBhc3NLaXQpCisjZWxzZQor
U09GVF9MSU5LX0ZSQU1FV09SSyhQYXNzS2l0KQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMp
CisvLyBGSVhNRTogT25jZSA8cmRhcjovL3Byb2JsZW0vMjYwNzQ4NTE+IGhhcyBiZWVuIGZpeGVk
IHdlIG5vIGxvbmdlcgorLy8gaGF2ZSB0byBmYWxsIGJhY2sgdG8gUEtJbkFwcFBheW1lbnRTZXJ2
aWNlLgorI2ltcG9ydCA8UGFzc0tpdENvcmUvUEtJbkFwcFBheW1lbnRTZXJ2aWNlLmg+CitTT0ZU
X0xJTktfQ0xBU1MoUGFzc0tpdCwgUEtJbkFwcFBheW1lbnRTZXJ2aWNlKQorI2VuZGlmCisKK1NP
RlRfTElOS19DTEFTUyhQYXNzS2l0LCBQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xs
ZXIpOworU09GVF9MSU5LX0NMQVNTKFBhc3NLaXQsIFBLUGF5bWVudE1lcmNoYW50U2Vzc2lvbik7
CitTT0ZUX0xJTktfQ0xBU1MoUGFzc0tpdCwgUEtQYXltZW50UmVxdWVzdCk7CitTT0ZUX0xJTktf
Q0xBU1MoUGFzc0tpdCwgUEtQYXltZW50U3VtbWFyeUl0ZW0pOworU09GVF9MSU5LX0NMQVNTKFBh
c3NLaXQsIFBLU2hpcHBpbmdNZXRob2QpOworU09GVF9MSU5LX0NPTlNUQU5UKFBhc3NLaXQsIFBL
UGF5bWVudE5ldHdvcmtBbWV4LCBOU1N0cmluZyAqKTsKK1NPRlRfTElOS19DT05TVEFOVChQYXNz
S2l0LCBQS1BheW1lbnROZXR3b3JrQ2hpbmFVbmlvblBheSwgTlNTdHJpbmcgKik7CitTT0ZUX0xJ
TktfQ09OU1RBTlQoUGFzc0tpdCwgUEtQYXltZW50TmV0d29ya0Rpc2NvdmVyLCBOU1N0cmluZyAq
KTsKK1NPRlRfTElOS19DT05TVEFOVChQYXNzS2l0LCBQS1BheW1lbnROZXR3b3JrSW50ZXJhYywg
TlNTdHJpbmcgKik7CitTT0ZUX0xJTktfQ09OU1RBTlQoUGFzc0tpdCwgUEtQYXltZW50TmV0d29y
a01hc3RlckNhcmQsIE5TU3RyaW5nICopOworU09GVF9MSU5LX0NPTlNUQU5UKFBhc3NLaXQsIFBL
UGF5bWVudE5ldHdvcmtQcml2YXRlTGFiZWwsIE5TU3RyaW5nICopOworU09GVF9MSU5LX0NPTlNU
QU5UKFBhc3NLaXQsIFBLUGF5bWVudE5ldHdvcmtWaXNhLCBOU1N0cmluZyAqKTsKKwordHlwZWRl
ZiB2b2lkICheUEtDYW5NYWtlUGF5bWVudHNDb21wbGV0aW9uKShCT09MIGlzVmFsaWQsIE5TRXJy
b3IgKmVycm9yKTsKK2V4dGVybiAiQyIgdm9pZCBQS0Nhbk1ha2VQYXltZW50c1dpdGhNZXJjaGFu
dElkZW50aWZpZXJBbmREb21haW4oTlNTdHJpbmcgKmlkZW50aWZpZXIsIE5TU3RyaW5nICpkb21h
aW4sIFBLQ2FuTWFrZVBheW1lbnRzQ29tcGxldGlvbiBjb21wbGV0aW9uKTsKKworU09GVF9MSU5L
X0ZVTkNUSU9OX01BWV9GQUlMX0ZPUl9TT1VSQ0UoV2ViS2l0LCBQYXNzS2l0LCBQS0Nhbk1ha2VQ
YXltZW50c1dpdGhNZXJjaGFudElkZW50aWZpZXJBbmREb21haW4sIHZvaWQsIChOU1N0cmluZyAq
aWRlbnRpZmllciwgTlNTdHJpbmcgKmRvbWFpbiwgUEtDYW5NYWtlUGF5bWVudHNDb21wbGV0aW9u
IGNvbXBsZXRpb24pLCAoaWRlbnRpZmllciwgZG9tYWluLCBjb21wbGV0aW9uKSk7CisKK0BpbXBs
ZW1lbnRhdGlvbiBXS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXltZW50Q29vcmRpbmF0b3JQcm94eTooV2ViS2l0
OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eSYpd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgPSAmd2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRl
Cit7CisgICAgX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5ID0gbnVsbHB0cjsKKyAgICBpZiAo
X3BheW1lbnRBdXRob3JpemVkQ29tcGxldGlvbikgeworICAgICAgICBfcGF5bWVudEF1dGhvcml6
ZWRDb21wbGV0aW9uKFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNGYWlsdXJlKTsKKyAgICAg
ICAgX3BheW1lbnRBdXRob3JpemVkQ29tcGxldGlvbiA9IG51bGxwdHI7CisgICAgfQorfQorCist
ICh2b2lkKXBheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXI6KFBLUGF5bWVudEF1dGhv
cml6YXRpb25WaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIgd2lsbEZpbmlzaFdpdGhFcnJvcjoo
TlNFcnJvciAqKWVycm9yCit7Cit9CisKKy0gKHZvaWQpcGF5bWVudEF1dGhvcml6YXRpb25WaWV3
Q29udHJvbGxlcjooUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyICopY29udHJv
bGxlciBkaWRSZXF1ZXN0TWVyY2hhbnRTZXNzaW9uOih2b2lkKF4pKFBLUGF5bWVudE1lcmNoYW50
U2Vzc2lvbiAqLCBOU0Vycm9yICopKXNlc3Npb25CbG9jaworeworICAgIEFTU0VSVCghX3Nlc3Np
b25CbG9jayk7CisgICAgX3Nlc3Npb25CbG9jayA9IHNlc3Npb25CbG9jazsKKworICAgIFtnZXRQ
S1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJDbGFzcygpIHBheW1lbnRTZXJ2aWNl
c01lcmNoYW50VVJMOl4oTlNVUkwgKm1lcmNoYW50VVJMLCBOU0Vycm9yICplcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBMT0dfRVJST1IoIlBLQ2FuTWFrZVBheW1lbnRz
V2l0aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbiBlcnJvciAlQCIsIGVycm9yKTsKKworICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAg
ICAgICAgQVNTRVJUKF9zZXNzaW9uQmxvY2spOworCisgICAgICAgICAgICBpZiAoIV93ZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eSkgeworICAgICAgICAgICAgICAgIF9zZXNzaW9uQmxvY2sobnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHktPnZhbGlkYXRlTWVyY2hh
bnQobWVyY2hhbnRVUkwpOworICAgICAgICB9KTsKKyAgICB9XTsKK30KKworLSAodm9pZClwYXlt
ZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyOihQS1BheW1lbnRBdXRob3JpemF0aW9uVmll
d0NvbnRyb2xsZXIgKiljb250cm9sbGVyIGRpZEF1dGhvcml6ZVBheW1lbnQ6KFBLUGF5bWVudCAq
KXBheW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1
cykpY29tcGxldGlvbgoreworICAgIGlmICghX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5KSB7
CisgICAgICAgIGNvbXBsZXRpb24oUEtQYXltZW50QXV0aG9yaXphdGlvblN0YXR1c0ZhaWx1cmUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKCFfcGF5bWVudEF1dGhvcml6
ZWRDb21wbGV0aW9uKTsKKyAgICBfcGF5bWVudEF1dGhvcml6ZWRDb21wbGV0aW9uID0gY29tcGxl
dGlvbjsKKworICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS0+ZGlkQXV0aG9yaXplUGF5
bWVudChXZWJDb3JlOjpQYXltZW50KHBheW1lbnQpKTsKK30KKworLSAodm9pZClwYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGlkRmluaXNoOihQS1BheW1lbnRBdXRob3JpemF0aW9u
Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyCit7CisgICAgaWYgKCFfd2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghX2F1dGhvcml6ZWQpCisg
ICAgICAgIF93ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS0+ZGlkQ2FuY2VsUGF5bWVudCgpOwor
CisgICAgX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LT5oaWRlUGF5bWVudFVJKCk7Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QgdG9TaGlwcGlu
Z01ldGhvZChQS1NoaXBwaW5nTWV0aG9kICpzaGlwcGluZ01ldGhvZCkKK3sKKyAgICBBU1NFUlQo
c2hpcHBpbmdNZXRob2QpOworCisgICAgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5n
TWV0aG9kIHJlc3VsdDsKKyAgICByZXN1bHQubGFiZWwgPSBzaGlwcGluZ01ldGhvZC5sYWJlbDsK
KyAgICByZXN1bHQuZGV0YWlsID0gc2hpcHBpbmdNZXRob2QuZGV0YWlsOworICAgIHJlc3VsdC5h
bW91bnQgPSBbc2hpcHBpbmdNZXRob2QuYW1vdW50IGRlY2ltYWxOdW1iZXJCeU11bHRpcGx5aW5n
QnlQb3dlck9mMTA6Ml0uaW50ZWdlclZhbHVlOworICAgIHJlc3VsdC5pZGVudGlmaWVyID0gc2hp
cHBpbmdNZXRob2QuaWRlbnRpZmllcjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZv
aWQpcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcjooUEtQYXltZW50QXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyICopY29udHJvbGxlciBkaWRTZWxlY3RTaGlwcGluZ01ldGhvZDoo
UEtTaGlwcGluZ01ldGhvZCAqKXNoaXBwaW5nTWV0aG9kIGNvbXBsZXRpb246KHZvaWQgKF4pKFBL
UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMgc3RhdHVzLCBOU0FycmF5PFBLUGF5bWVudFN1bW1h
cnlJdGVtICo+ICpzdW1tYXJ5SXRlbXMpKWNvbXBsZXRpb24KK3sKKyAgICBpZiAoIV93ZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eSkgeworICAgICAgICBjb21wbGV0aW9uKFBLUGF5bWVudEF1dGhv
cml6YXRpb25TdGF0dXNGYWlsdXJlLCBAW10pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKCFfZGlkU2VsZWN0U2hpcHBpbmdNZXRob2RDb21wbGV0aW9uKTsKKyAgICBfZGlk
U2VsZWN0U2hpcHBpbmdNZXRob2RDb21wbGV0aW9uID0gY29tcGxldGlvbjsKKyAgICBfd2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHktPmRpZFNlbGVjdFNoaXBwaW5nTWV0aG9kKHRvU2hpcHBpbmdN
ZXRob2Qoc2hpcHBpbmdNZXRob2QpKTsKK30KKworLSAodm9pZClwYXltZW50QXV0aG9yaXphdGlv
blZpZXdDb250cm9sbGVyOihQS1BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgKilj
b250cm9sbGVyIGRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdDooUEtDb250YWN0ICopY29udGFjdCBj
b21wbGV0aW9uOih2b2lkICheKShQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cywg
TlNBcnJheTxQS1NoaXBwaW5nTWV0aG9kICo+ICpzaGlwcGluZ01ldGhvZHMsIE5TQXJyYXk8UEtQ
YXltZW50U3VtbWFyeUl0ZW0gKj4gKnN1bW1hcnlJdGVtcykpY29tcGxldGlvbgoreworICAgIGlm
ICghX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5KSB7CisgICAgICAgIGNvbXBsZXRpb24oUEtQ
YXltZW50QXV0aG9yaXphdGlvblN0YXR1c0ZhaWx1cmUsIEBbXSwgQFtdKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVCghX2RpZFNlbGVjdFNoaXBwaW5nQ29udGFjdENvbXBs
ZXRpb24pOworICAgIF9kaWRTZWxlY3RTaGlwcGluZ0NvbnRhY3RDb21wbGV0aW9uID0gY29tcGxl
dGlvbjsKKyAgICBfd2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHktPmRpZFNlbGVjdFNoaXBwaW5n
Q29udGFjdChXZWJDb3JlOjpQYXltZW50Q29udGFjdChjb250YWN0KSk7Cit9CisKKy0gKHZvaWQp
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcjooUEtQYXltZW50QXV0aG9yaXphdGlv
blZpZXdDb250cm9sbGVyICopY29udHJvbGxlciBkaWRTZWxlY3RQYXltZW50TWV0aG9kOihQS1Bh
eW1lbnRNZXRob2QgKilwYXltZW50TWV0aG9kIGNvbXBsZXRpb246KHZvaWQgKF4pKE5TQXJyYXk8
UEtQYXltZW50U3VtbWFyeUl0ZW0gKj4gKnN1bW1hcnlJdGVtcykpY29tcGxldGlvbgoreworICAg
IGlmICghX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5KSB7CisgICAgICAgIGNvbXBsZXRpb24o
QFtdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghX2RpZFNlbGVjdFBh
eW1lbnRNZXRob2RDb21wbGV0aW9uKTsKKyAgICBfZGlkU2VsZWN0UGF5bWVudE1ldGhvZENvbXBs
ZXRpb24gPSBjb21wbGV0aW9uOworCisgICAgX3dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LT5k
aWRTZWxlY3RQYXltZW50TWV0aG9kKFdlYkNvcmU6OlBheW1lbnRNZXRob2QocGF5bWVudE1ldGhv
ZCkpOworfQorCitAZW5kCisKKy8vIEZJWE1FOiBPbmNlIHJkYXI6Ly9wcm9ibGVtLzI0NDIwMDI0
IGhhcyBiZWVuIGZpeGVkLCBpbXBvcnQgUEtQYXltZW50UmVxdWVzdF9Qcml2YXRlLmggaW5zdGVh
ZC4KK0BpbnRlcmZhY2UgUEtQYXltZW50UmVxdWVzdCAoKQorQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgTlNVUkwgKm9yaWdpbmF0aW5nVVJMOworQGVuZAorCitAaW50ZXJmYWNlIFBLUGF5
bWVudFJlcXVlc3QgKCkKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGl0J3MgaW4gYW4gU0RL
LgorQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgTlNBcnJheSAqdGh1bWJuYWlsVVJMczsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TVVJMICp0aHVtYm5haWxVUkw7CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgZXhwZWN0c01lcmNoYW50U2Vzc2lvbjsK
K0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHk6OnBsYXRmb3JtQ2FuTWFrZVBheW1lbnRzKCkKK3sKKyAgICByZXR1cm4gW2dldFBLUGF5
bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckNsYXNzKCkgY2FuTWFrZVBheW1lbnRzXTsK
K30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1DYW5NYWtlUGF5
bWVudHNXaXRoQWN0aXZlQ2FyZChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBkb21haW5OYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWNhbkxvYWRfUGFzc0tpdF9QS0Nhbk1ha2VQYXltZW50
c1dpdGhNZXJjaGFudElkZW50aWZpZXJBbmREb21haW4oKSkgeworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc29mdExpbmtfUGFzc0tpdF9QS0Nhbk1ha2VQYXltZW50c1dpdGhNZXJjaGFudElkZW50
aWZpZXJBbmREb21haW4obWVyY2hhbnRJZGVudGlmaWVyLCBkb21haW5OYW1lLCBbY29tcGxldGlv
bkhhbmRsZXJdKEJPT0wgY2FuTWFrZVBheW1lbnRzLCBOU0Vycm9yICplcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICBMT0dfRVJST1IoIlBLQ2FuTWFrZVBheW1lbnRzV2l0
aE1lcmNoYW50SWRlbnRpZmllckFuZERvbWFpbiBlcnJvciAlQCIsIGVycm9yKTsKKworICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyLCBjYW5NYWtlUGF5
bWVudHNdIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNhbk1ha2VQYXltZW50cyk7
CisgICAgICAgIH0pOworICAgIH0pOworfQorCitzdGF0aWMgUEtBZGRyZXNzRmllbGQgdG9QS0Fk
ZHJlc3NGaWVsZChjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6QWRkcmVzc0ZpZWxkcyYg
YWRkcmVzc0ZpZWxkcykKK3sKKyAgICBQS0FkZHJlc3NGaWVsZCByZXN1bHQgPSAwOworCisgICAg
aWYgKGFkZHJlc3NGaWVsZHMucG9zdGFsQWRkcmVzcykKKyAgICAgICAgcmVzdWx0IHw9IFBLQWRk
cmVzc0ZpZWxkUG9zdGFsQWRkcmVzczsKKyAgICBpZiAoYWRkcmVzc0ZpZWxkcy5waG9uZSkKKyAg
ICAgICAgcmVzdWx0IHw9IFBLQWRkcmVzc0ZpZWxkUGhvbmU7CisgICAgaWYgKGFkZHJlc3NGaWVs
ZHMuZW1haWwpCisgICAgICAgIHJlc3VsdCB8PSBQS0FkZHJlc3NGaWVsZEVtYWlsOworICAgIGlm
IChhZGRyZXNzRmllbGRzLm5hbWUpCisgICAgICAgIHJlc3VsdCB8PSBQS0FkZHJlc3NGaWVsZE5h
bWU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUEtQYXltZW50U3VtbWFyeUl0
ZW1UeXBlIHRvUEtQYXltZW50U3VtbWFyeUl0ZW1UeXBlKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0
OjpMaW5lSXRlbTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OkxpbmVJdGVtOjpUeXBlOjpGaW5hbDoKKyAgICAgICAg
cmV0dXJuIFBLUGF5bWVudFN1bW1hcnlJdGVtVHlwZUZpbmFsOworCisgICAgY2FzZSBXZWJDb3Jl
OjpQYXltZW50UmVxdWVzdDo6TGluZUl0ZW06OlR5cGU6OlBlbmRpbmc6CisgICAgICAgIHJldHVy
biBQS1BheW1lbnRTdW1tYXJ5SXRlbVR5cGVQZW5kaW5nOworICAgIH0KK30KKworc3RhdGljIFJl
dGFpblB0cjxQS1BheW1lbnRTdW1tYXJ5SXRlbT4gdG9QS1BheW1lbnRTdW1tYXJ5SXRlbShjb25z
dCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6TGluZUl0ZW0mIGxpbmVJdGVtKQoreworICAgIGF1
dG8gYW1vdW50ID0gYWRvcHROUyhbW05TRGVjaW1hbE51bWJlciBhbGxvY10gaW5pdFdpdGhNYW50
aXNzYTpsaW5lSXRlbS5hbW91bnQudmFsdWVPcigwKSBleHBvbmVudDotMiBpc05lZ2F0aXZlOips
aW5lSXRlbS5hbW91bnQgPCAwXSk7CisKKyAgICByZXR1cm4gW2dldFBLUGF5bWVudFN1bW1hcnlJ
dGVtQ2xhc3MoKSBzdW1tYXJ5SXRlbVdpdGhMYWJlbDpsaW5lSXRlbS5sYWJlbCBhbW91bnQ6YW1v
dW50LmdldCgpIHR5cGU6dG9QS1BheW1lbnRTdW1tYXJ5SXRlbVR5cGUobGluZUl0ZW0udHlwZSld
OworfQorCitzdGF0aWMgUEtNZXJjaGFudENhcGFiaWxpdHkgdG9QS01lcmNoYW50Q2FwYWJpbGl0
aWVzKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyYg
bWVyY2hhbnRDYXBhYmlsaXRpZXMpCit7CisgICAgUEtNZXJjaGFudENhcGFiaWxpdHkgcmVzdWx0
ID0gMDsKKyAgICBpZiAobWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHMzRFMpCisgICAgICAg
IHJlc3VsdCB8PSBQS01lcmNoYW50Q2FwYWJpbGl0eTNEUzsKKyAgICBpZiAobWVyY2hhbnRDYXBh
YmlsaXRpZXMuc3VwcG9ydHNFTVYpCisgICAgICAgIHJlc3VsdCB8PSBQS01lcmNoYW50Q2FwYWJp
bGl0eUVNVjsKKyAgICBpZiAobWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNDcmVkaXQpCisg
ICAgICAgIHJlc3VsdCB8PSBQS01lcmNoYW50Q2FwYWJpbGl0eUNyZWRpdDsKKyAgICBpZiAobWVy
Y2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHNEZWJpdCkKKyAgICAgICAgcmVzdWx0IHw9IFBLTWVy
Y2hhbnRDYXBhYmlsaXR5RGViaXQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
UmV0YWluUHRyPE5TQXJyYXk+IHRvU3VwcG9ydGVkTmV0d29ya3MoY29uc3QgV2ViQ29yZTo6UGF5
bWVudFJlcXVlc3Q6OlN1cHBvcnRlZE5ldHdvcmtzJiBzdXBwb3J0ZWROZXR3b3JrcykKK3sKKyAg
ICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwor
CisgICAgaWYgKHN1cHBvcnRlZE5ldHdvcmtzLmFtZXgpCisgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OmdldFBLUGF5bWVudE5ldHdvcmtBbWV4KCldOworICAgIGlmIChzdXBwb3J0ZWROZXR3b3Jr
cy5jaGluYVVuaW9uUGF5KQorICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpnZXRQS1BheW1lbnRO
ZXR3b3JrQ2hpbmFVbmlvblBheSgpXTsKKyAgICBpZiAoc3VwcG9ydGVkTmV0d29ya3MuZGlzY292
ZXIpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdvcmtEaXNjb3Zl
cigpXTsKKyAgICBpZiAoc3VwcG9ydGVkTmV0d29ya3MuaW50ZXJhYykKKyAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6Z2V0UEtQYXltZW50TmV0d29ya0ludGVyYWMoKV07CisgICAgaWYgKHN1cHBv
cnRlZE5ldHdvcmtzLm1hc3RlckNhcmQpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBL
UGF5bWVudE5ldHdvcmtNYXN0ZXJDYXJkKCldOworICAgIGlmIChzdXBwb3J0ZWROZXR3b3Jrcy5w
cml2YXRlTGFiZWwpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdv
cmtQcml2YXRlTGFiZWwoKV07CisgICAgaWYgKHN1cHBvcnRlZE5ldHdvcmtzLnZpc2EpCisgICAg
ICAgIFtyZXN1bHQgYWRkT2JqZWN0OmdldFBLUGF5bWVudE5ldHdvcmtWaXNhKCldOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFBLU2hpcHBpbmdUeXBlIHRvUEtTaGlwcGluZ1R5
cGUoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nVHlwZSBzaGlwcGluZ1R5cGUpCit7
CisgICAgc3dpdGNoIChzaGlwcGluZ1R5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpTaGlwcGluZ1R5cGU6OlNoaXBwaW5nOgorICAgICAgICByZXR1cm4gUEtTaGlwcGlu
Z1R5cGVTaGlwcGluZzsKKworICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlNoaXBw
aW5nVHlwZTo6RGVsaXZlcnk6CisgICAgICAgIHJldHVybiBQS1NoaXBwaW5nVHlwZURlbGl2ZXJ5
OworCisgICAgY2FzZSBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdUeXBlOjpTdG9y
ZVBpY2t1cDoKKyAgICAgICAgcmV0dXJuIFBLU2hpcHBpbmdUeXBlU3RvcmVQaWNrdXA7CisKKyAg
ICBjYXNlIFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ1R5cGU6OlNlcnZpY2VQaWNr
dXA6CisgICAgICAgIHJldHVybiBQS1NoaXBwaW5nVHlwZVNlcnZpY2VQaWNrdXA7CisgICAgfQor
fQorCitzdGF0aWMgUmV0YWluUHRyPFBLU2hpcHBpbmdNZXRob2Q+IHRvUEtTaGlwcGluZ01ldGhv
ZChjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2QmIHNoaXBwaW5n
TWV0aG9kKQoreworICAgIGF1dG8gYW1vdW50ID0gYWRvcHROUyhbW05TRGVjaW1hbE51bWJlciBh
bGxvY10gaW5pdFdpdGhNYW50aXNzYTpzaGlwcGluZ01ldGhvZC5hbW91bnQgZXhwb25lbnQ6LTIg
aXNOZWdhdGl2ZTpOT10pOworCisgICAgUmV0YWluUHRyPFBLU2hpcHBpbmdNZXRob2Q+IHJlc3Vs
dCA9IFtnZXRQS1NoaXBwaW5nTWV0aG9kQ2xhc3MoKSBzdW1tYXJ5SXRlbVdpdGhMYWJlbDpzaGlw
cGluZ01ldGhvZC5sYWJlbCBhbW91bnQ6YW1vdW50LmdldCgpXTsKKyAgICBbcmVzdWx0IHNldElk
ZW50aWZpZXI6c2hpcHBpbmdNZXRob2QuaWRlbnRpZmllcl07CisgICAgW3Jlc3VsdCBzZXREZXRh
aWw6c2hpcHBpbmdNZXRob2QuZGV0YWlsXTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8UEtQYXltZW50TWVyY2hhbnRTZXNzaW9uPiB0b1BLUGF5bWVudE1lcmNo
YW50U2Vzc2lvbihjb25zdCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJiBwYXltZW50
TWVyY2hhbnRTZXNzaW9uKQoreworICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Cisg
ICAgICAgIEAibWVyY2hhbnRTZXNzaW9uSWRlbnRpZmllciIgOiBwYXltZW50TWVyY2hhbnRTZXNz
aW9uLnNlc3Npb25JZGVudGlmaWVyLAorICAgICAgICBAIm1lcmNoYW50SWRlbnRpZmllciIgOiBw
YXltZW50TWVyY2hhbnRTZXNzaW9uLm1lcmNoYW50SWRlbnRpZmllciwKKyAgICAgICAgQCJuT25j
ZSIgOiBwYXltZW50TWVyY2hhbnRTZXNzaW9uLm5vbmNlLAorICAgICAgICBAImVwb2NoVGltZXN0
YW1wIiA6IEAoc3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4ocGF5bWVudE1lcmNoYW50U2Vzc2lvbi5l
cG9jaFRpbWVzdGFtcCkpLAorICAgICAgICBAIkZRRE4iIDogcGF5bWVudE1lcmNoYW50U2Vzc2lv
bi5kb21haW5OYW1lLAorICAgICAgICBAInNpZ25hdHVyZSIgOiBwYXltZW50TWVyY2hhbnRTZXNz
aW9uLnNpZ25hdHVyZSwKKyAgICB9OworCisgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jUEtQYXlt
ZW50TWVyY2hhbnRTZXNzaW9uSW5zdGFuY2UoKSBpbml0V2l0aERpY3Rpb25hcnk6ZGljdGlvbmFy
eV0pOworfQorCitSZXRhaW5QdHI8UEtQYXltZW50UmVxdWVzdD4gdG9QS1BheW1lbnRSZXF1ZXN0
KGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0JiBwYXlt
ZW50UmVxdWVzdCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW2FsbG9jUEtQYXltZW50
UmVxdWVzdEluc3RhbmNlKCkgaW5pdF0pOworCisgICAgW3Jlc3VsdCBzZXRPcmlnaW5hdGluZ1VS
TDpvcmlnaW5hdGluZ1VSTF07CisKKyAgICBpZiAoW3Jlc3VsdCByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHNldFRodW1ibmFpbFVSTHM6KV0pIHsKKyAgICAgICAgYXV0byB0aHVtYm5haWxV
UkxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIGZv
ciAoYXV0byYgbGlua0ljb25VUkwgOiBsaW5rSWNvblVSTHMpCisgICAgICAgICAgICBbdGh1bWJu
YWlsVVJMcyBhZGRPYmplY3Q6c3RhdGljX2Nhc3Q8TlNVUkwgKj4obGlua0ljb25VUkwpXTsKKwor
ICAgICAgICBbcmVzdWx0IHNldFRodW1ibmFpbFVSTHM6dGh1bWJuYWlsVVJMcy5nZXQoKV07Cisg
ICAgfSBlbHNlIGlmICghbGlua0ljb25VUkxzLmlzRW1wdHkoKSkKKyAgICAgICAgW3Jlc3VsdCBz
ZXRUaHVtYm5haWxVUkw6bGlua0ljb25VUkxzWzBdXTsKKworICAgIFtyZXN1bHQgc2V0Q291bnRy
eUNvZGU6cGF5bWVudFJlcXVlc3QuY291bnRyeUNvZGUoKV07CisgICAgW3Jlc3VsdCBzZXRDdXJy
ZW5jeUNvZGU6cGF5bWVudFJlcXVlc3QuY3VycmVuY3lDb2RlKCldOworICAgIFtyZXN1bHQgc2V0
UmVxdWlyZWRCaWxsaW5nQWRkcmVzc0ZpZWxkczp0b1BLQWRkcmVzc0ZpZWxkKHBheW1lbnRSZXF1
ZXN0LnJlcXVpcmVkQmlsbGluZ0FkZHJlc3NGaWVsZHMoKSldOworICAgIFtyZXN1bHQgc2V0Qmls
bGluZ0NvbnRhY3Q6cGF5bWVudFJlcXVlc3QuYmlsbGluZ0NvbnRhY3QoKS5wa0NvbnRhY3QoKV07
CisgICAgW3Jlc3VsdCBzZXRSZXF1aXJlZFNoaXBwaW5nQWRkcmVzc0ZpZWxkczp0b1BLQWRkcmVz
c0ZpZWxkKHBheW1lbnRSZXF1ZXN0LnJlcXVpcmVkU2hpcHBpbmdBZGRyZXNzRmllbGRzKCkpXTsK
KyAgICBbcmVzdWx0IHNldFNoaXBwaW5nQ29udGFjdDpwYXltZW50UmVxdWVzdC5zaGlwcGluZ0Nv
bnRhY3QoKS5wa0NvbnRhY3QoKV07CisKKyAgICBbcmVzdWx0IHNldFN1cHBvcnRlZE5ldHdvcmtz
OnRvU3VwcG9ydGVkTmV0d29ya3MocGF5bWVudFJlcXVlc3Quc3VwcG9ydGVkTmV0d29ya3MoKSku
Z2V0KCldOworICAgIFtyZXN1bHQgc2V0TWVyY2hhbnRDYXBhYmlsaXRpZXM6dG9QS01lcmNoYW50
Q2FwYWJpbGl0aWVzKHBheW1lbnRSZXF1ZXN0Lm1lcmNoYW50Q2FwYWJpbGl0aWVzKCkpXTsKKwor
ICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdUeXBlOnRvUEtTaGlwcGluZ1R5cGUocGF5bWVudFJlcXVl
c3Quc2hpcHBpbmdUeXBlKCkpXTsKKworICAgIGF1dG8gc2hpcHBpbmdNZXRob2RzID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChhdXRvJiBzaGlwcGlu
Z01ldGhvZCA6IHBheW1lbnRSZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygpKQorICAgICAgICBbc2hp
cHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRob2Qp
LmdldCgpXTsKKyAgICBbcmVzdWx0IHNldFNoaXBwaW5nTWV0aG9kczpzaGlwcGluZ01ldGhvZHMu
Z2V0KCldOworCisgICAgYXV0byBwYXltZW50U3VtbWFyeUl0ZW1zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IHBheW1l
bnRSZXF1ZXN0LmxpbmVJdGVtcygpKSB7CisgICAgICAgIGlmIChhdXRvIHN1bW1hcnlJdGVtID0g
dG9QS1BheW1lbnRTdW1tYXJ5SXRlbShsaW5lSXRlbSkpCisgICAgICAgICAgICBbcGF5bWVudFN1
bW1hcnlJdGVtcyBhZGRPYmplY3Q6c3VtbWFyeUl0ZW0uZ2V0KCldOworICAgIH0KKworICAgIGlm
IChhdXRvIHRvdGFsSXRlbSA9IHRvUEtQYXltZW50U3VtbWFyeUl0ZW0ocGF5bWVudFJlcXVlc3Qu
dG90YWwoKSkpCisgICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDp0b3RhbEl0
ZW0uZ2V0KCldOworCisgICAgW3Jlc3VsdCBzZXRQYXltZW50U3VtbWFyeUl0ZW1zOnBheW1lbnRT
dW1tYXJ5SXRlbXMuZ2V0KCldOworCisgICAgW3Jlc3VsdCBzZXRFeHBlY3RzTWVyY2hhbnRTZXNz
aW9uOllFU107CisKKyAgICBpZiAoIXBheW1lbnRSZXF1ZXN0LmFwcGxpY2F0aW9uRGF0YSgpLmlz
TnVsbCgpKSB7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25EYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCYXNlNjRFbmNvZGVkU3RyaW5nOnBheW1lbnRSZXF1ZXN0LmFwcGxp
Y2F0aW9uRGF0YSgpIG9wdGlvbnM6MF0pOworICAgICAgICBbcmVzdWx0IHNldEFwcGxpY2F0aW9u
RGF0YTphcHBsaWNhdGlvbkRhdGEuZ2V0KCldOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHRvUEtQYXltZW50QXV0
aG9yaXphdGlvblN0YXR1cyhXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cyBzdGF0
dXMpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRB
dXRob3JpemF0aW9uU3RhdHVzOjpTdWNjZXNzOgorICAgICAgICByZXR1cm4gUEtQYXltZW50QXV0
aG9yaXphdGlvblN0YXR1c1N1Y2Nlc3M7CisgICAgY2FzZSBXZWJDb3JlOjpQYXltZW50QXV0aG9y
aXphdGlvblN0YXR1czo6RmFpbHVyZToKKyAgICAgICAgcmV0dXJuIFBLUGF5bWVudEF1dGhvcml6
YXRpb25TdGF0dXNGYWlsdXJlOworICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXM6OkludmFsaWRCaWxsaW5nUG9zdGFsQWRkcmVzczoKKyAgICAgICAgcmV0dXJuIFBL
UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNJbnZhbGlkQmlsbGluZ1Bvc3RhbEFkZHJlc3M7Cisg
ICAgY2FzZSBXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1czo6SW52YWxpZFNoaXBw
aW5nUG9zdGFsQWRkcmVzczoKKyAgICAgICAgcmV0dXJuIFBLUGF5bWVudEF1dGhvcml6YXRpb25T
dGF0dXNJbnZhbGlkU2hpcHBpbmdQb3N0YWxBZGRyZXNzOworICAgIGNhc2UgV2ViQ29yZTo6UGF5
bWVudEF1dGhvcml6YXRpb25TdGF0dXM6OkludmFsaWRTaGlwcGluZ0NvbnRhY3Q6CisgICAgICAg
IHJldHVybiBQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzSW52YWxpZFNoaXBwaW5nQ29udGFj
dDsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpQSU5SZXF1
aXJlZDoKKyAgICAgICAgcmV0dXJuIFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNQSU5SZXF1
aXJlZDsKKyAgICBjYXNlIFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzOjpQSU5J
bmNvcnJlY3Q6CisgICAgICAgIHJldHVybiBQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzUElO
SW5jb3JyZWN0OworICAgIGNhc2UgV2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXM6
OlBJTkxvY2tvdXQ6CisgICAgICAgIHJldHVybiBQS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVz
UElOTG9ja291dDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OnBsYXRmb3JtQ29tcGxldGVQYXltZW50U2Vzc2lvbihXZWJDb3JlOjpQYXltZW50QXV0aG9yaXph
dGlvblN0YXR1cyBzdGF0dXMpCit7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25W
aWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckRlbGVnYXRlKTsKKworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJv
bGxlckRlbGVnYXRlLT5fYXV0aG9yaXplZCA9IFlFUzsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3BheW1lbnRBdXRob3JpemVkQ29tcGxldGlvbih0
b1BLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMoc3RhdHVzKSk7CisgICAgbV9wYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9wYXltZW50QXV0aG9yaXplZENvbXBs
ZXRpb24gPSBudWxscHRyOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Ojpw
bGF0Zm9ybUNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRN
ZXJjaGFudFNlc3Npb24mIHBheW1lbnRNZXJjaGFudFNlc3Npb24pCit7CisgICAgQVNTRVJUKG1f
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKG1fcGF5bWVu
dEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlKTsKKworICAgIG1fcGF5bWVudEF1
dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fc2Vzc2lvbkJsb2NrKHRvUEtQYXlt
ZW50TWVyY2hhbnRTZXNzaW9uKHBheW1lbnRNZXJjaGFudFNlc3Npb24pLmdldCgpLCBudWxscHRy
KTsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3Nl
c3Npb25CbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHk6OnBsYXRmb3JtQ29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihXZWJDb3JlOjpQYXlt
ZW50QXV0aG9yaXphdGlvblN0YXR1cyBzdGF0dXMsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBh
eW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4mIG5ld1RvdGFsQW5kTGluZUl0ZW1zKQor
eworICAgIEFTU0VSVChtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOworICAg
IEFTU0VSVChtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSk7CisK
KyAgICBpZiAobmV3VG90YWxBbmRMaW5lSXRlbXMpIHsKKyAgICAgICAgYXV0byBwYXltZW50U3Vt
bWFyeUl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAg
ICAgIGZvciAoYXV0byYgbGluZUl0ZW0gOiBuZXdUb3RhbEFuZExpbmVJdGVtcy0+bGluZUl0ZW1z
KSB7CisgICAgICAgICAgICBpZiAoYXV0byBzdW1tYXJ5SXRlbSA9IHRvUEtQYXltZW50U3VtbWFy
eUl0ZW0obGluZUl0ZW0pKQorICAgICAgICAgICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1zIGFk
ZE9iamVjdDpzdW1tYXJ5SXRlbS5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0
byB0b3RhbEl0ZW0gPSB0b1BLUGF5bWVudFN1bW1hcnlJdGVtKG5ld1RvdGFsQW5kTGluZUl0ZW1z
LT50b3RhbCkpCisgICAgICAgICAgICBbcGF5bWVudFN1bW1hcnlJdGVtcyBhZGRPYmplY3Q6dG90
YWxJdGVtLmdldCgpXTsKKworICAgICAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZS0+X3BheW1lbnRTdW1tYXJ5SXRlbXMgPSBXVEZNb3ZlKHBheW1lbnRTdW1t
YXJ5SXRlbXMpOworICAgIH0KKworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJv
bGxlckRlbGVnYXRlLT5fZGlkU2VsZWN0U2hpcHBpbmdNZXRob2RDb21wbGV0aW9uKHRvUEtQYXlt
ZW50QXV0aG9yaXphdGlvblN0YXR1cyhzdGF0dXMpLCBtX3BheW1lbnRBdXRob3JpemF0aW9uVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3BheW1lbnRTdW1tYXJ5SXRlbXMuZ2V0KCkpOworICAgIG1f
cGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fZGlkU2VsZWN0U2hp
cHBpbmdNZXRob2RDb21wbGV0aW9uID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6cGxhdGZvcm1Db21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihX
ZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cyBzdGF0dXMsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+JiBuZXdTaGlwcGluZ01ldGhv
ZHMsIGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJ
dGVtcz4mIG5ld1RvdGFsQW5kTGluZUl0ZW1zKQoreworICAgIEFTU0VSVChtX3BheW1lbnRBdXRo
b3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOworICAgIEFTU0VSVChtX3BheW1lbnRBdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSk7CisKKyAgICBpZiAobmV3VG90YWxBbmRMaW5lSXRl
bXMpIHsKKyAgICAgICAgYXV0byBwYXltZW50U3VtbWFyeUl0ZW1zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIGZvciAoYXV0byYgbGluZUl0ZW0gOiBu
ZXdUb3RhbEFuZExpbmVJdGVtcy0+bGluZUl0ZW1zKSB7CisgICAgICAgICAgICBpZiAoYXV0byBz
dW1tYXJ5SXRlbSA9IHRvUEtQYXltZW50U3VtbWFyeUl0ZW0obGluZUl0ZW0pKQorICAgICAgICAg
ICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDpzdW1tYXJ5SXRlbS5nZXQoKV07
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byB0b3RhbEl0ZW0gPSB0b1BLUGF5bWVudFN1
bW1hcnlJdGVtKG5ld1RvdGFsQW5kTGluZUl0ZW1zLT50b3RhbCkpCisgICAgICAgICAgICBbcGF5
bWVudFN1bW1hcnlJdGVtcyBhZGRPYmplY3Q6dG90YWxJdGVtLmdldCgpXTsKKworICAgICAgICBt
X3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3BheW1lbnRTdW1t
YXJ5SXRlbXMgPSBXVEZNb3ZlKHBheW1lbnRTdW1tYXJ5SXRlbXMpOworCisgICAgICAgIGF1dG8g
c2hpcHBpbmdNZXRob2RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CisgICAgICAgIGZvciAoYXV0byYgc2hpcHBpbmdNZXRob2QgOiBuZXdTaGlwcGluZ01ldGhvZHMp
CisgICAgICAgICAgICBbc2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRo
b2Qoc2hpcHBpbmdNZXRob2QpLmdldCgpXTsKKworICAgICAgICBtX3BheW1lbnRBdXRob3JpemF0
aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3NoaXBwaW5nTWV0aG9kcyA9IFdURk1vdmUoc2hp
cHBpbmdNZXRob2RzKTsKKyAgICB9CisKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZS0+X2RpZFNlbGVjdFNoaXBwaW5nQ29udGFjdENvbXBsZXRpb24odG9Q
S1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzKHN0YXR1cyksIG1fcGF5bWVudEF1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fc2hpcHBpbmdNZXRob2RzLmdldCgpLCBtX3BheW1l
bnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X3BheW1lbnRTdW1tYXJ5SXRl
bXMuZ2V0KCkpOworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVn
YXRlLT5fZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0Q29tcGxldGlvbiA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnBsYXRmb3JtQ29tcGxldGVQYXltZW50
TWV0aG9kU2VsZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpU
b3RhbEFuZExpbmVJdGVtcz4mIG5ld1RvdGFsQW5kTGluZUl0ZW1zKQoreworICAgIEFTU0VSVCht
X3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpOworICAgIEFTU0VSVChtX3BheW1l
bnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSk7CisKKyAgICBpZiAobmV3VG90
YWxBbmRMaW5lSXRlbXMpIHsKKyAgICAgICAgYXV0byBwYXltZW50U3VtbWFyeUl0ZW1zID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIGZvciAoYXV0byYg
bGluZUl0ZW0gOiBuZXdUb3RhbEFuZExpbmVJdGVtcy0+bGluZUl0ZW1zKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBzdW1tYXJ5SXRlbSA9IHRvUEtQYXltZW50U3VtbWFyeUl0ZW0obGluZUl0ZW0p
KQorICAgICAgICAgICAgICAgIFtwYXltZW50U3VtbWFyeUl0ZW1zIGFkZE9iamVjdDpzdW1tYXJ5
SXRlbS5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byB0b3RhbEl0ZW0gPSB0
b1BLUGF5bWVudFN1bW1hcnlJdGVtKG5ld1RvdGFsQW5kTGluZUl0ZW1zLT50b3RhbCkpCisgICAg
ICAgICAgICBbcGF5bWVudFN1bW1hcnlJdGVtcyBhZGRPYmplY3Q6dG90YWxJdGVtLmdldCgpXTsK
KworICAgICAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+
X3BheW1lbnRTdW1tYXJ5SXRlbXMgPSBXVEZNb3ZlKHBheW1lbnRTdW1tYXJ5SXRlbXMpOworICAg
IH0KKworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5f
ZGlkU2VsZWN0UGF5bWVudE1ldGhvZENvbXBsZXRpb24obV9wYXltZW50QXV0aG9yaXphdGlvblZp
ZXdDb250cm9sbGVyRGVsZWdhdGUtPl9wYXltZW50U3VtbWFyeUl0ZW1zLmdldCgpKTsKKyAgICBt
X3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS0+X2RpZFNlbGVjdFBh
eW1lbnRNZXRob2RDb21wbGV0aW9uID0gbnVsbHB0cjsKK30KKworfQorCisjZW5kaWYKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L2lvcy9XZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBh
eS9pb3MvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc1N2E1
MmU3Mjc2OGM1NTI1NTc0MThlOTg2MTBiZTUzOWY4NjEyZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BcHBsZVBheS9pb3MvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlJT1MubW0KQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCIKKworI2lmIFBMQVRG
T1JNKElPUykgJiYgRU5BQkxFKEFQUExFX1BBWSkKKworI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlDb2NvYS5oIgorI2ltcG9ydCA8UGFzc0tpdC9QYXNzS2l0Lmg+CisjaW1wb3J0IDxQYXNz
S2l0Q29yZS9QS1BheW1lbnRNZXJjaGFudFNlc3Npb24uaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmll
d0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudEF1dGhvcml6YXRpb25TdGF0
dXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9CbG9j
a1B0ci5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFBhc3NLaXQpCitTT0ZUX0xJTktfQ0xBU1Mo
UGFzc0tpdCwgUEtQYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnBsYXRmb3Jt
U2hvd1BheW1lbnRVSShjb25zdCBXZWJDb3JlOjpVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VVJMPiYgbGlua0ljb25VUkxTdHJpbmdzLCBjb25zdCBXZWJDb3JlOjpQ
YXltZW50UmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgVUlWaWV3Q29udHJvbGxlciAqcHJlc2VudGluZ1ZpZXdDb250
cm9sbGVyID0gbV93ZWJQYWdlUHJveHkudWlDbGllbnQoKS5wcmVzZW50aW5nVmlld0NvbnRyb2xs
ZXIoKTsKKworICAgIGlmICghcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVCghbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKTsKKworICAgIGF1dG8g
cGF5bWVudFJlcXVlc3QgPSB0b1BLUGF5bWVudFJlcXVlc3Qob3JpZ2luYXRpbmdVUkwsIGxpbmtJ
Y29uVVJMU3RyaW5ncywgcmVxdWVzdCk7CisKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmll
d0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1BLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQYXltZW50UmVxdWVzdDpwYXltZW50UmVxdWVzdC5n
ZXQoKV0pOworICAgIGlmICghbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlID0g
YWRvcHROUyhbW1dLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlIGFs
bG9jXSBpbml0V2l0aFBheW1lbnRDb29yZGluYXRvclByb3h5Oip0aGlzXSk7CisgICAgbV9wYXlt
ZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9wYXltZW50U3VtbWFyeUl0
ZW1zID0gW3BheW1lbnRSZXF1ZXN0IHBheW1lbnRTdW1tYXJ5SXRlbXNdOworICAgIG1fcGF5bWVu
dEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVnYXRlLT5fc2hpcHBpbmdNZXRob2RzID0g
W3BheW1lbnRSZXF1ZXN0IHNoaXBwaW5nTWV0aG9kc107CisKKyAgICBbbV9wYXltZW50QXV0aG9y
aXphdGlvblZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGF5bWVudEF1dGhvcml6YXRpb25W
aWV3Q29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKKyAgICBbbV9wYXltZW50QXV0aG9yaXphdGlv
blZpZXdDb250cm9sbGVyIHNldFByaXZhdGVEZWxlZ2F0ZTptX3BheW1lbnRBdXRob3JpemF0aW9u
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbcHJlc2VudGluZ1ZpZXdDb250
cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlcjptX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0Nv
bnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bnVsbHB0cl07CisKKyAgICBj
b21wbGV0aW9uSGFuZGxlcih0cnVlKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eTo6aGlkZVBheW1lbnRVSSgpCit7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlcik7CisgICAgQVNTRVJUKG1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3
Q29udHJvbGxlckRlbGVnYXRlKTsKKworICAgIFtbbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdD
b250cm9sbGVyIHByZXNlbnRpbmdWaWV3Q29udHJvbGxlcl0gZGlzbWlzc1ZpZXdDb250cm9sbGVy
QW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bnVsbHB0cl07CisgICAgW21fcGF5bWVudEF1dGhvcml6
YXRpb25WaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3BheW1lbnRBdXRo
b3JpemF0aW9uVmlld0NvbnRyb2xsZXIgc2V0UHJpdmF0ZURlbGVnYXRlOm5pbF07CisgICAgbV9w
YXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyID0gbnVsbHB0cjsKKworICAgIFttX3Bh
eW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAg
ICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA9IG51bGxwdHI7
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QXBwbGVQYXkvbWFjL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWFjLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L21hYy9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yZmM5NzRlOGZmY2E1NDdiOTk5ZWUyNWI5OGY5YTIzMTEzNDAwZjZj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FwcGxlUGF5L21h
Yy9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1hYy5tbQpAQCAtMCwwICsxLDE1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKEFQUExFX1BBWSkKKwor
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eUNvY29hLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TRXh0ZW5zaW9uLmg+CisjaW1wb3J0
IDxQYXNzS2l0L1BLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcl9Qcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhQYXNzS2l0KQorCitTT0ZUX0xJTktfQ0xBU1MoUGFzc0tpdCwgUEtQYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyKTsKK1NPRlRfTElOS19DT05TVEFOVChQYXNzS2l0LCBQ
S0V4dGVuc2lvblBheW1lbnRBdXRob3JpemF0aW9uVUlFeHRlbnNpb25Qb2ludE5hbWUsIE5TU3Ry
aW5nICopOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eTo6cGxhdGZvcm1TaG93UGF5bWVudFVJKGNvbnN0IFdlYkNvcmU6OlVSTCYgb3JpZ2lu
YXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpVUkw+JiBsaW5rSWNvblVSTFN0cmluZ3Ms
IGNvbnN0IFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHBheW1lbnRSZXF1ZXN0
ID0gdG9QS1BheW1lbnRSZXF1ZXN0KG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTFN0cmluZ3Ms
IHJlcXVlc3QpOworCisgICAgYXV0byBzaG93UGF5bWVudFVJUmVxdWVzdFNlZWQgPSBtX3Nob3dQ
YXltZW50VUlSZXF1ZXN0U2VlZDsKKyAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrUHRyRmFjdG9y
eS5jcmVhdGVXZWFrUHRyKCk7CisgICAgW2dldFBLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckNsYXNzKCkgcmVxdWVzdFZpZXdDb250cm9sbGVyV2l0aFBheW1lbnRSZXF1ZXN0OnBh
eW1lbnRSZXF1ZXN0LmdldCgpIGNvbXBsZXRpb246W3BheW1lbnRSZXF1ZXN0LCBzaG93UGF5bWVu
dFVJUmVxdWVzdFNlZWQsIHdlYWtUaGlzLCBjb21wbGV0aW9uSGFuZGxlcl0oUEtQYXltZW50QXV0
aG9yaXphdGlvblZpZXdDb250cm9sbGVyICp2aWV3Q29udHJvbGxlciwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAgICAgYXV0byBwYXltZW50Q29vcmRpbmF0b3JQcm94eSA9IHdlYWtUaGlzLmdldCgp
OworICAgICAgICBpZiAoIXBheW1lbnRDb29yZGluYXRvclByb3h5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCIrW1BL
UGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciByZXF1ZXN0Vmlld0NvbnRyb2xsZXJX
aXRoUGF5bWVudFJlcXVlc3Q6Y29tcGxldGlvbjpdIGVycm9yICVAIiwgZXJyb3IpOworCisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2hvd1BheW1lbnRVSVJlcXVlc3RTZWVkICE9IHBheW1l
bnRDb29yZGluYXRvclByb3h5LT5tX3Nob3dQYXltZW50VUlSZXF1ZXN0U2VlZCkgeworICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGFza2VkIHRvIGhpZGUgdGhlIHBheW1lbnQgVUku
IERvbid0IGF0dGVtcHQgdG8gc2hvdyBpdC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVCh2aWV3Q29udHJvbGxlcik7CisKKyAgICAgICAgcGF5bWVudENv
b3JkaW5hdG9yUHJveHktPm1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVn
YXRlID0gYWRvcHROUyhbW1dLUGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlckRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFBheW1lbnRDb29yZGluYXRvclByb3h5OipwYXltZW50Q29vcmRp
bmF0b3JQcm94eV0pOworICAgICAgICBwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50
QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVsZWdhdGUtPl9wYXltZW50U3VtbWFyeUl0ZW1z
ID0gW3BheW1lbnRSZXF1ZXN0IHBheW1lbnRTdW1tYXJ5SXRlbXNdOworICAgICAgICBwYXltZW50
Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVyRGVs
ZWdhdGUtPl9zaGlwcGluZ01ldGhvZHMgPSBbcGF5bWVudFJlcXVlc3Qgc2hpcHBpbmdNZXRob2Rz
XTsKKyAgICAgICAgcGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fcGF5bWVudEF1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlciA9IHZpZXdDb250cm9sbGVyOworICAgICAgICBbcGF5bWVudENvb3Jk
aW5hdG9yUHJveHktPm1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBzZXREZWxl
Z2F0ZTpwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+bV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdD
b250cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgICAgICBbcGF5bWVudENvb3JkaW5hdG9yUHJv
eHktPm1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBzZXRQcml2YXRlRGVsZWdh
dGU6cGF5bWVudENvb3JkaW5hdG9yUHJveHktPm1fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29u
dHJvbGxlckRlbGVnYXRlLmdldCgpXTsKKworICAgICAgICBBU1NFUlQoIXBheW1lbnRDb29yZGlu
YXRvclByb3h5LT5tX3NoZWV0V2luZG93KTsKKyAgICAgICAgcGF5bWVudENvb3JkaW5hdG9yUHJv
eHktPm1fc2hlZXRXaW5kb3cgPSBbTlNXaW5kb3cgd2luZG93V2l0aENvbnRlbnRWaWV3Q29udHJv
bGxlcjp2aWV3Q29udHJvbGxlcl07CisgICAgICAgIFtwYXltZW50Q29vcmRpbmF0b3JQcm94eS0+
bV93ZWJQYWdlUHJveHkucGxhdGZvcm1XaW5kb3coKSBiZWdpblNoZWV0OnBheW1lbnRDb29yZGlu
YXRvclByb3h5LT5tX3NoZWV0V2luZG93LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm51bGxwdHJd
OworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgIH1dOworfQorCit2b2lk
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpoaWRlUGF5bWVudFVJKCkKK3sKKyAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6QWN0aXZhdGluZykgeworICAgICAgICArK21fc2hvd1BheW1lbnRV
SVJlcXVlc3RTZWVkOworCisgICAgICAgIEFTU0VSVCghbV9wYXltZW50QXV0aG9yaXphdGlvblZp
ZXdDb250cm9sbGVyKTsKKyAgICAgICAgQVNTRVJUKCFtX3BheW1lbnRBdXRob3JpemF0aW9uVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSk7CisgICAgICAgIEFTU0VSVCghbV9zaGVldFdpbmRvdyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlv
blZpZXdDb250cm9sbGVyKTsKKyAgICBBU1NFUlQobV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdD
b250cm9sbGVyRGVsZWdhdGUpOworICAgIEFTU0VSVChtX3NoZWV0V2luZG93KTsKKworICAgIFtb
bV9zaGVldFdpbmRvdyBzaGVldFBhcmVudF0gZW5kU2hlZXQ6bV9zaGVldFdpbmRvdy5nZXQoKV07
CisgICAgW21fcGF5bWVudEF1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpu
aWxdOworICAgIFttX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgc2V0UHJpdmF0
ZURlbGVnYXRlOm5pbF07CisgICAgbV9wYXltZW50QXV0aG9yaXphdGlvblZpZXdDb250cm9sbGVy
ID0gbnVsbHB0cjsKKworICAgIFttX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKyAgICBtX3BheW1lbnRBdXRob3JpemF0aW9uVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZSA9IG51bGxwdHI7CisKKyAgICBtX3NoZWV0V2luZG93ID0gbnVsbHB0cjsK
K30KKworfQorCitleHRlcm4gIkMiIHsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRB
cHBsZVBheUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7CitXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXBwbGVQYXlFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCk7CisKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRBcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBcHBs
ZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmLCBib29sIGFsbG93ZWQpOworCisvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGVzZSBpbiBm
YXZvciBvZiB0aGUgb25lcyB0aGF0IG1lbnRpb24gQXBwbGUgUGF5LgorV0tfRVhQT1JUIGJvb2wg
V0tQcmVmZXJlbmNlc0dldFBheW1lbnRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQYXltZW50c0VuYWJsZWQo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKTsKK30KKworV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5RW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPmFwcGxlUGF5RW5hYmxlZCgpOworfQorCit2b2lkIFdLUHJlZmVyZW5jZXNTZXRB
cHBsZVBheUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFi
bGVkKQoreworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QXBwbGVQYXlF
bmFibGVkKGVuYWJsZWQpOworfQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRBcHBsZVBheUNhcGFi
aWxpdHlEaXNjbG9zdXJlQWxsb3dlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQor
eworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFwcGxlUGF5Q2Fw
YWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKCk7Cit9CisKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldEFw
cGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIGJvb2wgYWxsb3dlZCkKK3sKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldEFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKGFsbG93ZWQpOwor
fQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRQYXltZW50c0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5
RW5hYmxlZChwcmVmZXJlbmNlc1JlZik7Cit9CisKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldFBheW1l
bnRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQp
Cit7CisgICAgV0tQcmVmZXJlbmNlc1NldEFwcGxlUGF5RW5hYmxlZChwcmVmZXJlbmNlc1JlZiwg
ZW5hYmxlZCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKaW5kZXggMTdkYzkxZWY4NjE2N2U3NGE4YzcwZjM4NjRhYzMxODkxZGM3NzFkZC4uZTNm
M2M1NTNlMDMyYjU5OTRmNjhkNDgzYzZhYjk1N2VlZjcwM2M5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk3LDYgKzk3LDcgQEAKICNpbmNsdWRlICJX
ZWJQYWdlR3JvdXBEYXRhLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eS5oIgogI2luY2x1ZGUgIldlYlBvcHVwSXRlbS5oIgogI2luY2x1ZGUgIldlYlBvcHVw
TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKQEAgLTE2NiwxMCArMTY3
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2Vzc2lvbk1ldGFkYXRhLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25z
L1dlYlBhZ2VQcm94eUluY2x1ZGVzLmg+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICNpbmNs
dWRlICJXZWJQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1YzdiZWVhODk2ZjAyYTZmODEyMzU5
Y2UxOTcyNjZhMzdlODg2NjkuLjc5MjA4MjE5YTkzNDI3Yjc2NWViZTc3NDNhNTA2MmU5MTk3ZTMz
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUluamVj
dGVkQnVuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHku
aCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50Lmg+IC8vIEZJWE1FOiBOZWVkZWQgYnkgV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCBmb3IgRElDVEFUSU9OX0FMVEVSTkFUSVZFUy4KICNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgpAQCAtMTE2LDEwICsxMTcsNiBAQCBPQkpDX0NMQVNTIF9XS1JlbW90ZU9iamVj
dFJlZ2lzdHJ5OwogI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVu
dC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9XZWJQYWdlUHJveHlJbmNsdWRlcy5oPgotI2VuZGlmCi0KICNpZiBFTkFC
TEUoTUVESUFfU0VTU0lPTikKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1lZGlhU2Vzc2lv
bk1ldGFkYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDYxMGUwZmY0ZjdhNzJiODAzOGQwNzQ4NWY2N2JkZjA1M2RlODJjODku
LmM4NDc4NTM4ZTI1MzdhYTJlZjQxZGI2MzBkYjMzYWM4Y2M0ZTllMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5Niw3ICsy
OTYsNiBAQAogCQkxQTZGQkQyODExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZCRDI2MTFF
NjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oICovOyB9OwogCQkxQTZGQkQyOTExRTY5
QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkJEMjcxMUU2OUJDMjAwREIxMzcxIC8qIE5ldHNj
YXBlUGx1Z2luLmNwcCAqLzsgfTsKIAkJMUE3Mjg0NDgxOTU5RjgwNDAwMDdCQ0U1IC8qIFNlc3Np
b25TdGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE3Mjg0NDQxOTU5RUQxMDAwMDdCQ0U1IC8qIFNlc3Npb25TdGF0ZUNvbnZl
cnNpb24uY3BwICovOyB9OwotCQkxQTc4MUFFNzFDNTcxNERBMDBGQjk2REQgLyogV2ViS2l0QWRk
aXRpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE3ODFBRTUxQzU3MTREQTAwRkI5NkREIC8qIFdlYktpdEFkZGl0aW9ucy5tbSAqLzsgfTsKIAkJ
MUE3ODY1QjkxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTc4NjVCNzE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUE3ODY1QkExNkNBQzcx
NTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc4NjVCODE2Q0FD
NzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCAq
LzsgfTsKIAkJMUE3QzBERjYxQjdEMUYxMDAwQTlCODQ4IC8qIFdLV2luZG93RmVhdHVyZXNSZWYu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3QzBE
RjQxQjdEMUYxMDAwQTlCODQ4IC8qIFdLV2luZG93RmVhdHVyZXNSZWYuY3BwICovOyB9OwpAQCAt
MzgzLDYgKzM4MiwxOSBAQAogCQkxQUIxNkFFMjE2NDg2NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFCMTZBRTAxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHkuaCAqLzsgfTsKIAkJMUFCMTZBRTkxNjRCM0E4ODAwMjkwRDYyIC8q
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUIxNkFFNzE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dC5tbSAqLzsgfTsKIAkJMUFCMTZBRUExNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90
ZUxheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQjE2QUU4MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250
ZXh0LmggKi87IH07CisJCTFBQjFGNzc0MUQxQjJGOEEwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFCMUY3NzExRDFCMkY3RTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvci5jcHAg
Ki87IH07CisJCTFBQjFGNzdFMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUIxRjc3ODFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHlDb2NvYS5oICovOyB9OworCQkxQUIxRjc3RjFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQjFGNzc5MUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eUNvY29hLm1tICovOyB9OworCQkxQUIxRjc4MDFEMUIzMEE5MDA3QzlCRDEg
LyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIxRjc3QjFEMUIzMEE5MDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1MubW0gKi87IH07CisJCTFBQjFGNzgxMUQxQjMwQTkw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzdEMUQxQjMwQTkwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1hYy5tbSAqLzsgfTsKKwkJMUFCMUY3OEIx
RDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzg4MUQxQjMzNTUw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAgKi87IH07CisJCTFBQjFG
NzhDMUQxQjMzNTUwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMUY3ODkxRDFCMzM1
NTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmggKi87IH07CisJCTFBQjFG
NzkwMUQxQjM0QTYwMDdDOUJEMSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzhFMUQxQjM0
QTYwMDdDOUJEMSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSAqLzsgfTsKKwkJMUFC
MUY3OTExRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIxRjc4RjFEMUIz
NEE2MDA3QzlCRDEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EuaCAqLzsgfTsKKwkJMUFC
MUY3OTYxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUIxRjc5MjFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKKwkJMUFCMUY3OTcxRDFCMzYxMzAwN0M5QkQxIC8qIFdlYlBheW1l
bnRDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yTWVzc2FnZXMuaCAqLzsgfTsKKwkJMUFCMUY3OTgxRDFCMzYxMzAwN0M5QkQxIC8qIFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQjFGNzk0MUQxQjM2MTMwMDdDOUJE
MSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CisJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUIxRjc5NTFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlN
ZXNzYWdlcy5oICovOyB9OwogCQkxQUIzMUE5NjE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFCMzFBOTQxNkJDNjg4MTAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUFCMzFBOTcxNkJDNjg4MTAwRjZEQkM5IC8q
IFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQjMxQTk1MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdl
ck1lc3NhZ2VzLmggKi87IH07CiAJCTFBQjQwRUU1MUJGNjc3RTMwMEJBODFCRSAvKiBXS01lbnVJ
dGVtSWRlbnRpZmllcnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUI0MEVFMzFCRjY3N0UzMDBCQTgxQkUgLyogV0tNZW51SXRlbUlkZW50aWZpZXJz
Lm1tICovOyB9OwpAQCAtMjI1NSw3ICsyMjY3LDYgQEAKIAkJMUE2RkJEMjcxMUU2OUJDMjAwREIx
MzcxIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE5ldHNjYXBlUGx1Z2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE3Mjg0NDQxOTU5RUQxMDAwMDdCQ0U1IC8qIFNlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0YXRlQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNzI4NDQ1MTk1OUVEMTAwMDA3
QkNFNSAvKiBTZXNzaW9uU3RhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNlc3Npb25TdGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE3ODFBRTUxQzU3MTREQTAwRkI5NkREIC8qIFdlYktpdEFkZGl0aW9ucy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYktpdEFkZGl0aW9ucy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3ODY1QjYxNkNBQzZGRDAwQUNFODNB
IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBNzg2NUI3MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3ODY1QjgxNkNBQzcxNTAw
QUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
ck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzU2LDYgKzIzNjcs
MjIgQEAKIAkJMUFCMTZBRTAxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QUIxNkFFNzE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQjE2QUU4MTY0QjNBODgwMDI5
MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUFCMUY3NzExRDFCMkY3RTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYXltZW50Q29v
cmRpbmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc3MjFEMUIy
RjdFMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUIxRjc3MzFEMUIyRjdFMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBheW1lbnRDb29y
ZGluYXRvci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3
NzgxRDFCMzBBOTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHlDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc3OTFEMUIzMEE5
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzdCMUQxQjMwQTkw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUlPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUIxRjc3RDFEMUIzMEE5MDA3QzlC
RDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3ODgxRDFCMzM1NTAwN0M5QkQxIC8q
IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3ODkxRDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBheW1lbnRD
b29yZGluYXRvclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
QjFGNzhBMUQxQjMzNTUwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFCMUY3OEUxRDFC
MzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzhGMUQxQjM0QTYwMDdDOUJE
MSAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUIxRjc5MjFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBX
ZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3Jk
aW5hdG9yTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUGF5
bWVudENvb3JkaW5hdG9yTWVzc2FnZXMuaDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvck1l
c3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQjFGNzk0MUQxQjM2MTMw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBXZWJQYXltZW50Q29vcmRpbmF0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
QjFGNzk1MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlBheW1lbnRDb29yZGlu
YXRvclByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMzFBOTMxNkJDNjVBQjAw
RjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2VNYW5hZ2Vy
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIzMUE5NDE2QkM2
ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIzMUE5NTE2QkM2ODgxMDBG
NkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NDE3LDcgKzQ0NDQsNyBAQAogCQkJCTUxOEU4RUYxMTZCMjA4RjAwMEU5MTQy
OSAvKiBBdXRoZW50aWNhdGlvbiAqLywKIAkJCQkxQUFGMEM0NzEyQjE2MzI4MDA4RTQ5RTIgLyog
Y2YgKi8sCiAJCQkJQzAxQTI1RkYxMjY2MkYyMTAwQzlFRDU1IC8qIGNnICovLAotCQkJCTM3QzRD
MDkwMTgxNEIzN0IwMDM2ODhCOSAvKiBDb2NvYSAqLywKKwkJCQkzN0M0QzA5MDE4MTRCMzdCMDAz
Njg4QjkgLyogY29jb2EgKi8sCiAJCQkJNTFFMzUxQzIxODBGMkM4NTAwRTUzQkU5IC8qIERhdGFi
YXNlcyAqLywKIAkJCQlCQzgyODM2ODE2QjM1ODc5MDBBMjc4RkUgLyogRW50cnlQb2ludFV0aWxp
dGllcyAqLywKIAkJCQlFMTcwODc3MjE2RDZDRkVDMDBGOTkyMjYgLyogRmlsZUFQSSAqLywKQEAg
LTQ2MTgsNiArNDY0NSw1NCBAQAogCQkJcGF0aCA9IGNmOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJMUFCMUY3NzAxRDFCMkY1RDAwN0M5QkQxIC8qIEFwcGxlUGF5ICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQUIxRjc3MTFEMUIy
RjdFMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCAqLywKKwkJCQkxQUIxRjc3
MjFEMUIyRjdFMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yLmggKi8sCisJCQkJMUFC
MUY3NzMxRDFCMkY3RTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvci5tZXNzYWdlcy5p
biAqLywKKwkJCSk7CisJCQlwYXRoID0gQXBwbGVQYXk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQkxQUIxRjc3NjFEMUIzMEE5MDA3QzlCRDEgLyogQXBwbGVQYXkgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBQjFGNzc3MUQxQjMw
QTkwMDdDOUJEMSAvKiBjb2NvYSAqLywKKwkJCQkxQUIxRjc3QTFEMUIzMEE5MDA3QzlCRDEgLyog
aW9zICovLAorCQkJCTFBQjFGNzdDMUQxQjMwQTkwMDdDOUJEMSAvKiBtYWMgKi8sCisJCQkJMUFC
MUY3ODgxRDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCAq
LywKKwkJCQkxQUIxRjc4OTFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHkuaCAqLywKKwkJCQkxQUIxRjc4QTFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IEFwcGxlUGF5
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMUFCMUY3NzcxRDFCMzBBOTAw
N0M5QkQxIC8qIGNvY29hICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQUIxRjc3ODFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlDb2NvYS5oICovLAorCQkJCTFBQjFGNzc5MUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBjb2NvYTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBQjFGNzdBMUQxQjMwQTkwMDdD
OUJEMSAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTFBQjFGNzdCMUQxQjMwQTkwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eUlPUy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gaW9zOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJMUFCMUY3N0MxRDFCMzBBOTAwN0M5QkQxIC8qIG1hYyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUFCMUY3N0QxRDFCMzBBOTAw
N0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWFjLm1tICovLAorCQkJKTsKKwkJ
CXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQUI3RDRD
NzEyODhBQTlBMDBDRkQwOEMgLyogRG93bmxvYWRzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTUxNjAsMTYgKzUyMzUsMTcgQEAKIAkJCXBhdGggPSBDb2Nv
YTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTM3QzRDMDkwMTgxNEIzN0Iw
MDM2ODhCOSAvKiBDb2NvYSAqLyA9IHsKKwkJMzdDNEMwOTAxODE0QjM3QjAwMzY4OEI5IC8qIGNv
Y29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQUIx
Rjc4RTFEMUIzNEE2MDA3QzlCRDEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gKi8s
CisJCQkJMUFCMUY3OEYxRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLmggKi8sCiAJCQkJMUExRUYxOTcxQTFENUI0MjAwMjMyMDBBIC8qIEFQSURhdGFDb2NvYS5t
bSAqLywKIAkJCQkzNzhFMUEzQjE4MUVENkZGMDAzMTAwN0EgLyogQVBJT2JqZWN0Lm1tICovLAog
CQkJCTM3QkVDNERGMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyLmggKi8sCiAJCQkJMzdCRUM0REUxOTQ5MTQ4NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXIubW0gKi8sCiAJCQkJQzU1RjkxNkMxQzU5NUU0NDAwMjlFOTJEIC8qIERh
dGFEZXRlY3Rpb25SZXN1bHQuaCAqLywKIAkJCQlDNTVGOTE2RDFDNTk1RTQ0MDAyOUU5MkQgLyog
RGF0YURldGVjdGlvblJlc3VsdC5tbSAqLywKLQkJCQkxQTc4MUFFNTFDNTcxNERBMDBGQjk2REQg
LyogV2ViS2l0QWRkaXRpb25zLm1tICovLAogCQkJCTM3QzRDMDkyMTgxNEIzQUYwMDM2ODhCOSAv
KiBXS05TQXJyYXkuaCAqLywKIAkJCQkzN0M0QzA5MTE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0Fy
cmF5Lm1tICovLAogCQkJCTM3M0NFQUQ0MTg1NDE3QUUwMDhDMzYzRCAvKiBXS05TRGF0YS5oICov
LApAQCAtNTE4OSw2ICs1MjY1LDcgQEAKIAkJCQkzNzhFMUEzRjE4MUVEQTAxMDAzMTAwN0EgLyog
V0tPYmplY3QuaCAqLywKIAkJCQkzNzQ0MzY4NzE4MjBFNzI0MDA0OTU3OUYgLyogV0tPYmplY3Qu
bW0gKi8sCiAJCQkpOworCQkJbmFtZSA9IGNvY29hOwogCQkJcGF0aCA9IENvY29hOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKQEAgLTU3MTMsNiArNTc5MCw3IEBACiAJCUJDMDMy
RDVDMTBGNDM2RDUwMDU4QzE1QSAvKiBXZWJQcm9jZXNzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQUIxRjc3MDFEMUIyRjVEMDA3QzlCRDEgLyogQXBw
bGVQYXkgKi8sCiAJCQkJMUMwQTE5NDMxQzhGRjFBODAwRkUwRUJCIC8qIEF1dG9tYXRpb24gKi8s
CiAJCQkJN0M2RTcwRjgxOEIyRDQ3RTAwRjI0RTJFIC8qIGNvY29hICovLAogCQkJCTMzMDkzNDRC
MTMxNUI5M0EwMDk3QTdCQyAvKiBDb29raWVzICovLApAQCAtNTg1Miw2ICs1OTMwLDcgQEAKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkMwMzJEQzQxMEY0Mzg3QzAw
NThDMTVBIC8qIEFQSSAqLywKKwkJCQkxQUIxRjc3NjFEMUIzMEE5MDA3QzlCRDEgLyogQXBwbGVQ
YXkgKi8sCiAJCQkJNTEyRjU4OEQxMkE4ODM2RjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uICov
LAogCQkJCTk5NTVBNkU4MUM3OTgwOTAwMEVCNkE5MyAvKiBBdXRvbWF0aW9uICovLAogCQkJCTFB
QkMzREYyMTg5OUU0MTUwMDRGMDYyNiAvKiBDb2NvYSAqLywKQEAgLTY4NjEsNiArNjk0MCwxMCBA
QAogCQlDMENFNzI5RDEyNDdFNzFEMDBCQzBFQzQgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQUIxRjc5MjFEMUIzNjEz
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywK
KwkJCQkxQUIxRjc5MzFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yTWVz
c2FnZXMuaCAqLywKKwkJCQkxQUIxRjc5NDFEMUIzNjEzMDA3QzlCRDEgLyogV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTFBQjFGNzk1MUQxQjM2
MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmggKi8sCiAJ
CQkJNTEyRjU4QTAxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTEyRjU4QTExMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhl
bnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCiAJCQkJOTk1NUE2RjAxQzc5ODY2NDAwRUI2
QTkzIC8qIEF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMuY3BwICovLApAQCAtNzcwMCw2ICs3
NzgzLDcgQEAKIAkJCQk5MzkxRjJDQjEyMUI2N0FEMDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOUY2QTAxMTIzQTg0QjAwQTEzN0Uw
IC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5
QjM4QTExMEY1MzhCRTAwNDQzQTE1IC8qIFdlYkZyYW1lUHJveHkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFBQjFGNzk5MUQxQjM2MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFCRTFFMDEyRDU0QTQxMDAwNEEyMjgg
LyogV2ViR2VvbG9jYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU1RkU1MTJE
Njk3MTYwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMEU2MDYyMTJENkJBOTEwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzgxLDYgKzc4NjUsNyBAQAogCQkJCUJDMzA2ODI0
MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUZBNEI5MDFBNjVBOUUyMDA2QzRBQjQgLyogV2ViUHJvY2Vzc0xpZmV0
aW1lT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkE0QjhDMUE2NUExRDAwMDZDNEFC
NCAvKiBXZWJQcm9jZXNzTGlmZXRpbWVUcmFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUIx
Rjc4QzFEMUIzMzU1MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMzA2NkJGMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTREMjFCMUE0OTE0QTMwMEM3RjE1MiAvKiBX
ZWJQcm9jZXNzUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNEQyMjgxQTQ5MTZDMjAwQzdG
MTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzkwMSw2
ICs3OTg2LDcgQEAKIAkJCQkzMzA5MzQ1QjEzMTVCOTk4MDA5N0E3QkMgLyogV0tDb29raWVNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThGQTEyQTg4QTU0MDA2Mjk1MzAgLyogV0tD
cmVkZW50aWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MThBQ0YxMTEyQjAxNUY4MDBCMDRCODMg
LyogV0tDcmVkZW50aWFsVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBQjFGNzk3MUQxQjM2
MTMwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM0MDc1RjgxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzc3RUFENDUxN0UyQzUxQTAwMkQxOTNEIC8qIFdLRGVjbGFyYXRpb25TcGVjaWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzcyREIyRjFBNjc3RDRBMDBDNjk3QzUgLyogV0tE
aWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODA0OCwxMCAr
ODEzNCwxMiBAQAogCQkJCTFBRDAxQkNEMTkwNUQ1NDkwMEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1l
RXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5RTMyOUIxODIy
RTFDQzAwRjVEMDRDIC8qIFdLUmVtb3RlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlF
MzI5RjE4MjJGRUREMDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMUFCMUY3OTExRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVy
c0NvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwOTE1MEM0Qjk3MDBFNTJDRTkgLyog
V0tSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2MDg4MjMxNTA0MTRGNzAwRkM4
MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzM2NzYzQjEzMEM5
OURDMDA2QzlERTIgLyogV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE5REQzQzAxRDA3RDE2ODAwQUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlcklu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUIxRjc3RTFEMUIzMEE5MDA3QzlCRDEgLyog
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
QTUwMTUxMTc2NUY1NjAwNzU3NTczIC8qIFdLUmV0YWluUHRyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTdFMzc3OTE4RTRBNEZFMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTdFMzc3NTE4RTRBMzNBMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDA0LDYgKzkwOTIsNyBAQAogCQkJCUJDQzQzQUJB
MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE2RkI3RDIxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMUE2N0UwQzE2NUIyQTk5MDA2Q0JBNjYgLyogUGx1Z0luQXV0b1N0YXJ0UHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUFCMUY3OTYxRDFCMzYxMzAwN0M5QkQxIC8q
IFdlYlBheW1lbnRDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQThFRjRDQzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5MUE2MTI4MUQ3MzkwMDFFQjk2MiAvKiBQbHVnaW5D
b250cm9sbGVyUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQThFRjk2RTEyNTJBRjZC
MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtOTAyNSw2ICs5MTE0LDcgQEAKIAkJCQkxQTBFQzc1RjEyNEJDN0IyMDA3
RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5
MEJCMTI4MUM5MzEwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQTA0M0I1RDEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBQjFGNzc0MUQxQjJGOEEw
MDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEwNDNEQzIxMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBMkQ5MjIxMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyMDQsNiArOTI5NCw3IEBACiAJ
CQkJNTE4MzQ1OTIxMzQ1MzJFOTAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUQwMkY2NDEzMkVDNUI5MDBCRUFBOTYgLyogV2ViSWNvbkRh
dGFiYXNlTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUIyNEE2MTMy
RTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxQUIxRjc3RjFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJv
eHlDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRDAyRjZCMTMyRUM3MzcwMEJFQUE5NiAv
KiBXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTA1MjM2RjFDNzM5RDQyMDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDUyMzc5MUM3M0RBNzcwMDc5OTNDQiAvKiBXZWJJ
REJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MjI0LDcgKzkzMTUsNiBAQAogCQkJCUMwMzM3REQzMTI3QTJBMEUwMDhGRjRGNCAvKiBXZWJL
ZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjI4MEYzMTkxOTk4MkEwMDZB
RDlGOSAvKiBXZWJLaXQubSBpbiBTb3VyY2VzICovLAogCQkJCUJDOUJBNTA0MTY5N0M0NTMwMEU0
NDYxNiAvKiBXZWJLaXQySW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTc4MUFF
NzFDNTcxNERBMDBGQjk2REQgLyogV2ViS2l0QWRkaXRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYkxvYWRlclN0cmF0ZWd5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEMDAzQTUyMTlENDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0
b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM5OEM0OEE1MUI2RkQ0QzMwMDE0
NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MjQ0LDggKzkzMzQsMTAgQEAKIAkJCQlCQzg1N0Y4NjEyQjgyRDBCMDBFREVCMkUgLyogV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4NTdGN0Ux
MkI4MkNFRTAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM5NjNENkIxMTNERDE5MjAwNTc0QkUyIC8qIFdlYlBhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUFCMUY3OEIxRDFCMzM1NTAwN0M5QkQxIC8qIFdlYlBheW1l
bnRDb29yZGluYXRvclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwNkM2MDk1MTI0QzE0
NEIwMDAxNjgyRiAvKiBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgzNzJEQjI4MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUFCMUY3OTgxRDFCMzYxMzAwN0M5QkQx
IC8qIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyNTMxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VH
cm91cERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0
IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM2NSw2ICs5NDU3
LDcgQEAKIAkJCQlFRENBNzFCNzEyOEREQThDMDAyMDFCMjYgLyogV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwQzU3QTEyNDBBNTQ2MDA4QzVFMjkgLyogV0tC
dW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0REY5RTEyMEI2MzVG
MDA4MjZDMEMgLyogV0tCdW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QUIxRjc4MDFEMUIzMEE5MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlJT1Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEyNEZGMDI3MDA2OEYyMEEgLyogV0tDZXJ0
aWZpY2F0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MjgxMjRGRjA0MDAwNjhG
MjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMjg0
RDYxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAt
OTM3OCw2ICs5NDcxLDcgQEAKIAkJCQkzMzA5MzQ1QTEzMTVCOTk4MDA5N0E3QkMgLyogV0tDb29r
aWVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkY1OEY5MTJBODhBNTQwMDYyOTUz
MCAvKiBXS0NyZWRlbnRpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc1RjcxMjRGRjAy
NzAwNjhGMjBBIC8qIFdLRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUIxRjc5MDFEMUIz
NEE2MDA3QzlCRDEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxQUZGNDkwMDE4MzNERTc4MDA5QUIxNUEgLyogV0tEZXByZWNhdGVkRnVuY3Rpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUY5MTI0RkYwMjcwMDY4RjIwQSAvKiBXS0Rp
Y3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMTdEMDgxNjI2MEZGNDAwNzA1NEY1
IC8qIFdLRE9NRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLywKQEAgLTk0OTEsNiArOTU4NSw3IEBA
CiAJCQkJMEZDQjRFNjkxOEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJv
bGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjA3MTI0RkYwMjcwMDY4RjIwQSAvKiBX
S1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENUVCQkUxNzQ2QjA0QzAwMEMxQzQ1IC8q
IFdLVHlwZVJlZldyYXBwZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQUIxRjc4MTFEMUIzMEE5
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzQwNzYwOTEyNEZGMDI3MDA2OEYyMEEgLyogV0tVUkwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0MDc2MUIxMjRGRjAzNzAwNjhGMjBBIC8qIFdLVVJMQ0YubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQzQwNzYwQjEyNEZGMDI3MDA2OEYyMEEgLyogV0tVUkxSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3YjJhOWRk
ZDg0OTUxZGMwNTUxNWE3YTY1Mzk3YTdlNDg1MGYxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAK
QEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yLmgiCisKKyNpZiBFTkFCTEUoQVBQTEVf
UEFZKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlICJXZWJQYXltZW50Q29vcmRpbmF0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldl
YlBheW1lbnRDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bh
eW1lbnRDb29yZGluYXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJQYXltZW50Q29vcmRpbmF0b3I6OldlYlBheW1lbnRDb29yZGluYXRv
cihXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQYXlt
ZW50Q29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgp
LCAqdGhpcyk7Cit9CisKK1dlYlBheW1lbnRDb29yZGluYXRvcjo6fldlYlBheW1lbnRDb29yZGlu
YXRvcigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV93ZWJQYWdlLnBhZ2VJRCgpKTsKK30KKworYm9vbCBXZWJQYXltZW50Q29vcmRpbmF0b3I6
OnN1cHBvcnRzVmVyc2lvbih1bnNpZ25lZCB2ZXJzaW9uKQoreworICAgIEFTU0VSVCh2ZXJzaW9u
ID4gMCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmNhbk1h
a2VQYXltZW50cygpCit7CisgICAgYm9vbCBjYW5NYWtlUGF5bWVudHM7CisgICAgaWYgKCFtX3dl
YlBhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpDYW5N
YWtlUGF5bWVudHMoKSwgTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpDYW5N
YWtlUGF5bWVudHM6OlJlcGx5KGNhbk1ha2VQYXltZW50cykpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gY2FuTWFrZVBheW1lbnRzOworfQorCitzdGF0aWMgdWludDY0X3Qg
Z2VuZXJhdGVDYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5SUQoKQoreworICAgIHN0
YXRpYyB1aW50NjRfdCBjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5SUQ7CisKKyAg
ICByZXR1cm4gKytjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5SUQ7Cit9CisKK3Zv
aWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChj
b25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkb21haW5OYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBh
dXRvIHJlcGx5SUQgPSBnZW5lcmF0ZUNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkUmVwbHlJ
RCgpOworCisgICAgbV9wZW5kaW5nQ2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmRDYWxsYmFj
a3MuYWRkKHJlcGx5SUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBtX3dlYlBh
Z2Uuc2VuZChNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNhbk1ha2VQYXlt
ZW50c1dpdGhBY3RpdmVDYXJkKG1lcmNoYW50SWRlbnRpZmllciwgZG9tYWluTmFtZSwgcmVwbHlJ
RCkpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSShjb25z
dCBXZWJDb3JlOjpVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VVJM
PiYgbGlua0ljb25VUkxzLCBjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdCYgcGF5bWVudFJl
cXVlc3QpCit7CisgICAgVmVjdG9yPFN0cmluZz4gbGlua0ljb25VUkxTdHJpbmdzOworICAgIGZv
ciAoY29uc3QgYXV0byYgbGlua0ljb25VUkwgOiBsaW5rSWNvblVSTHMpCisgICAgICAgIGxpbmtJ
Y29uVVJMU3RyaW5ncy5hcHBlbmQobGlua0ljb25VUkwuc3RyaW5nKCkpOworCisgICAgbV93ZWJQ
YWdlLnNlbmQoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVu
dFVJKG9yaWdpbmF0aW5nVVJMLnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1lbnRS
ZXF1ZXN0KSk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpjb21wbGV0ZU1lcmNo
YW50VmFsaWRhdGlvbihjb25zdCBXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uJiBwYXlt
ZW50TWVyY2hhbnRTZXNzaW9uKQoreworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eTo6Q29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVu
dE1lcmNoYW50U2Vzc2lvbikpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6Y29t
cGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlv
blN0YXR1cyBzdGF0dXMsIE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFu
ZExpbmVJdGVtcz4gbmV3VG90YWxBbmRJdGVtcykKK3sKKyAgICBtX3dlYlBhZ2Uuc2VuZChNZXNz
YWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNvbXBsZXRlU2hpcHBpbmdNZXRob2RT
ZWxlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXR1cyksIG5ld1RvdGFsQW5kSXRlbXMp
KTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OmNvbXBsZXRlU2hpcHBpbmdDb250
YWN0U2VsZWN0aW9uKFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cywg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD4mIG5l
d1NoaXBwaW5nTWV0aG9kcywgT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OlRvdGFs
QW5kTGluZUl0ZW1zPiBuZXdUb3RhbEFuZEl0ZW1zKQoreworICAgIG1fd2ViUGFnZS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6Q29tcGxldGVTaGlwcGluZ0NvbnRh
Y3RTZWxlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXR1cyksIG5ld1NoaXBwaW5nTWV0
aG9kcywgbmV3VG90YWxBbmRJdGVtcykpOworfQorCit2b2lkIFdlYlBheW1lbnRDb29yZGluYXRv
cjo6Y29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKE9wdGlvbmFsPFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4gbmV3VG90YWxBbmRJdGVtcykKK3sKKyAgICBt
X3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNvbXBs
ZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihuZXdUb3RhbEFuZEl0ZW1zKSk7Cit9CisKK3ZvaWQg
V2ViUGF5bWVudENvb3JkaW5hdG9yOjpjb21wbGV0ZVBheW1lbnRTZXNzaW9uKFdlYkNvcmU6OlBh
eW1lbnRBdXRob3JpemF0aW9uU3RhdHVzIHN0YXR1cykKK3sKKyAgICBtX3dlYlBhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OkNvbXBsZXRlUGF5bWVudFNlc3Np
b24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXR1cykpKTsKK30KKwordm9pZCBXZWJQYXltZW50
Q29vcmRpbmF0b3I6OmFib3J0UGF5bWVudFNlc3Npb24oKQoreworICAgIG1fd2ViUGFnZS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6QWJvcnRQYXltZW50U2Vzc2lv
bigpKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6Om1haW5GcmFtZURlc3Ryb3ll
ZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9y
Ojp2YWxpZGF0ZU1lcmNoYW50KGNvbnN0IFN0cmluZyYgdmFsaWRhdGlvblVSTFN0cmluZykKK3sK
KyAgICBwYXltZW50Q29vcmRpbmF0b3IoKS52YWxpZGF0ZU1lcmNoYW50KFdlYkNvcmU6OlVSTChX
ZWJDb3JlOjpVUkwoKSwgdmFsaWRhdGlvblVSTFN0cmluZykpOworfQorCit2b2lkIFdlYlBheW1l
bnRDb29yZGluYXRvcjo6ZGlkQXV0aG9yaXplUGF5bWVudChjb25zdCBXZWJDb3JlOjpQYXltZW50
JiBwYXltZW50KQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigpLmRpZEF1dGhvcml6ZVBheW1l
bnQocGF5bWVudCk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpkaWRTZWxlY3RT
aGlwcGluZ01ldGhvZChjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRo
b2QmIHNoaXBwaW5nTWV0aG9kKQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigpLmRpZFNlbGVj
dFNoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKTsKK30KKwordm9pZCBXZWJQYXltZW50Q29v
cmRpbmF0b3I6OmRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdChjb25zdCBXZWJDb3JlOjpQYXltZW50
Q29udGFjdCYgc2hpcHBpbmdDb250YWN0KQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigpLmRp
ZFNlbGVjdFNoaXBwaW5nQ29udGFjdChzaGlwcGluZ0NvbnRhY3QpOworfQorCit2b2lkIFdlYlBh
eW1lbnRDb29yZGluYXRvcjo6ZGlkU2VsZWN0UGF5bWVudE1ldGhvZChjb25zdCBXZWJDb3JlOjpQ
YXltZW50TWV0aG9kJiBwYXltZW50TWV0aG9kKQoreworICAgIHBheW1lbnRDb29yZGluYXRvcigp
LmRpZFNlbGVjdFBheW1lbnRNZXRob2QocGF5bWVudE1ldGhvZCk7Cit9CisKK3ZvaWQgV2ViUGF5
bWVudENvb3JkaW5hdG9yOjpkaWRDYW5jZWxQYXltZW50KCkKK3sKKyAgICBwYXltZW50Q29vcmRp
bmF0b3IoKS5kaWRDYW5jZWxQYXltZW50KCk7Cit9CisKK3ZvaWQgV2ViUGF5bWVudENvb3JkaW5h
dG9yOjpjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5KHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCBjYW5NYWtlUGF5bWVudHMpCit7CisgICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGlu
Z0Nhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkQ2FsbGJhY2tzLnRha2UocmVxdWVzdElEKTsK
KyAgICBjYWxsYmFjayhjYW5NYWtlUGF5bWVudHMpOworfQorCitXZWJDb3JlOjpQYXltZW50Q29v
cmRpbmF0b3ImIFdlYlBheW1lbnRDb29yZGluYXRvcjo6cGF5bWVudENvb3JkaW5hdG9yKCkKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLm1haW5GcmFtZSgpLT5wYXltZW50Q29vcmRpbmF0b3IoKTsK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
QXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzNjJlMjI4
OGI4YzQwY2NjODIwMjVmODU2NzE4YWMyMmQzYzY1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5oCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShBUFBMRV9QQVkpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1BheW1lbnRDb29yZGluYXRvckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGF5bWVudEhlYWRlcnMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGF5bWVudENvb3JkaW5hdG9yOworY2xhc3Mg
UGF5bWVudENvbnRhY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
OworCitjbGFzcyBXZWJQYXltZW50Q29vcmRpbmF0b3IgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
UGF5bWVudENvb3JkaW5hdG9yQ2xpZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJQYXltZW50Q29vcmRpbmF0b3IoV2ViUGFnZSYpOwor
ICAgIH5XZWJQYXltZW50Q29vcmRpbmF0b3IoKTsKKworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3Jl
OjpQYXltZW50Q29vcmRpbmF0b3JDbGllbnQuCisgICAgYm9vbCBzdXBwb3J0c1ZlcnNpb24odW5z
aWduZWQgdmVyc2lvbikgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5NYWtlUGF5bWVudHMoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmlu
ZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbk5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoYm9vbCk+IGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNob3dQYXltZW50VUkoY29uc3QgV2ViQ29yZTo6VVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlVSTD4mIGxpbmtJY29uVVJMcywgY29uc3QgV2ViQ29yZTo6UGF5bWVu
dFJlcXVlc3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9u
KGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24oV2ViQ29yZTo6UGF5bWVudEF1dGhv
cml6YXRpb25TdGF0dXMsIE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFu
ZExpbmVJdGVtcz4gbmV3VG90YWxBbmRJdGVtcykgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21wbGV0
ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0
YXR1cywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhv
ZD4mLCBPcHRpb25hbDxXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+
IG5ld1RvdGFsQW5kSXRlbXMpIG92ZXJyaWRlOworICAgIHZvaWQgY29tcGxldGVQYXltZW50TWV0
aG9kU2VsZWN0aW9uKE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExp
bmVJdGVtcz4pIG92ZXJyaWRlOworICAgIHZvaWQgY29tcGxldGVQYXltZW50U2Vzc2lvbihXZWJD
b3JlOjpQYXltZW50QXV0aG9yaXphdGlvblN0YXR1cykgb3ZlcnJpZGU7CisgICAgdm9pZCBhYm9y
dFBheW1lbnRTZXNzaW9uKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG1haW5GcmFtZURlc3Ryb3ll
ZCgpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikg
b3ZlcnJpZGU7CisKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgorICAgIHZvaWQgdmFsaWRhdGVN
ZXJjaGFudChjb25zdCBTdHJpbmcmIHZhbGlkYXRpb25VUkxTdHJpbmcpOworICAgIHZvaWQgZGlk
QXV0aG9yaXplUGF5bWVudChjb25zdCBXZWJDb3JlOjpQYXltZW50Jik7CisgICAgdm9pZCBkaWRT
ZWxlY3RTaGlwcGluZ01ldGhvZChjb25zdCBXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6U2hpcHBp
bmdNZXRob2QmKTsKKyAgICB2b2lkIGRpZFNlbGVjdFNoaXBwaW5nQ29udGFjdChjb25zdCBXZWJD
b3JlOjpQYXltZW50Q29udGFjdCYpOworICAgIHZvaWQgZGlkU2VsZWN0UGF5bWVudE1ldGhvZChj
b25zdCBXZWJDb3JlOjpQYXltZW50TWV0aG9kJik7CisgICAgdm9pZCBkaWRDYW5jZWxQYXltZW50
KCk7CisgICAgdm9pZCBjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZFJlcGx5KHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCBjYW5NYWtlUGF5bWVudHMpOworCisgICAgV2ViQ29yZTo6UGF5bWVu
dENvb3JkaW5hdG9yJiBwYXltZW50Q29vcmRpbmF0b3IoKTsKKworICAgIFdlYlBhZ2UmIG1fd2Vi
UGFnZTsKKworICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+
PiBtX3BlbmRpbmdDYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZENhbGxiYWNrczsKK307CisK
K30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BcHBsZVBh
eS9XZWJQYXltZW50Q29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5tZXNzYWdlcy5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNTM3OTdkZmJkODY4NTlmMTBjZDJiNTU0OTMxODVkZDE3N2FlZWNjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29v
cmRpbmF0b3IubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyMvCisKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorCittZXNzYWdl
cyAtPiBXZWJQYXltZW50Q29vcmRpbmF0b3IgeworCisgICAgVmFsaWRhdGVNZXJjaGFudChTdHJp
bmcgdmFsaWRhdGlvblVSTFN0cmluZykKKyAgICBEaWRBdXRob3JpemVQYXltZW50KFdlYkNvcmU6
OlBheW1lbnQgcGF5bWVudCkKKyAgICBEaWRTZWxlY3RTaGlwcGluZ01ldGhvZChXZWJDb3JlOjpQ
YXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Qgc2hpcHBpbmdNZXRob2QpCisgICAgRGlkU2Vs
ZWN0U2hpcHBpbmdDb250YWN0KFdlYkNvcmU6OlBheW1lbnRDb250YWN0IHNoaXBwaW5nQ29udGFj
dCkKKyAgICBEaWRTZWxlY3RQYXltZW50TWV0aG9kKFdlYkNvcmU6OlBheW1lbnRNZXRob2QgcGF5
bWVudE1ldGhvZCkKKyAgICBEaWRDYW5jZWxQYXltZW50KCkKKyAgICBDYW5NYWtlUGF5bWVudHNX
aXRoQWN0aXZlQ2FyZFJlcGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBjYW5NYWtlUGF5bWVu
dHMpCit9CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="305814"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>