<?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>61334</bug_id>
          
          <creation_ts>2011-05-23 18:21:40 -0700</creation_ts>
          <short_desc>Should shim a few SecKeychainItem* methods on SnowLeopard</short_desc>
          <delta_ts>2011-05-24 15:54:31 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>408537</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-23 18:21:40 -0700</bug_when>
    <thetext>Should shim a few SecKeychainItem* methods on SnowLeopard

In radar as &lt;rdar://problem/9434311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408547</commentid>
    <comment_count>1</comment_count>
      <attachid>94536</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-23 18:28:34 -0700</bug_when>
    <thetext>Created attachment 94536
Refactoring-prep v1 - Move the current SecItem shims into their own implementation file for non-SnowLeopard builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408553</commentid>
    <comment_count>2</comment_count>
      <attachid>94536</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-05-23 18:37:46 -0700</bug_when>
    <thetext>Comment on attachment 94536
Refactoring-prep v1 - Move the current SecItem shims into their own implementation file for non-SnowLeopard builds.

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

&gt; Source/WebKit2/WebProcess/mac/WebProcessSecItemShim.mm:41
&gt; +static bool UseSecItemShim = false;

This should not start with a capital letter. There is no need to initialize it to false.

&gt; Source/WebKit2/WebProcess/mac/WebProcessSecItemShim.mm:48
&gt; +struct SecItemAPIContext
&gt; +{

{ should be on previous line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408576</commentid>
    <comment_count>3</comment_count>
      <attachid>94546</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-23 19:10:30 -0700</bug_when>
    <thetext>Created attachment 94546
Refactoring-prep v2 - Keep the shim callbacks in the WebKit2 framework, and the shims in the WebProcessShim

Had to rework this a bit because of the WebProcess / WebProcessShim divide.

Totally moved that bracket, though!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408694</commentid>
    <comment_count>4</comment_count>
      <attachid>94546</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-24 00:01:41 -0700</bug_when>
    <thetext>Comment on attachment 94546
Refactoring-prep v2 - Keep the shim callbacks in the WebKit2 framework, and the shims in the WebProcessShim

Attachment 94546 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8727507</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409145</commentid>
    <comment_count>5</comment_count>
      <attachid>94671</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-24 13:15:19 -0700</bug_when>
    <thetext>Created attachment 94671
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409146</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-24 13:18:43 -0700</bug_when>
    <thetext>Attachment 94671 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Shared/mac/KeychainAttribute.cpp:45:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/mac/SecKeychainItemRequestData.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/Shared/mac/SecKeychainItemResponseData.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/Shared/mac/KeychainAttribute.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 16 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>409156</commentid>
    <comment_count>7</comment_count>
      <attachid>94671</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-24 13:25:11 -0700</bug_when>
    <thetext>Comment on attachment 94671
Patch v1

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

I’m concerned about the global data structures that should be per-web-process instead. Otherwise looks fine.

&gt; Source/WebKit2/Shared/mac/KeychainAttribute.cpp:45
&gt; +    data.adoptCF(CFDataCreate(NULL, (UInt8*)secKeychainAttribute.data, secKeychainAttribute.length));

Why is a cast needed here? Why a C-style cast? Why NULL instead of 0?

&gt; Source/WebKit2/Shared/mac/KeychainAttribute.cpp:73
&gt; +    attribute.tag = attributeTag;

Why do this at the bottom of the function instead of just after decoding it?

&gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:104
&gt; +    m_attributeList = (SecKeychainAttributeList*)calloc(1, sizeof(SecKeychainAttributeList));

How about a C++ style cast instead of C-style?

How about using new instead of malloc so you could use OwnPtr, making it harder to make lifetime mistakes? It’s easy to zero out the object afterward. Nothing magic about calloc in that respect.

&gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:106
&gt; +    m_attributeList-&gt;attr = (SecKeychainAttribute*)calloc(m_attributeList-&gt;count, sizeof(SecKeychainAttribute));

How about a C++ style cast instead of C-style?

How about using new instead of malloc so you could use OwnArrayPtr, making it harder to make lifetime mistakes?

&gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:114
&gt; +        m_attributeList-&gt;attr[i].data = (void*)CFDataGetBytePtr(m_attributes[i].data.get());

How about a C++ style cast instead of C-style?

&gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:161
&gt; +    secKeychainItemRequestData.m_itemClass = (SecItemClass)itemClass;

How about a C++ cast instead of a C cast?

&gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.h:42
&gt; +class SecKeychainItemRequestData {

This should be noncopyable. That would happen automatically if you used OwnPtr or OwnArrayPtr for any of the data members.

&gt; Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm:90
&gt; +    RetainPtr&lt;CFDataRef&gt; data(AdoptCF, CFDataCreate(0, (const UInt8*)outData, length));

How about a C++ cast instead of a C cast?

&gt; Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm:101
&gt; +    OSStatus resultCode = SecKeychainItemCreateFromContent(request.itemClass(), request.attributeList(), request.length(), request.data(), 
&gt; +                                                           NULL, NULL, &amp;keychainItem);

Not the way we usually line things up.

&gt; Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm:110
&gt; +    response = SecKeychainItemResponseData(resultCode);

No need for the explicit conversion here, unless you make this constructor explicit above.

&gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:41
&gt; +static HashSet&lt;SecKeychainAttributeList*&gt;&amp; shimManagedAttributeLists()

I think this needs to be a per-web-process data structure, not a single global one.

&gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:83
&gt; +        CFDataGetBytes(cfData, CFRangeMake(0, length), (UInt8*)attrList-&gt;attr[i].data);

How about a C++ style cast here?

&gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:92
&gt; +// Methods to allow the shim to manage memory for its own KeychainItem content data.
&gt; +static HashSet&lt;void*&gt;&amp; shimManagedKeychainItemContents()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(HashSet&lt;void*&gt;, set, ());
&gt; +    return set;
&gt; +}

I think this needs to be a per-web-process data structure, not a single global one.

&gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:197
&gt; +        ASSERT_NOT_REACHED();

Seems inappropriate to assert here. This could happen if the other process died, for example.

&gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:296
&gt; +    WebProcessKeychainItemShimInitializeFunc func = reinterpret_cast&lt;WebProcessKeychainItemShimInitializeFunc&gt;(dlsym(RTLD_DEFAULT, &quot;WebKitWebProcessKeychainItemShimInitialize&quot;));
&gt; +    func(callbacks);

I’d prefer that you not abbreviate to fund here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409198</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-24 14:17:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 94671 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94671&amp;action=review
&gt; 
&gt; I’m concerned about the global data structures that should be per-web-process instead. Otherwise looks fine.

Since it&apos;s possibly relevant in the future, I&apos;ll fix that up now.

&gt; &gt; Source/WebKit2/Shared/mac/KeychainAttribute.cpp:45
&gt; &gt; +    data.adoptCF(CFDataCreate(NULL, (UInt8*)secKeychainAttribute.data, secKeychainAttribute.length));
&gt; 
&gt; Why is a cast needed here? Why a C-style cast? Why NULL instead of 0?

Cast is needed because strict warnings make the compiler choke on &quot;void*&quot; -&gt; &quot;UInt8*&quot;.  I can make it c++-style, as with all the others.

NULL because I thought our style was to use NULL in C-API methods.  I guess I was wrong.
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/KeychainAttribute.cpp:73
&gt; &gt; +    attribute.tag = attributeTag;
&gt; 
&gt; Why do this at the bottom of the function instead of just after decoding it?

WIll change.

&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:104
&gt; &gt; +    m_attributeList = (SecKeychainAttributeList*)calloc(1, sizeof(SecKeychainAttributeList));
&gt; 
&gt; How about a C++ style cast instead of C-style?
&gt; 
&gt; How about using new instead of malloc so you could use OwnPtr, making it harder to make lifetime mistakes? It’s easy to zero out the object afterward. Nothing magic about calloc in that respect.

Reasonable.

&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.cpp:106
&gt; &gt; +    m_attributeList-&gt;attr = (SecKeychainAttribute*)calloc(m_attributeList-&gt;count, sizeof(SecKeychainAttribute));
&gt; 
&gt; How about a C++ style cast instead of C-style?
&gt; 
&gt; How about using new instead of malloc so you could use OwnArrayPtr, making it harder to make lifetime mistakes?
&gt; 

Reasonable

&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/SecKeychainItemRequestData.h:42
&gt; &gt; +class SecKeychainItemRequestData {
&gt; 
&gt; This should be noncopyable. That would happen automatically if you used OwnPtr or OwnArrayPtr for any of the data members.

Okay!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm:101
&gt; &gt; +    OSStatus resultCode = SecKeychainItemCreateFromContent(request.itemClass(), request.attributeList(), request.length(), request.data(), 
&gt; &gt; +                                                           NULL, NULL, &amp;keychainItem);
&gt; 
&gt; Not the way we usually line things up.

Didn&apos;t do that on purpose - will fix.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm:110
&gt; &gt; +    response = SecKeychainItemResponseData(resultCode);
&gt; 
&gt; No need for the explicit conversion here, unless you make this constructor explicit above.


&gt; 
&gt; &gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:197
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Seems inappropriate to assert here. This could happen if the other process died, for example.

If the UIProcess dies, we don&apos;t care about the sanctity of the WebProcess anymore.  The ASSERT helped me catch encode/decode mistakes, and I&apos;d like to leave it to catch future ones if this code changes much.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/mac/KeychainItemShimMethods.mm:296
&gt; &gt; +    WebProcessKeychainItemShimInitializeFunc func = reinterpret_cast&lt;WebProcessKeychainItemShimInitializeFunc&gt;(dlsym(RTLD_DEFAULT, &quot;WebKitWebProcessKeychainItemShimInitialize&quot;));
&gt; &gt; +    func(callbacks);
&gt; 
&gt; I’d prefer that you not abbreviate to fund here.

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409221</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-24 14:47:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 94671 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94671&amp;action=review
&gt; &gt; 
&gt; &gt; I’m concerned about the global data structures that should be per-web-process instead. Otherwise looks fine.
&gt; 
&gt; Since it&apos;s possibly relevant in the future, I&apos;ll fix that up now.
&gt;

Oh duh, this is already in the WebProcess.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409279</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-24 15:54:31 -0700</bug_when>
    <thetext>First patch landed in r87153 and r87154.

Second patch landed in r87221.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94536</attachid>
            <date>2011-05-23 18:28:34 -0700</date>
            <delta_ts>2011-05-23 19:10:30 -0700</delta_ts>
            <desc>Refactoring-prep v1 - Move the current SecItem shims into their own implementation file for non-SnowLeopard builds.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29352</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTE0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDUtMjMgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk0MzQzMTE+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEzMzQKKyAgICAgICAgU2hv
dWxkIHNoaW0gYSBmZXcgU2VjS2V5Y2hhaW5JdGVtKiBtZXRob2RzIG9uIFNub3dMZW9wYXJkCisK
KyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGRpZmZlcmVudCBXZWJQcm9jZXNzIHNoaW1zIGRl
cGVuZGluZyBvbiBwbGF0Zm9ybSwgbW92ZSB0aGUgY3VycmVudAorICAgICAgICBzaGltIHRvIGl0
cyBvd24gZmlsZXMuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplU2hpbSk6IEZvciBub24tU25vd0xlb3Bh
cmQgcGxhdGZvcm1zLCBjYWxsIGFjdGl2YXRlU2VjSXRlbVNoaW0oKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTaGltLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9tYWMvV2ViUHJvY2Vzc1NoaW0ubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9tYWMvV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLmg6IENvcGllZCBmcm9tIFdlYlByb2Nlc3MvbWFj
L1dlYlByb2Nlc3NTaGltLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1Nl
Y0l0ZW1TaGltLm1tOiBDb3BpZWQgZnJvbSBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5t
bS4KKyAgICAgICAgKFdlYktpdDo6YWN0aXZhdGVTZWNJdGVtU2hpbSk6IEhhdmUgYSBzaW5nbGUg
Ym9vbCB0aGF0IGFjdGl2YXRlcyB0aGUgc2hpbQorICAgICAgICAoV2ViS2l0Ojp3ZWJTZWNJdGVt
Q29weU1hdGNoaW5nTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OndlYlNlY0l0ZW1Db3B5
TWF0Y2hpbmcpOiBTaGltIFNlY0l0ZW1Db3B5TWF0Y2hpbmcgdG8gdGhpcy4gRGVwZW5kaW5nIG9u
IHRoZSBib29sLAorICAgICAgICAgIGl0IGVpdGhlciBjYWxscyB0byB0aGUgbmF0aXZlIG1ldGhv
ZCBvciBkb2VzIHRoZSByZXBsYWNlbWVudC4KKyAgICAgICAgKFdlYktpdDo6d2ViU2VjSXRlbUFk
ZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OndlYlNlY0l0ZW1BZGQpOiBTaGltIFNl
Y0l0ZW1BZGQgdG8gdGhpcy4gRGVwZW5kaW5nIG9uIHRoZSBib29sLCBpdCBlaXRoZXIgY2FsbHMg
CisgICAgICAgICAgdG8gdGhlIG5hdGl2ZSBtZXRob2Qgb3IgZG9lcyB0aGUgcmVwbGFjZW1lbnQu
CisgICAgICAgIChXZWJLaXQ6OndlYlNlY0l0ZW1VcGRhdGVPbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViS2l0Ojp3ZWJTZWNJdGVtVXBkYXRlKTogU2hpbSBTZWNJdGVtVXBkYXRlIHRvIHRoaXMu
IERlcGVuZGluZyBvbiB0aGUgYm9vbCwgaXQgZWl0aGVyIAorICAgICAgICAgIGNhbGxzIHRvIHRo
ZSBuYXRpdmUgbWV0aG9kIG9yIGRvZXMgdGhlIHJlcGxhY2VtZW50LgorICAgICAgICAoV2ViS2l0
Ojp3ZWJTZWNJdGVtRGVsZXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6d2ViU2Vj
SXRlbURlbGV0ZSk6IFNoaW0gU2VjSXRlbURlbGV0ZSB0byB0aGlzLiBEZXBlbmRpbmcgb24gdGhl
IGJvb2wsIGl0IGVpdGhlciAKKyAgICAgICAgICBjYWxscyB0byB0aGUgbmF0aXZlIG1ldGhvZCBv
ciBkb2VzIHRoZSByZXBsYWNlbWVudC4KKwogMjAxMS0wNS0yMyAgSmVyZW15IE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksOCArMjc5LDYgQEAKIAkJMzdD
NEU5RjYxMzFDNkU3RTAwMjlCRDVBIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjM5NkVBNTUxMkUwRUQyRDAwRjRGRUI3IC8qIGNvbmZp
Zy5oICovOyB9OwogCQkzN0Y2MjNCODEyQTU3QjYyMDBFM0ZERjYgLyogV0tGaW5kT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGNjIzQjcx
MkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTM3RjkwREUzMTM3NjU2MEUwMDUxQ0Y2OCAvKiBI
VFRQQ29va2llQWNjZXB0UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNjM4OTU0RjEzM0JFRjM4MDA4OTQxRDUgLyogSFRUUENvb2tpZUFjY2Vw
dFBvbGljeS5oICovOyB9OwotCQk1MTAwMzFENTEzNzlDMTEzMDBDOERGRTQgLyogV2ViUHJvY2Vz
c1NoaW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MDAzMUQzMTM3OUMxMTMwMEM4REZFNCAvKiBXZWJQcm9jZXNzU2hpbS5oICovOyB9OwotCQk1MTAw
MzFGNzEzNzlDQjE2MDBDOERGRTQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAwMzFENDEzNzlDMTEzMDBDOERGRTQg
LyogV2ViUHJvY2Vzc1NoaW0ubW0gKi87IH07CiAJCTUxMDIxRTlDMTJCMTY3ODgwMDVDMDMzQyAv
KiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDIxRTlCMTJCMTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0
TWVudUNsaWVudE1hYy5tbSAqLzsgfTsKIAkJNTEwRkJCOUExMjg4Qzk1RTAwQUZGREY0IC8qIFdl
YkNvbnRleHRNZW51SXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwRkJCOTgxMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNvbnRleHRNZW51
SXRlbURhdGEuY3BwICovOyB9OwogCQk1MTBGQkI5QjEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwRkJCOTkxMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNvbnRleHRNZW51SXRlbURh
dGEuaCAqLzsgfTsKQEAgLTI5MCw2ICsyODgsOCBAQAogCQk1MTFCMjRBNzEzMkUwOTU3MDAwNjVB
MEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUIyNEE1MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0
YWJhc2VQcm94eS5oICovOyB9OwogCQk1MTFCMjRBQTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNv
bkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUIyNEE4MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwICovOyB9
OwogCQk1MTFCMjRBQjEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBOTEzMkUwOTcy
MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmggKi87IH07CisJCTUxMUY4QTcyMTM4QjMzQ0Qw
MEE5NUY0NCAvKiBXZWJQcm9jZXNzU2VjSXRlbVNoaW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTcwMTM4QjMzQ0QwMEE5NUY0NCAvKiBXZWJQ
cm9jZXNzU2VjSXRlbVNoaW0uaCAqLzsgfTsKKwkJNTExRjhBNzMxMzhCMzNDRDAwQTk1RjQ0IC8q
IFdlYlByb2Nlc3NTZWNJdGVtU2hpbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMUY4QTcxMTM4QjMzQ0QwMEE5NUY0NCAvKiBXZWJQcm9jZXNzU2Vj
SXRlbVNoaW0ubW0gKi87IH07CiAJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25E
YXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMjNDRjE5MTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCAqLzsg
fTsKIAkJNTEyM0NGMUMxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjNDRjFBMTMzRDI2
MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk1MTI5MzVENzEyODhEMTk0MDBBNEI2OTUgLyogV2Vi
Q29udGV4dE1lbnVJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0u
Y3BwICovOyB9OwpAQCAtMTE5NSw4ICsxMTk1LDYgQEAKIAkJMzNEM0EzQzcxMzM5NjE3OTAwNzA5
QkU0IC8qIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5TWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNGOUQ1QjgxMzEyRjFFRTAwMEQ2ODNGIC8q
IFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNv
ZGluZyA9IDQ7IG5hbWUgPSBXZWJSZXNvdXJjZUNhY2hlTWFuYWdlckNGTmV0LmNwcDsgcGF0aCA9
IFJlc291cmNlQ2FjaGUvY2YvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJDRk5ldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjYyM0I3MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0Zp
bmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRmluZE9wdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMDMxRDMxMzc5QzExMzAwQzhE
RkU0IC8qIFdlYlByb2Nlc3NTaGltLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlByb2Nlc3NTaGltLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDAzMUQ0
MTM3OUMxMTMwMEM4REZFNCAvKiBXZWJQcm9jZXNzU2hpbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTAwMzFGNjEzNzlDQUNCMDBDOERGRTQgLyogV2ViUHJvY2Vzc1NoaW0u
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJQcm9j
ZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTEw
MjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnRN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEZCQjk4MTI4OEM5NUUwMEFG
RkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTIwNyw2ICsxMjA1LDggQEAKIAkJNTExQjI0QTUxMzJFMDk1NzAw
MDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkljb25EYXRhYmFzZVByb3h5Lmg7IHBhdGggPSBJY29uRGF0YWJhc2UvV2Vi
SWNvbkRhdGFiYXNlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExQjI0
QTgxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJY29uRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTFCMjRBOTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFi
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFGOEE3MDEzOEIzM0NEMDBBOTVGNDQg
LyogV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlByb2Nlc3NTZWNJdGVtU2hpbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MTFGOEE3MTEzOEIzM0NEMDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc1NlY0l0ZW1T
aGltLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxOTEzM0QyNjBBMDA1
NkY4MDAgLyogV0tJY29uRGF0YWJhc2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXS0ljb25EYXRhYmFzZUNHLmNwcDsgcGF0aCA9IGNnL1dLSWNvbkRhdGFiYXNl
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxQTEzM0QyNjBBMDA1
NkY4MDAgLyogV0tJY29uRGF0YWJhc2VDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS0ljb25EYXRhYmFzZUNHLmg7IHBhdGggPSBjZy9XS0ljb25EYXRhYmFzZUNHLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAvKiBX
ZWJDb250ZXh0TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQ29udGV4dE1lbnVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMTAsOCArMjAxMCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQTZGQTAxRDExRTE1MjYz
MDBEQjEzNzEgLyogV2ViUHJvY2Vzc01haW5NYWMubW0gKi8sCiAJCQkJQkMzMDY1QzMxMjU5MkY4
OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi8sCi0JCQkJNTEwMDMxRDMxMzc5QzExMzAw
QzhERkU0IC8qIFdlYlByb2Nlc3NTaGltLmggKi8sCi0JCQkJNTEwMDMxRDQxMzc5QzExMzAwQzhE
RkU0IC8qIFdlYlByb2Nlc3NTaGltLm1tICovLAorCQkJCTUxMUY4QTcwMTM4QjMzQ0QwMEE5NUY0
NCAvKiBXZWJQcm9jZXNzU2VjSXRlbVNoaW0uaCAqLywKKwkJCQk1MTFGOEE3MTEzOEIzM0NEMDBB
OTVGNDQgLyogV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLm1tICovLAogCQkJCUUxQkIxNjg4MTMyMDE4
QkEwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8sCiAJCQkJRTFCQjE2
ODkxMzIwMThCQTAwRjQ5NDMxIC8qIEZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gKi8sCiAJ
CQkpOwpAQCAtMzc3OCwxMSArMzc3OCwxMSBAQAogCQkJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4
MSAvKiBXS0luc3BlY3Rvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGOTBERTMxMzc2NTYw
RTAwNTFDRjY4IC8qIEhUVFBDb29raWVBY2NlcHRQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBN0M2Q0RCMTM3ODk1MDgwMEI5QzA0RCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNTEwMDMxRDUxMzc5QzExMzAwQzhERkU0IC8qIFdlYlByb2Nlc3NTaGlt
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTE3OTc4MDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2lu
Q3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQxMzA1NDEzODJFQUMw
MDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQx
MzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFCMTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTFGOEE3MjEzOEIzM0NEMDBBOTVGNDQgLyogV2ViUHJv
Y2Vzc1NlY0l0ZW1TaGltLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQwNTUsNyArNDA1NSw2IEBACiAJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk1MTAwMzFGNzEzNzlDQjE2MDBDOERGRTQgLyogV2Vi
UHJvY2Vzc1NoaW0ubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ0NDUsNiArNDQ0NCw3IEBACiAJCQkJ
NTFEMTMwNTUxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFEMTMwNTgxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94
eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQjE1QTg0MTM4NDNBMzkwMDMyMUFEOCAvKiBF
bnZpcm9ubWVudFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFGOEE3MzEzOEIz
M0NEMDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0J
KHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJv
Y2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEwIEBACiAKICNpbXBvcnQg
IkZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCIKICNpbXBvcnQgIlNhbmRib3hFeHRlbnNpb24u
aCIKLSNpbXBvcnQgIlNlY0l0ZW1SZXF1ZXN0RGF0YS5oIgotI2ltcG9ydCAiU2VjSXRlbVJlc3Bv
bnNlRGF0YS5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKLSNp
bXBvcnQgIldlYlByb2Nlc3NTaGltLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzU2VjSXRlbVNoaW0u
aCIKICNpbXBvcnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2Nh
bGl6ZWRTdHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01lbW9yeUNhY2hlLmg+CkBAIC0yNDMs
MTM2ICsyNDEsMTEgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgog
ICAgIG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihtZXRob2RUb1BhdGNoLCAoSU1QKU5TQXBwbGlj
YXRpb25BY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudCk7CiB9CiAKLS8vIEZJWE1FIChodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA5NzUpIC0gT25jZSBDb3JlSVBD
IHN1cHBvcnRzIHN5bmMgbWVzc2FnaW5nIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLAotLy8gd2Ug
Y2FuIHJlbW92ZSBTZWNJdGVtQVBJQ29udGV4dCBhbmQgdGhlc2UgNCBtYWluLXRocmVhZCBtZXRo
b2RzLCBhbmQgd2UgY2FuIGhhdmUgdGhlIHNoaW0gbWV0aG9kcyBjYWxsIG91dCBkaXJlY3RseSAK
LS8vIGZyb20gd2hhdGV2ZXIgdGhyZWFkIHRoZXkncmUgb24uCi0KLXN0cnVjdCBTZWNJdGVtQVBJ
Q29udGV4dAotewotICAgIENGRGljdGlvbmFyeVJlZiBxdWVyeTsKLSAgICBDRkRpY3Rpb25hcnlS
ZWYgYXR0cmlidXRlc1RvVXBkYXRlOwotICAgIENGVHlwZVJlZiByZXN1bHRPYmplY3Q7Ci0gICAg
T1NTdGF0dXMgcmVzdWx0Q29kZTsKLX07Ci0KLXN0YXRpYyB2b2lkIFdlYlNlY0l0ZW1Db3B5TWF0
Y2hpbmdNYWluVGhyZWFkKHZvaWQqIHZvaWRDb250ZXh0KQotewotICAgIFNlY0l0ZW1BUElDb250
ZXh0KiBjb250ZXh0ID0gKFNlY0l0ZW1BUElDb250ZXh0Kil2b2lkQ29udGV4dDsKLSAgICAKLSAg
ICBTZWNJdGVtUmVxdWVzdERhdGEgcmVxdWVzdERhdGEoY29udGV4dC0+cXVlcnkpOwotICAgIFNl
Y0l0ZW1SZXNwb25zZURhdGEgcmVzcG9uc2U7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNlY0l0
ZW1Db3B5TWF0Y2hpbmcocmVxdWVzdERhdGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpT
ZWNJdGVtQ29weU1hdGNoaW5nOjpSZXBseShyZXNwb25zZSksIDApKSB7Ci0gICAgICAgIGNvbnRl
eHQtPnJlc3VsdENvZGUgPSBlcnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNv
bnRleHQtPnJlc3VsdE9iamVjdCA9IHJlc3BvbnNlLnJlc3VsdE9iamVjdCgpLmxlYWtSZWYoKTsK
LSAgICBjb250ZXh0LT5yZXN1bHRDb2RlID0gcmVzcG9uc2UucmVzdWx0Q29kZSgpOwotfQotCi1z
dGF0aWMgT1NTdGF0dXMgV2ViU2VjSXRlbUNvcHlNYXRjaGluZyhDRkRpY3Rpb25hcnlSZWYgcXVl
cnksIENGVHlwZVJlZiogcmVzdWx0KQotewotICAgIFNlY0l0ZW1BUElDb250ZXh0IGNvbnRleHQ7
Ci0gICAgY29udGV4dC5xdWVyeSA9IHF1ZXJ5OwotICAgIAotICAgIGNhbGxPbk1haW5UaHJlYWRB
bmRXYWl0KFdlYlNlY0l0ZW1Db3B5TWF0Y2hpbmdNYWluVGhyZWFkLCAmY29udGV4dCk7Ci0gICAg
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IGNvbnRleHQucmVzdWx0T2JqZWN0
OwotICAgIHJldHVybiBjb250ZXh0LnJlc3VsdENvZGU7Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYlNl
Y0l0ZW1BZGRPbk1haW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCi17Ci0gICAgU2VjSXRlbUFQ
SUNvbnRleHQqIGNvbnRleHQgPSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0OwotICAg
IAotICAgIFNlY0l0ZW1SZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSk7Ci0g
ICAgU2VjSXRlbVJlc3BvbnNlRGF0YSByZXNwb25zZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
U2VjSXRlbUFkZChyZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNlY0l0
ZW1BZGQ6OlJlcGx5KHJlc3BvbnNlKSwgMCkpIHsKLSAgICAgICAgY29udGV4dC0+cmVzdWx0Q29k
ZSA9IGVyclNlY0ludGVyYWN0aW9uTm90QWxsb3dlZDsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgY29udGV4dC0+cmVzdWx0
T2JqZWN0ID0gcmVzcG9uc2UucmVzdWx0T2JqZWN0KCkubGVha1JlZigpOwotICAgIGNvbnRleHQt
PnJlc3VsdENvZGUgPSByZXNwb25zZS5yZXN1bHRDb2RlKCk7Ci19Ci0KLXN0YXRpYyBPU1N0YXR1
cyBXZWJTZWNJdGVtQWRkKENGRGljdGlvbmFyeVJlZiBxdWVyeSwgQ0ZUeXBlUmVmKiByZXN1bHQp
Ci17ICAgIAotICAgIFNlY0l0ZW1BUElDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5xdWVy
eSA9IHF1ZXJ5OwotICAgIAotICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFdlYlNlY0l0ZW1B
ZGRPbk1haW5UaHJlYWQsICZjb250ZXh0KTsKLSAgICAKLSAgICBpZiAocmVzdWx0KQotICAgICAg
ICAqcmVzdWx0ID0gY29udGV4dC5yZXN1bHRPYmplY3Q7Ci0gICAgcmV0dXJuIGNvbnRleHQucmVz
dWx0Q29kZTsKLX0KLQotc3RhdGljIHZvaWQgV2ViU2VjSXRlbVVwZGF0ZU9uTWFpblRocmVhZCh2
b2lkKiB2b2lkQ29udGV4dCkKLXsKLSAgICBTZWNJdGVtQVBJQ29udGV4dCogY29udGV4dCA9IChT
ZWNJdGVtQVBJQ29udGV4dCopdm9pZENvbnRleHQ7Ci0gICAgCi0gICAgU2VjSXRlbVJlcXVlc3RE
YXRhIHJlcXVlc3REYXRhKGNvbnRleHQtPnF1ZXJ5LCBjb250ZXh0LT5hdHRyaWJ1dGVzVG9VcGRh
dGUpOwotICAgIFNlY0l0ZW1SZXNwb25zZURhdGEgcmVzcG9uc2U7Ci0gICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OlNlY0l0ZW1VcGRhdGUocmVxdWVzdERhdGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpTZWNJdGVtVXBkYXRlOjpSZXBseShyZXNwb25zZSksIDApKSB7Ci0gICAgICAgIGNvbnRl
eHQtPnJlc3VsdENvZGUgPSBlcnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNv
bnRleHQtPnJlc3VsdENvZGUgPSByZXNwb25zZS5yZXN1bHRDb2RlKCk7Ci19Ci0KLXN0YXRpYyBP
U1N0YXR1cyBXZWJTZWNJdGVtVXBkYXRlKENGRGljdGlvbmFyeVJlZiBxdWVyeSwgQ0ZEaWN0aW9u
YXJ5UmVmIGF0dHJpYnV0ZXNUb1VwZGF0ZSkKLXsgICAgCi0gICAgU2VjSXRlbUFQSUNvbnRleHQg
Y29udGV4dDsKLSAgICBjb250ZXh0LnF1ZXJ5ID0gcXVlcnk7Ci0gICAgY29udGV4dC5hdHRyaWJ1
dGVzVG9VcGRhdGUgPSBhdHRyaWJ1dGVzVG9VcGRhdGU7Ci0gICAgCi0gICAgY2FsbE9uTWFpblRo
cmVhZEFuZFdhaXQoV2ViU2VjSXRlbVVwZGF0ZU9uTWFpblRocmVhZCwgJmNvbnRleHQpOwotICAg
IAotICAgIHJldHVybiBjb250ZXh0LnJlc3VsdENvZGU7Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYlNl
Y0l0ZW1EZWxldGVPbk1haW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCi17Ci0gICAgU2VjSXRl
bUFQSUNvbnRleHQqIGNvbnRleHQgPSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0Owot
ICAgIAotICAgIFNlY0l0ZW1SZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSk7
Ci0gICAgU2VjSXRlbVJlc3BvbnNlRGF0YSByZXNwb25zZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6U2VjSXRlbURlbGV0ZShyZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OlNlY0l0ZW1EZWxldGU6OlJlcGx5KHJlc3BvbnNlKSwgMCkpIHsKLSAgICAgICAgY29udGV4dC0+
cmVzdWx0Q29kZSA9IGVyclNlY0ludGVyYWN0aW9uTm90QWxsb3dlZDsKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgY29udGV4
dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsKLX0KLQotc3RhdGljIE9TU3Rh
dHVzIFdlYlNlY0l0ZW1EZWxldGUoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5KQoteyAgICAKLSAgICBT
ZWNJdGVtQVBJQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQucXVlcnkgPSBxdWVyeTsKLSAg
ICAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChXZWJTZWNJdGVtRGVsZXRlT25NYWluVGhy
ZWFkLCAmY29udGV4dCk7Ci0KLSAgICByZXR1cm4gY29udGV4dC5yZXN1bHRDb2RlOwotfQotCiB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVTaGltKCkKIHsKLSAgICBjb25zdCBXZWJQcm9jZXNz
U2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7Ci0gICAgICAgIFdlYlNlY0l0ZW1Db3B5TWF0Y2hp
bmcsCi0gICAgICAgIFdlYlNlY0l0ZW1BZGQsCi0gICAgICAgIFdlYlNlY0l0ZW1VcGRhdGUsCi0g
ICAgICAgIFdlYlNlY0l0ZW1EZWxldGUKLSAgICB9OwotICAgIAotICAgIFdlYlByb2Nlc3NTaGlt
SW5pdGlhbGl6ZUZ1bmMgaW5pdEZ1bmMgPSByZWludGVycHJldF9jYXN0PFdlYlByb2Nlc3NTaGlt
SW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERfREVGQVVMVCwgIldlYktpdFdlYlByb2Nlc3NTaGlt
SW5pdGlhbGl6ZSIpKTsKLSAgICBpbml0RnVuYyhjYWxsYmFja3MpOworI2lmbmRlZiBCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQKKyAgICBhY3RpdmF0ZVNlY0l0ZW1TaGltKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCkluZGV4OiBXZWJQcm9jZXNz
L21hYy9XZWJQcm9jZXNzU2VjSXRlbVNoaW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL21h
Yy9XZWJQcm9jZXNzU2VjSXRlbVNoaW0uaAkocmV2aXNpb24gODcwNzUpCShmcm9tIFdlYlByb2Nl
c3MvbWFjL1dlYlByb2Nlc3NTaGltLmg6ODcwNzUpCisrKyBXZWJQcm9jZXNzL21hYy9XZWJQcm9j
ZXNzU2VjSXRlbVNoaW0uaAkod29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlY0l0ZW1TaGltLmgJKHJldmlzaW9u
IDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NlY0l0
ZW1TaGltLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsyMywxMyBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUHJvY2Vzc1NoaW1faAot
I2RlZmluZSBXZWJQcm9jZXNzU2hpbV9oCisjaWZuZGVmIFdlYlByb2Nlc3NTZWNJdGVtU2hpbV9o
CisjZGVmaW5lIFdlYlByb2Nlc3NTZWNJdGVtU2hpbV9oCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1zdHJ1Y3QgV2ViUHJvY2Vzc1NoaW1DYWxsYmFja3MgewotICAgIE9TU3RhdHVzICgqc2VjSXRl
bUNvcHlNYXRjaGluZykoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRlR5cGVSZWYgKnJlc3VsdCk7
Ci0gICAgT1NTdGF0dXMgKCpzZWNJdGVtQWRkKShDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywg
Q0ZUeXBlUmVmICpyZXN1bHQpOwotICAgIE9TU3RhdHVzICgqc2VjSXRlbVVwZGF0ZSkoQ0ZEaWN0
aW9uYXJ5UmVmIHF1ZXJ5LCBDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlc1RvVXBkYXRlKTsKLSAg
ICBPU1N0YXR1cyAoKnNlY0l0ZW1EZWxldGUpKENGRGljdGlvbmFyeVJlZiBxdWVyeSk7Ci19Owot
Ci10eXBlZGVmIHZvaWQgKCpXZWJQcm9jZXNzU2hpbUluaXRpYWxpemVGdW5jKShjb25zdCBXZWJQ
cm9jZXNzU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKTsKK3ZvaWQgYWN0aXZhdGVTZWNJdGVtU2hp
bSgpOwogCiB9CiAKLSNlbmRpZiAvLyBXZWJQcm9jZXNzU2hpbV9oCisjZW5kaWYgLy8gV2ViUHJv
Y2Vzc1NlY0l0ZW1TaGltX2gKSW5kZXg6IFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTZWNJdGVt
U2hpbS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2VjSXRlbVNo
aW0ubW0JKHJldmlzaW9uIDg3MDc1KQkoZnJvbSBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hp
bS5tbTo4NzA3NSkKKysrIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTZWNJdGVtU2hpbS5tbQko
d29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJv
Y2Vzc1NlY0l0ZW1TaGltLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvbWFjL1dlYlByb2Nlc3NTZWNJdGVtU2hpbS5tbQkocmV2aXNpb24gODcwNzUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2VjSXRlbVNoaW0ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIyLDEwICsyMiwxNSBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIldlYlByb2Nlc3NTZWNJdGVtU2hpbS5oIgogCi0jaW1wb3J0ICJXZWJQcm9jZXNzU2hpbS5o
IgotCisjaW1wb3J0ICJTZWNJdGVtUmVxdWVzdERhdGEuaCIKKyNpbXBvcnQgIlNlY0l0ZW1SZXNw
b25zZURhdGEuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0IDxTZWN1cml0eS9TZWNJdGVtLmg+CisjaW1wb3J0IDx3
dGYvVGhyZWFkaW5nLmg+CiAKICNkZWZpbmUgRFlMRF9JTlRFUlBPU0UoX3JlcGxhY2VtZW50LF9y
ZXBsYWNlZSkgXAogICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKSBzdGF0aWMgc3RydWN0eyBjb25z
dCB2b2lkKiByZXBsYWNlbWVudDsgY29uc3Qgdm9pZCogcmVwbGFjZWU7IH0gX2ludGVycG9zZV8j
I19yZXBsYWNlZSBcCkBAIC0zMywzOSArMzgsMTQ3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1leHRlcm4gIkMiIHZvaWQgV2ViS2l0V2ViUHJvY2Vzc1NoaW1Jbml0aWFsaXplKGNvbnN0IFdl
YlByb2Nlc3NTaGltQ2FsbGJhY2tzJik7CitzdGF0aWMgYm9vbCBVc2VTZWNJdGVtU2hpbSA9IGZh
bHNlOworCisvLyBGSVhNRSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwOTc1KSAtIE9uY2UgQ29yZUlQQyBzdXBwb3J0cyBzeW5jIG1lc3NhZ2luZyBmcm9tIGEgc2Vj
b25kYXJ5IHRocmVhZCwKKy8vIHdlIGNhbiByZW1vdmUgU2VjSXRlbUFQSUNvbnRleHQgYW5kIHRo
ZXNlIDQgbWFpbi10aHJlYWQgbWV0aG9kcywgYW5kIHdlIGNhbiBoYXZlIHRoZSBzaGltIG1ldGhv
ZHMgY2FsbCBvdXQgZGlyZWN0bHkgCisvLyBmcm9tIHdoYXRldmVyIHRocmVhZCB0aGV5J3JlIG9u
LgorCitzdHJ1Y3QgU2VjSXRlbUFQSUNvbnRleHQKK3sKKyAgICBDRkRpY3Rpb25hcnlSZWYgcXVl
cnk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXNUb1VwZGF0ZTsKKyAgICBDRlR5cGVS
ZWYgcmVzdWx0T2JqZWN0OworICAgIE9TU3RhdHVzIHJlc3VsdENvZGU7Cit9OworCitzdGF0aWMg
dm9pZCB3ZWJTZWNJdGVtQ29weU1hdGNoaW5nTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkK
K3sKKyAgICBTZWNJdGVtQVBJQ29udGV4dCogY29udGV4dCA9IChTZWNJdGVtQVBJQ29udGV4dCop
dm9pZENvbnRleHQ7CisgICAgCisgICAgU2VjSXRlbVJlcXVlc3REYXRhIHJlcXVlc3REYXRhKGNv
bnRleHQtPnF1ZXJ5KTsKKyAgICBTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOworICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpTZWNJdGVtQ29weU1hdGNoaW5nKHJlcXVlc3REYXRhKSwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6U2VjSXRlbUNvcHlNYXRjaGluZzo6UmVwbHkocmVzcG9uc2Up
LCAwKSkgeworICAgICAgICBjb250ZXh0LT5yZXN1bHRDb2RlID0gZXJyU2VjSW50ZXJhY3Rpb25O
b3RBbGxvd2VkOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBjb250ZXh0LT5yZXN1bHRPYmplY3QgPSByZXNwb25zZS5yZXN1
bHRPYmplY3QoKS5sZWFrUmVmKCk7CisgICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNl
LnJlc3VsdENvZGUoKTsKK30KKworc3RhdGljIE9TU3RhdHVzIHdlYlNlY0l0ZW1Db3B5TWF0Y2hp
bmcoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRlR5cGVSZWYqIHJlc3VsdCkKK3sKKyAgICBpZiAo
IVVzZVNlY0l0ZW1TaGltKQorICAgICAgICByZXR1cm4gU2VjSXRlbUNvcHlNYXRjaGluZyhxdWVy
eSwgcmVzdWx0KTsKKworICAgIFNlY0l0ZW1BUElDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4
dC5xdWVyeSA9IHF1ZXJ5OworICAgIAorICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHdlYlNl
Y0l0ZW1Db3B5TWF0Y2hpbmdNYWluVGhyZWFkLCAmY29udGV4dCk7CisgICAgCisgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IGNvbnRleHQucmVzdWx0T2JqZWN0OworICAgIHJldHVy
biBjb250ZXh0LnJlc3VsdENvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlNlY0l0ZW1BZGRPbk1h
aW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCit7CisgICAgU2VjSXRlbUFQSUNvbnRleHQqIGNv
bnRleHQgPSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0OworICAgIAorICAgIFNlY0l0
ZW1SZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSk7CisgICAgU2VjSXRlbVJl
c3BvbnNlRGF0YSByZXNwb25zZTsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U2VjSXRlbUFkZChy
ZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNlY0l0ZW1BZGQ6OlJlcGx5
KHJlc3BvbnNlKSwgMCkpIHsKKyAgICAgICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IGVyclNlY0lu
dGVyYWN0aW9uTm90QWxsb3dlZDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29udGV4dC0+cmVzdWx0T2JqZWN0ID0gcmVz
cG9uc2UucmVzdWx0T2JqZWN0KCkubGVha1JlZigpOworICAgIGNvbnRleHQtPnJlc3VsdENvZGUg
PSByZXNwb25zZS5yZXN1bHRDb2RlKCk7Cit9CisKK3N0YXRpYyBPU1N0YXR1cyB3ZWJTZWNJdGVt
QWRkKENGRGljdGlvbmFyeVJlZiBxdWVyeSwgQ0ZUeXBlUmVmKiByZXN1bHQpCit7CisgICAgaWYg
KCFVc2VTZWNJdGVtU2hpbSkKKyAgICAgICAgcmV0dXJuIFNlY0l0ZW1BZGQocXVlcnksIHJlc3Vs
dCk7CiAKLXN0YXRpYyBXZWJQcm9jZXNzU2hpbUNhbGxiYWNrcyB3ZWJQcm9jZXNzU2hpbUNhbGxi
YWNrczsKKyAgICBTZWNJdGVtQVBJQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQucXVlcnkg
PSBxdWVyeTsKKyAgICAKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdCh3ZWJTZWNJdGVtQWRk
T25NYWluVGhyZWFkLCAmY29udGV4dCk7CisgICAgCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
KnJlc3VsdCA9IGNvbnRleHQucmVzdWx0T2JqZWN0OworICAgIHJldHVybiBjb250ZXh0LnJlc3Vs
dENvZGU7Cit9CiAKLXN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRlbUNvcHlNYXRjaGluZyhDRkRp
Y3Rpb25hcnlSZWYgcXVlcnksIENGVHlwZVJlZiogcmVzdWx0KQorc3RhdGljIHZvaWQgd2ViU2Vj
SXRlbVVwZGF0ZU9uTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkKIHsKLSAgICByZXR1cm4g
d2ViUHJvY2Vzc1NoaW1DYWxsYmFja3Muc2VjSXRlbUNvcHlNYXRjaGluZyhxdWVyeSwgcmVzdWx0
KTsKKyAgICBTZWNJdGVtQVBJQ29udGV4dCogY29udGV4dCA9IChTZWNJdGVtQVBJQ29udGV4dCop
dm9pZENvbnRleHQ7CisgICAgCisgICAgU2VjSXRlbVJlcXVlc3REYXRhIHJlcXVlc3REYXRhKGNv
bnRleHQtPnF1ZXJ5LCBjb250ZXh0LT5hdHRyaWJ1dGVzVG9VcGRhdGUpOworICAgIFNlY0l0ZW1S
ZXNwb25zZURhdGEgcmVzcG9uc2U7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNlY0l0ZW1VcGRh
dGUocmVxdWVzdERhdGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTZWNJdGVtVXBkYXRl
OjpSZXBseShyZXNwb25zZSksIDApKSB7CisgICAgICAgIGNvbnRleHQtPnJlc3VsdENvZGUgPSBl
cnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvbnRleHQtPnJlc3VsdENvZGUg
PSByZXNwb25zZS5yZXN1bHRDb2RlKCk7CiB9CiAKLXN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRl
bUFkZChDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGVHlwZVJlZiogcmVzdWx0KQorc3RhdGljIE9T
U3RhdHVzIHdlYlNlY0l0ZW1VcGRhdGUoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRkRpY3Rpb25h
cnlSZWYgYXR0cmlidXRlc1RvVXBkYXRlKQogewotICAgIHJldHVybiB3ZWJQcm9jZXNzU2hpbUNh
bGxiYWNrcy5zZWNJdGVtQWRkKHF1ZXJ5LCByZXN1bHQpOworICAgIGlmICghVXNlU2VjSXRlbVNo
aW0pCisgICAgICAgIHJldHVybiBTZWNJdGVtVXBkYXRlKHF1ZXJ5LCBhdHRyaWJ1dGVzVG9VcGRh
dGUpOworCisgICAgU2VjSXRlbUFQSUNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LnF1ZXJ5
ID0gcXVlcnk7CisgICAgY29udGV4dC5hdHRyaWJ1dGVzVG9VcGRhdGUgPSBhdHRyaWJ1dGVzVG9V
cGRhdGU7CisgICAgCisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQod2ViU2VjSXRlbVVwZGF0
ZU9uTWFpblRocmVhZCwgJmNvbnRleHQpOworICAgIAorICAgIHJldHVybiBjb250ZXh0LnJlc3Vs
dENvZGU7CiB9CiAKLXN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRlbVVwZGF0ZShDRkRpY3Rpb25h
cnlSZWYgcXVlcnksIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzVG9VcGRhdGUpCitzdGF0aWMg
dm9pZCB3ZWJTZWNJdGVtRGVsZXRlT25NYWluVGhyZWFkKHZvaWQqIHZvaWRDb250ZXh0KQogewot
ICAgIHJldHVybiB3ZWJQcm9jZXNzU2hpbUNhbGxiYWNrcy5zZWNJdGVtVXBkYXRlKHF1ZXJ5LCBh
dHRyaWJ1dGVzVG9VcGRhdGUpOworICAgIFNlY0l0ZW1BUElDb250ZXh0KiBjb250ZXh0ID0gKFNl
Y0l0ZW1BUElDb250ZXh0Kil2b2lkQ29udGV4dDsKKyAgICAKKyAgICBTZWNJdGVtUmVxdWVzdERh
dGEgcmVxdWVzdERhdGEoY29udGV4dC0+cXVlcnkpOworICAgIFNlY0l0ZW1SZXNwb25zZURhdGEg
cmVzcG9uc2U7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNlY0l0ZW1EZWxldGUocmVxdWVzdERh
dGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTZWNJdGVtRGVsZXRlOjpSZXBseShyZXNw
b25zZSksIDApKSB7CisgICAgICAgIGNvbnRleHQtPnJlc3VsdENvZGUgPSBlcnJTZWNJbnRlcmFj
dGlvbk5vdEFsbG93ZWQ7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGNvbnRleHQtPnJlc3VsdENvZGUgPSByZXNwb25zZS5y
ZXN1bHRDb2RlKCk7CiB9CiAKLXN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRlbURlbGV0ZShDRkRp
Y3Rpb25hcnlSZWYgcXVlcnkpCitzdGF0aWMgT1NTdGF0dXMgd2ViU2VjSXRlbURlbGV0ZShDRkRp
Y3Rpb25hcnlSZWYgcXVlcnkpCiB7Ci0gICAgcmV0dXJuIHdlYlByb2Nlc3NTaGltQ2FsbGJhY2tz
LnNlY0l0ZW1EZWxldGUocXVlcnkpOworICAgIGlmICghVXNlU2VjSXRlbVNoaW0pCisgICAgICAg
IHJldHVybiBTZWNJdGVtRGVsZXRlKHF1ZXJ5KTsKKworICAgIFNlY0l0ZW1BUElDb250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC5xdWVyeSA9IHF1ZXJ5OworICAgIAorICAgIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHdlYlNlY0l0ZW1EZWxldGVPbk1haW5UaHJlYWQsICZjb250ZXh0KTsKKwor
ICAgIHJldHVybiBjb250ZXh0LnJlc3VsdENvZGU7CiB9CiAKLURZTERfSU5URVJQT1NFKHNoaW1T
ZWNJdGVtQ29weU1hdGNoaW5nLCBTZWNJdGVtQ29weU1hdGNoaW5nKQotRFlMRF9JTlRFUlBPU0Uo
c2hpbVNlY0l0ZW1BZGQsIFNlY0l0ZW1BZGQpCi1EWUxEX0lOVEVSUE9TRShzaGltU2VjSXRlbVVw
ZGF0ZSwgU2VjSXRlbVVwZGF0ZSkKLURZTERfSU5URVJQT1NFKHNoaW1TZWNJdGVtRGVsZXRlLCBT
ZWNJdGVtRGVsZXRlKQorRFlMRF9JTlRFUlBPU0Uod2ViU2VjSXRlbUNvcHlNYXRjaGluZywgU2Vj
SXRlbUNvcHlNYXRjaGluZykKK0RZTERfSU5URVJQT1NFKHdlYlNlY0l0ZW1BZGQsIFNlY0l0ZW1B
ZGQpCitEWUxEX0lOVEVSUE9TRSh3ZWJTZWNJdGVtVXBkYXRlLCBTZWNJdGVtVXBkYXRlKQorRFlM
RF9JTlRFUlBPU0Uod2ViU2VjSXRlbURlbGV0ZSwgU2VjSXRlbURlbGV0ZSkKIAotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLXZvaWQgV2ViS2l0V2ViUHJvY2Vzc1NoaW1J
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NTaGltQ2FsbGJhY2tzJiBjYWxsYmFja3MpCit2b2lk
IGFjdGl2YXRlU2VjSXRlbVNoaW0oKQogewotICAgIHdlYlByb2Nlc3NTaGltQ2FsbGJhY2tzID0g
Y2FsbGJhY2tzOworICAgIFVzZVNlY0l0ZW1TaGltID0gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNz
U2hpbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlBy
b2Nlc3NTaGltLmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9tYWMvV2ViUHJvY2Vzc1NoaW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBXZWJQcm9jZXNzU2hpbV9oCi0jZGVmaW5lIFdlYlByb2Nlc3NT
aGltX2gKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBXZWJQcm9jZXNzU2hpbUNhbGxi
YWNrcyB7Ci0gICAgT1NTdGF0dXMgKCpzZWNJdGVtQ29weU1hdGNoaW5nKShDRkRpY3Rpb25hcnlS
ZWYgcXVlcnksIENGVHlwZVJlZiAqcmVzdWx0KTsKLSAgICBPU1N0YXR1cyAoKnNlY0l0ZW1BZGQp
KENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBDRlR5cGVSZWYgKnJlc3VsdCk7Ci0gICAgT1NT
dGF0dXMgKCpzZWNJdGVtVXBkYXRlKShDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGRGljdGlvbmFy
eVJlZiBhdHRyaWJ1dGVzVG9VcGRhdGUpOwotICAgIE9TU3RhdHVzICgqc2VjSXRlbURlbGV0ZSko
Q0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5KTsKLX07Ci0KLXR5cGVkZWYgdm9pZCAoKldlYlByb2Nlc3NT
aGltSW5pdGlhbGl6ZUZ1bmMpKGNvbnN0IFdlYlByb2Nlc3NTaGltQ2FsbGJhY2tzJiBjYWxsYmFj
a3MpOwotCi19Ci0KLSNlbmRpZiAvLyBXZWJQcm9jZXNzU2hpbV9oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5tbQkocmV2aXNpb24gODcw
NzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiV2Vi
UHJvY2Vzc1NoaW0uaCIKLQotI2ltcG9ydCA8U2VjdXJpdHkvU2VjSXRlbS5oPgotCi0jZGVmaW5l
IERZTERfSU5URVJQT1NFKF9yZXBsYWNlbWVudCxfcmVwbGFjZWUpIFwKLSAgICBfX2F0dHJpYnV0
ZV9fKCh1c2VkKSkgc3RhdGljIHN0cnVjdHsgY29uc3Qgdm9pZCogcmVwbGFjZW1lbnQ7IGNvbnN0
IHZvaWQqIHJlcGxhY2VlOyB9IF9pbnRlcnBvc2VfIyNfcmVwbGFjZWUgXAotICAgIF9fYXR0cmli
dXRlX18gKChzZWN0aW9uICgiX19EQVRBLF9faW50ZXJwb3NlIikpKSA9IHsgKGNvbnN0IHZvaWQq
KSh1bnNpZ25lZCBsb25nKSZfcmVwbGFjZW1lbnQsIChjb25zdCB2b2lkKikodW5zaWduZWQgbG9u
ZykmX3JlcGxhY2VlIH07Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1leHRlcm4gIkMiIHZvaWQg
V2ViS2l0V2ViUHJvY2Vzc1NoaW1Jbml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NTaGltQ2FsbGJh
Y2tzJik7Ci0KLXN0YXRpYyBXZWJQcm9jZXNzU2hpbUNhbGxiYWNrcyB3ZWJQcm9jZXNzU2hpbUNh
bGxiYWNrczsKLQotc3RhdGljIE9TU3RhdHVzIHNoaW1TZWNJdGVtQ29weU1hdGNoaW5nKENGRGlj
dGlvbmFyeVJlZiBxdWVyeSwgQ0ZUeXBlUmVmKiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHdlYlBy
b2Nlc3NTaGltQ2FsbGJhY2tzLnNlY0l0ZW1Db3B5TWF0Y2hpbmcocXVlcnksIHJlc3VsdCk7Ci19
Ci0KLXN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRlbUFkZChDRkRpY3Rpb25hcnlSZWYgcXVlcnks
IENGVHlwZVJlZiogcmVzdWx0KQotewotICAgIHJldHVybiB3ZWJQcm9jZXNzU2hpbUNhbGxiYWNr
cy5zZWNJdGVtQWRkKHF1ZXJ5LCByZXN1bHQpOwotfQotCi1zdGF0aWMgT1NTdGF0dXMgc2hpbVNl
Y0l0ZW1VcGRhdGUoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRkRpY3Rpb25hcnlSZWYgYXR0cmli
dXRlc1RvVXBkYXRlKQotewotICAgIHJldHVybiB3ZWJQcm9jZXNzU2hpbUNhbGxiYWNrcy5zZWNJ
dGVtVXBkYXRlKHF1ZXJ5LCBhdHRyaWJ1dGVzVG9VcGRhdGUpOwotfQotCi1zdGF0aWMgT1NTdGF0
dXMgc2hpbVNlY0l0ZW1EZWxldGUoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5KQotewotICAgIHJldHVy
biB3ZWJQcm9jZXNzU2hpbUNhbGxiYWNrcy5zZWNJdGVtRGVsZXRlKHF1ZXJ5KTsKLX0KLQotRFlM
RF9JTlRFUlBPU0Uoc2hpbVNlY0l0ZW1Db3B5TWF0Y2hpbmcsIFNlY0l0ZW1Db3B5TWF0Y2hpbmcp
Ci1EWUxEX0lOVEVSUE9TRShzaGltU2VjSXRlbUFkZCwgU2VjSXRlbUFkZCkKLURZTERfSU5URVJQ
T1NFKHNoaW1TZWNJdGVtVXBkYXRlLCBTZWNJdGVtVXBkYXRlKQotRFlMRF9JTlRFUlBPU0Uoc2hp
bVNlY0l0ZW1EZWxldGUsIFNlY0l0ZW1EZWxldGUpCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkoImRlZmF1bHQiKSkpCi12b2lkIFdlYktpdFdlYlByb2Nlc3NTaGltSW5pdGlhbGl6ZShjb25z
dCBXZWJQcm9jZXNzU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKQotewotICAgIHdlYlByb2Nlc3NT
aGltQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="87844"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="87845"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94546</attachid>
            <date>2011-05-23 19:10:30 -0700</date>
            <delta_ts>2011-05-24 13:15:19 -0700</delta_ts>
            <desc>Refactoring-prep v2 - Keep the shim callbacks in the WebKit2 framework, and the shims in the WebProcessShim</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28035</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTE3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDUtMjMgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk0MzQzMTE+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEzMzQKKyAgICAgICAgU2hv
dWxkIHNoaW0gYSBmZXcgU2VjS2V5Y2hhaW5JdGVtKiBtZXRob2RzIG9uIFNub3dMZW9wYXJkCisK
KyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGRpZmZlcmVudCBXZWJQcm9jZXNzIHNoaW1zIGRl
cGVuZGluZyBvbiBwbGF0Zm9ybSwgbW92ZSB0aGUgY3VycmVudAorICAgICAgICBzaGltIHRvIGl0
cyBvd24gZmlsZXMuCisgICAgICAgIAorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vz
c01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNoaW0pOiBG
b3Igbm9uLVNub3dMZW9wYXJkIHBsYXRmb3JtcywgY2FsbCBpbml0aWFsaXplU2VjSXRlbVNoaW0o
KS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1NZXRob2Rz
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltTWV0aG9kcy5t
bTogQWRkZWQuIEFjdHVhbCB3ZWJTZWNJdGVtKiBtZXRob2RzIG1vdmVkIGZyb20gV2ViUHJvY2Vz
c01hYy5tbS4KKyAgICAgICAgKFdlYktpdDo6d2ViU2VjSXRlbUNvcHlNYXRjaGluZ01haW5UaHJl
YWQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJTZWNJdGVtQ29weU1hdGNoaW5nKToKKyAgICAgICAg
KFdlYktpdDo6d2ViU2VjSXRlbUFkZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6Ondl
YlNlY0l0ZW1BZGQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJTZWNJdGVtVXBkYXRlT25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6d2ViU2VjSXRlbVVwZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OndlYlNlY0l0ZW1EZWxldGVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJT
ZWNJdGVtRGVsZXRlKToKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZVNlY0l0ZW1TaGltKTog
SW5pdGlhbGl6ZSB0aGUgY2FsbGJhY2tzIHZpYSBXZWJLaXRXZWJQcm9jZXNzU2VjSXRlbVNoaW1J
bml0aWFsaXplCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTaGltLm1tOiBXcmFwIGFsbCB0aGUg
YWN0dWFsIGNvZGUgaGVyZSBpbiBhICFCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQgYmxvY2sKKyAg
ICAgICAgKFdlYktpdDo6c2hpbVNlY0l0ZW1Db3B5TWF0Y2hpbmcpOgorICAgICAgICAoV2ViS2l0
OjpzaGltU2VjSXRlbUFkZCk6CisgICAgICAgIChXZWJLaXQ6OnNoaW1TZWNJdGVtVXBkYXRlKToK
KyAgICAgICAgKFdlYktpdDo6c2hpbVNlY0l0ZW1EZWxldGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRXZWJQcm9jZXNzU2VjSXRlbVNoaW1Jbml0aWFsaXplKToKKwogMjAxMS0wNS0yMyAgSmVy
ZW15IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksOCAr
Mjc5LDYgQEAKIAkJMzdDNEU5RjYxMzFDNkU3RTAwMjlCRDVBIC8qIGNvbmZpZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjM5NkVBNTUxMkUwRUQyRDAw
RjRGRUI3IC8qIGNvbmZpZy5oICovOyB9OwogCQkzN0Y2MjNCODEyQTU3QjYyMDBFM0ZERjYgLyog
V0tGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGNjIzQjcxMkE1N0I2MjAwRTNGREY2IC8qIFdLRmluZE9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTM3RjkwREUzMTM3NjU2
MEUwMDUxQ0Y2OCAvKiBIVFRQQ29va2llQWNjZXB0UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjM4OTU0RjEzM0JFRjM4MDA4OTQxRDUgLyog
SFRUUENvb2tpZUFjY2VwdFBvbGljeS5oICovOyB9OwotCQk1MTAwMzFENTEzNzlDMTEzMDBDOERG
RTQgLyogV2ViUHJvY2Vzc1NoaW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMDAzMUQzMTM3OUMxMTMwMEM4REZFNCAvKiBXZWJQcm9jZXNzU2hpbS5o
ICovOyB9OwotCQk1MTAwMzFGNzEzNzlDQjE2MDBDOERGRTQgLyogV2ViUHJvY2Vzc1NoaW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAwMzFENDEz
NzlDMTEzMDBDOERGRTQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gKi87IH07CiAJCTUxMDIxRTlDMTJC
MTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDIxRTlCMTJCMTY3ODgwMDVDMDMz
QyAvKiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSAqLzsgfTsKIAkJNTEwRkJCOUExMjg4Qzk1
RTAwQUZGREY0IC8qIFdlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRkJCOTgxMjg4Qzk1RTAwQUZGREY0IC8q
IFdlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwICovOyB9OwogCQk1MTBGQkI5QjEyODhDOTVFMDBB
RkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRkJCOTkxMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNv
bnRleHRNZW51SXRlbURhdGEuaCAqLzsgfTsKQEAgLTI5MCw2ICsyODgsMTAgQEAKIAkJNTExQjI0
QTcxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBNTEzMkUwOTU3MDAwNjVB
MEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCAqLzsgfTsKIAkJNTExQjI0QUExMzJFMDk3MjAw
MDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBODEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRh
dGFiYXNlLmNwcCAqLzsgfTsKIAkJNTExQjI0QUIxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25E
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExQjI0QTkxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oICovOyB9OworCQk1
MTFGOEE3QjEzOEI0NjA5MDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTc3MTM4QjQ2MDkwMEE5NUY0
NCAvKiBXZWJQcm9jZXNzU2hpbS5oICovOyB9OworCQk1MTFGOEE3RjEzOEI0NkZFMDBBOTVGNDQg
LyogU2VjSXRlbVNoaW1NZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFGOEE3RDEzOEI0NkZFMDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRo
b2RzLmggKi87IH07CisJCTUxMUY4QTgwMTM4QjQ2RkUwMEE5NUY0NCAvKiBTZWNJdGVtU2hpbU1l
dGhvZHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTFGOEE3RTEzOEI0NkZFMDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2RzLm1tICovOyB9Owor
CQk1MTFGOEE4MTEzOEI0ODVEMDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBB
OTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gKi87IH07CiAJCTUxMjNDRjFCMTMzRDI2MEEwMDU2
RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjNDRjE5MTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRh
YmFzZUNHLmNwcCAqLzsgfTsKIAkJNTEyM0NGMUMxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRh
dGFiYXNlQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMjNDRjFBMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk1MTI5MzVENzEyODhEMTk0
MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJD
b250ZXh0TWVudUl0ZW0uY3BwICovOyB9OwpAQCAtMTE5NSw4ICsxMTk3LDYgQEAKIAkJMzNEM0Ez
QzcxMzM5NjE3OTAwNzA5QkU0IC8qIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNGOUQ1QjgxMzEy
RjFFRTAwMEQ2ODNGIC8qIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyQ0ZOZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5hbWUgPSBXZWJSZXNvdXJjZUNhY2hlTWFuYWdlckNG
TmV0LmNwcDsgcGF0aCA9IFJlc291cmNlQ2FjaGUvY2YvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJD
Rk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjYyM0I3MTJBNTdCNjIw
MEUzRkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMDMx
RDMxMzc5QzExMzAwQzhERkU0IC8qIFdlYlByb2Nlc3NTaGltLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUxMDAzMUQ0MTM3OUMxMTMwMEM4REZFNCAvKiBXZWJQcm9jZXNzU2hpbS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAwMzFGNjEzNzlDQUNCMDBDOERGRTQgLyog
V2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xp
ZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29u
dGV4dE1lbnVDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEZC
Qjk4MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51SXRlbURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIwNyw2ICsxMjA3LDEwIEBACiAJCTUx
MUIyNEE1MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJY29uRGF0YWJhc2VQcm94eS5oOyBwYXRoID0g
SWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMUIyNEE4MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExQjI0QTkxMzJFMDk3MjAwMDY1QTBD
IC8qIFdlYkljb25EYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJJY29uRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRjhBNzcx
MzhCNDYwOTAwQTk1RjQ0IC8qIFdlYlByb2Nlc3NTaGltLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxMUY4QTc4MTM4QjQ2MDkwMEE5NUY0NCAvKiBXZWJQcm9jZXNzU2hpbS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlByb2Nlc3NTaGltLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFGOEE3RDEzOEI0NkZFMDBBOTVGNDQgLyogU2Vj
SXRlbVNoaW1NZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0l0
ZW1TaGltTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFGOEE3RTEz
OEI0NkZFMDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2RzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VjSXRlbVNoaW1NZXRob2RzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxOTEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0
YWJhc2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXS0ljb25E
YXRhYmFzZUNHLmNwcDsgcGF0aCA9IGNnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxQTEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0
YWJhc2VDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0ljb25EYXRhYmFz
ZUNHLmg7IHBhdGggPSBjZy9XS0ljb25EYXRhYmFzZUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVJ
dGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDgsMTIgKzIwMTIsMTQg
QEAKIAkJMUE2RkEwMUMxMUUxNTI2MzAwREIxMzcxIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE2RkEwMUQxMUUxNTI2MzAwREIxMzcxIC8q
IFdlYlByb2Nlc3NNYWluTWFjLm1tICovLAotCQkJCUJDMzA2NUMzMTI1OTJGODkwMEU3MTI3OCAv
KiBXZWJQcm9jZXNzTWFjLm1tICovLAotCQkJCTUxMDAzMUQzMTM3OUMxMTMwMEM4REZFNCAvKiBX
ZWJQcm9jZXNzU2hpbS5oICovLAotCQkJCTUxMDAzMUQ0MTM3OUMxMTMwMEM4REZFNCAvKiBXZWJQ
cm9jZXNzU2hpbS5tbSAqLywKIAkJCQlFMUJCMTY4ODEzMjAxOEJBMDBGNDk0MzEgLyogRnVsbEtl
eWJvYXJkQWNjZXNzV2F0Y2hlci5oICovLAogCQkJCUUxQkIxNjg5MTMyMDE4QkEwMEY0OTQzMSAv
KiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tICovLAorCQkJCTUxMUY4QTdEMTM4QjQ2RkUw
MEE5NUY0NCAvKiBTZWNJdGVtU2hpbU1ldGhvZHMuaCAqLywKKwkJCQk1MTFGOEE3RTEzOEI0NkZF
MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2RzLm1tICovLAorCQkJCTFBNkZBMDFEMTFFMTUy
NjMwMERCMTM3MSAvKiBXZWJQcm9jZXNzTWFpbk1hYy5tbSAqLywKKwkJCQlCQzMwNjVDMzEyNTky
Rjg5MDBFNzEyNzggLyogV2ViUHJvY2Vzc01hYy5tbSAqLywKKwkJCQk1MTFGOEE3NzEzOEI0NjA5
MDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0uaCAqLywKKwkJCQk1MTFGOEE3ODEzOEI0NjA5MDBB
OTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNzc4LDExICszNzg0LDEyIEBACiAJCQkJNkVF
ODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yTWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzN0Y5MERFMzEzNzY1NjBFMDA1MUNGNjggLyogSFRUUENvb2tpZUFjY2VwdFBvbGljeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3QzZDREIxMzc4OTUwODAwQjlDMDREIC8qIEVudmlyb25t
ZW50VmFyaWFibGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTAwMzFENTEzNzlDMTEzMDBDOERG
RTQgLyogV2ViUHJvY2Vzc1NoaW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTc5NzgwMTM3RUU4
MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxRDEzMDU0MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9u
c2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUIxNUE4NTEzODQzQTM5MDAzMjFBRDggLyog
RW52aXJvbm1lbnRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMUY4QTdCMTM4QjQ2
MDkwMEE5NUY0NCAvKiBXZWJQcm9jZXNzU2hpbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTExRjhB
N0YxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC00MDU1LDcgKzQwNjIsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJNTEwMDMx
RjcxMzc5Q0IxNjAwQzhERkU0IC8qIFdlYlByb2Nlc3NTaGltLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTExRjhBODExMzhCNDg1RDAwQTk1RjQ0IC8qIFdlYlByb2Nlc3NTaGltLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC00NDQ1LDYgKzQ0NTIsNyBAQAogCQkJCTUxRDEzMDU1MTM4MkVBQzAwMDM1MUVE
RCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEzMDU4
MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUIxNUE4NDEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTExRjhBODAxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1T
aGltTWV0aG9kcy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9tYWMvU2VjSXRlbVNoaW1NZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1NZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjSXRlbVNoaW1N
ZXRob2RzX2gKKyNkZWZpbmUgU2VjSXRlbVNoaW1NZXRob2RzX2gKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgaW5pdGlhbGl6ZVNlY0l0ZW1TaGltKCk7CisKK30KKworI2VuZGlmIC8vIFNl
Y0l0ZW1TaGltTWV0aG9kc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9T
ZWNJdGVtU2hpbU1ldGhvZHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9tYWMvU2VjSXRlbVNoaW1NZXRob2RzLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1NZXRob2RzLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlNlY0l0ZW1TaGltTWV0aG9kcy5oIgorCisjaW1wb3J0ICJTZWNJdGVtUmVxdWVzdERhdGEuaCIK
KyNpbXBvcnQgIlNlY0l0ZW1SZXNwb25zZURhdGEuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIK
KyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNz
U2hpbS5oIgorI2ltcG9ydCA8U2VjdXJpdHkvU2VjSXRlbS5oPgorI2ltcG9ydCA8ZGxmY24uaD4K
KyNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEZJ
WE1FIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA5NzUpIC0gT25j
ZSBDb3JlSVBDIHN1cHBvcnRzIHN5bmMgbWVzc2FnaW5nIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFk
LAorLy8gd2UgY2FuIHJlbW92ZSBTZWNJdGVtQVBJQ29udGV4dCBhbmQgdGhlc2UgNCBtYWluLXRo
cmVhZCBtZXRob2RzLCBhbmQgd2UgY2FuIGhhdmUgdGhlIHNoaW0gbWV0aG9kcyBjYWxsIG91dCBk
aXJlY3RseSAKKy8vIGZyb20gd2hhdGV2ZXIgdGhyZWFkIHRoZXkncmUgb24uCisKK3N0cnVjdCBT
ZWNJdGVtQVBJQ29udGV4dCB7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5OworICAgIENGRGlj
dGlvbmFyeVJlZiBhdHRyaWJ1dGVzVG9VcGRhdGU7CisgICAgQ0ZUeXBlUmVmIHJlc3VsdE9iamVj
dDsKKyAgICBPU1N0YXR1cyByZXN1bHRDb2RlOworfTsKKworc3RhdGljIHZvaWQgd2ViU2VjSXRl
bUNvcHlNYXRjaGluZ01haW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCit7CisgICAgU2VjSXRl
bUFQSUNvbnRleHQqIGNvbnRleHQgPSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0Owor
ICAgIAorICAgIFNlY0l0ZW1SZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSk7
CisgICAgU2VjSXRlbVJlc3BvbnNlRGF0YSByZXNwb25zZTsKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6U2VjSXRlbUNvcHlNYXRjaGluZyhyZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OlNlY0l0ZW1Db3B5TWF0Y2hpbmc6OlJlcGx5KHJlc3BvbnNlKSwgMCkpIHsKKyAgICAg
ICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IGVyclNlY0ludGVyYWN0aW9uTm90QWxsb3dlZDsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgY29udGV4dC0+cmVzdWx0T2JqZWN0ID0gcmVzcG9uc2UucmVzdWx0T2JqZWN0KCkubGVh
a1JlZigpOworICAgIGNvbnRleHQtPnJlc3VsdENvZGUgPSByZXNwb25zZS5yZXN1bHRDb2RlKCk7
Cit9CisKK3N0YXRpYyBPU1N0YXR1cyB3ZWJTZWNJdGVtQ29weU1hdGNoaW5nKENGRGljdGlvbmFy
eVJlZiBxdWVyeSwgQ0ZUeXBlUmVmKiByZXN1bHQpCit7CisgICAgU2VjSXRlbUFQSUNvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LnF1ZXJ5ID0gcXVlcnk7CisgICAgCisgICAgY2FsbE9uTWFp
blRocmVhZEFuZFdhaXQod2ViU2VjSXRlbUNvcHlNYXRjaGluZ01haW5UaHJlYWQsICZjb250ZXh0
KTsKKyAgICAKKyAgICBpZiAocmVzdWx0KQorICAgICAgICAqcmVzdWx0ID0gY29udGV4dC5yZXN1
bHRPYmplY3Q7CisgICAgcmV0dXJuIGNvbnRleHQucmVzdWx0Q29kZTsKK30KKworc3RhdGljIHZv
aWQgd2ViU2VjSXRlbUFkZE9uTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkKK3sKKyAgICBT
ZWNJdGVtQVBJQ29udGV4dCogY29udGV4dCA9IChTZWNJdGVtQVBJQ29udGV4dCopdm9pZENvbnRl
eHQ7CisgICAgCisgICAgU2VjSXRlbVJlcXVlc3REYXRhIHJlcXVlc3REYXRhKGNvbnRleHQtPnF1
ZXJ5KTsKKyAgICBTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOworICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpTZWNJdGVtQWRkKHJlcXVlc3REYXRhKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6U2VjSXRlbUFkZDo6UmVwbHkocmVzcG9uc2UpLCAwKSkgeworICAgICAgICBjb250ZXh0LT5y
ZXN1bHRDb2RlID0gZXJyU2VjSW50ZXJhY3Rpb25Ob3RBbGxvd2VkOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBjb250ZXh0
LT5yZXN1bHRPYmplY3QgPSByZXNwb25zZS5yZXN1bHRPYmplY3QoKS5sZWFrUmVmKCk7CisgICAg
Y29udGV4dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsKK30KKworc3RhdGlj
IE9TU3RhdHVzIHdlYlNlY0l0ZW1BZGQoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRlR5cGVSZWYq
IHJlc3VsdCkKK3sKKyAgICBTZWNJdGVtQVBJQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQu
cXVlcnkgPSBxdWVyeTsKKyAgICAKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdCh3ZWJTZWNJ
dGVtQWRkT25NYWluVGhyZWFkLCAmY29udGV4dCk7CisgICAgCisgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgKnJlc3VsdCA9IGNvbnRleHQucmVzdWx0T2JqZWN0OworICAgIHJldHVybiBjb250ZXh0
LnJlc3VsdENvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlNlY0l0ZW1VcGRhdGVPbk1haW5UaHJl
YWQodm9pZCogdm9pZENvbnRleHQpCit7CisgICAgU2VjSXRlbUFQSUNvbnRleHQqIGNvbnRleHQg
PSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0OworICAgIAorICAgIFNlY0l0ZW1SZXF1
ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSwgY29udGV4dC0+YXR0cmlidXRlc1Rv
VXBkYXRlKTsKKyAgICBTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOworICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpTZWNJdGVtVXBkYXRlKHJlcXVlc3REYXRhKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6U2VjSXRlbVVwZGF0ZTo6UmVwbHkocmVzcG9uc2UpLCAwKSkgeworICAgICAgICBj
b250ZXh0LT5yZXN1bHRDb2RlID0gZXJyU2VjSW50ZXJhY3Rpb25Ob3RBbGxvd2VkOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBjb250ZXh0LT5yZXN1bHRDb2RlID0gcmVzcG9uc2UucmVzdWx0Q29kZSgpOworfQorCitzdGF0
aWMgT1NTdGF0dXMgd2ViU2VjSXRlbVVwZGF0ZShDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGRGlj
dGlvbmFyeVJlZiBhdHRyaWJ1dGVzVG9VcGRhdGUpCit7CisgICAgU2VjSXRlbUFQSUNvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LnF1ZXJ5ID0gcXVlcnk7CisgICAgY29udGV4dC5hdHRyaWJ1
dGVzVG9VcGRhdGUgPSBhdHRyaWJ1dGVzVG9VcGRhdGU7CisgICAgCisgICAgY2FsbE9uTWFpblRo
cmVhZEFuZFdhaXQod2ViU2VjSXRlbVVwZGF0ZU9uTWFpblRocmVhZCwgJmNvbnRleHQpOworICAg
IAorICAgIHJldHVybiBjb250ZXh0LnJlc3VsdENvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlNl
Y0l0ZW1EZWxldGVPbk1haW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCit7CisgICAgU2VjSXRl
bUFQSUNvbnRleHQqIGNvbnRleHQgPSAoU2VjSXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0Owor
ICAgIAorICAgIFNlY0l0ZW1SZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSk7
CisgICAgU2VjSXRlbVJlc3BvbnNlRGF0YSByZXNwb25zZTsKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6U2VjSXRlbURlbGV0ZShyZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OlNlY0l0ZW1EZWxldGU6OlJlcGx5KHJlc3BvbnNlKSwgMCkpIHsKKyAgICAgICAgY29udGV4dC0+
cmVzdWx0Q29kZSA9IGVyclNlY0ludGVyYWN0aW9uTm90QWxsb3dlZDsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29udGV4
dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsKK30KKworc3RhdGljIE9TU3Rh
dHVzIHdlYlNlY0l0ZW1EZWxldGUoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5KQoreworICAgIFNlY0l0
ZW1BUElDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5xdWVyeSA9IHF1ZXJ5OworICAgIAor
ICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHdlYlNlY0l0ZW1EZWxldGVPbk1haW5UaHJlYWQs
ICZjb250ZXh0KTsKKworICAgIHJldHVybiBjb250ZXh0LnJlc3VsdENvZGU7Cit9CisKK3ZvaWQg
aW5pdGlhbGl6ZVNlY0l0ZW1TaGltKCkKK3sKKyAgICBjb25zdCBXZWJQcm9jZXNzU2VjSXRlbVNo
aW1DYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICB3ZWJTZWNJdGVtQ29weU1hdGNoaW5n
LAorICAgICAgICB3ZWJTZWNJdGVtQWRkLAorICAgICAgICB3ZWJTZWNJdGVtVXBkYXRlLAorICAg
ICAgICB3ZWJTZWNJdGVtRGVsZXRlCisgICAgfTsKKyAgICAKKyAgICBXZWJQcm9jZXNzU2VjSXRl
bVNoaW1Jbml0aWFsaXplRnVuYyBmdW5jID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQcm9jZXNzU2Vj
SXRlbVNoaW1Jbml0aWFsaXplRnVuYz4oZGxzeW0oUlRMRF9ERUZBVUxULCAiV2ViS2l0V2ViUHJv
Y2Vzc1NlY0l0ZW1TaGltSW5pdGlhbGl6ZSIpKTsKKyAgICBmdW5jKGNhbGxiYWNrcyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9t
YWMvV2ViUHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDEyICsyOCwxMCBAQAogCiAjaW1wb3J0ICJGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmgiCiAj
aW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW1wb3J0ICJTZWNJdGVtUmVxdWVzdERhdGEu
aCIKLSNpbXBvcnQgIlNlY0l0ZW1SZXNwb25zZURhdGEuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIK
ICNpbXBvcnQgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbXBvcnQgIldlYlBy
b2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzU2hpbS5oIgorI2ltcG9y
dCAiU2VjSXRlbVNoaW1NZXRob2RzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
ZW1vcnlDYWNoZS5oPgpAQCAtNDEsNyArMzksNiBAQAogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjaW1wb3J0IDxhbGdvcml0aG0+CiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRj
aC5oPgotI2ltcG9ydCA8ZGxmY24uaD4KICNpbXBvcnQgPG1hY2gvaG9zdF9pbmZvLmg+CiAjaW1w
b3J0IDxtYWNoL21hY2guaD4KICNpbXBvcnQgPG1hY2gvbWFjaF9lcnJvci5oPgpAQCAtMjQzLDEz
NiArMjQwLDExIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHIKICAg
ICBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24obWV0aG9kVG9QYXRjaCwgKElNUClOU0FwcGxpY2F0
aW9uQWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQpOwogfQogCi0vLyBGSVhNRSAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwOTc1KSAtIE9uY2UgQ29yZUlQQyBz
dXBwb3J0cyBzeW5jIG1lc3NhZ2luZyBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwKLS8vIHdlIGNh
biByZW1vdmUgU2VjSXRlbUFQSUNvbnRleHQgYW5kIHRoZXNlIDQgbWFpbi10aHJlYWQgbWV0aG9k
cywgYW5kIHdlIGNhbiBoYXZlIHRoZSBzaGltIG1ldGhvZHMgY2FsbCBvdXQgZGlyZWN0bHkgCi0v
LyBmcm9tIHdoYXRldmVyIHRocmVhZCB0aGV5J3JlIG9uLgotCi1zdHJ1Y3QgU2VjSXRlbUFQSUNv
bnRleHQKLXsKLSAgICBDRkRpY3Rpb25hcnlSZWYgcXVlcnk7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVm
IGF0dHJpYnV0ZXNUb1VwZGF0ZTsKLSAgICBDRlR5cGVSZWYgcmVzdWx0T2JqZWN0OwotICAgIE9T
U3RhdHVzIHJlc3VsdENvZGU7Ci19OwotCi1zdGF0aWMgdm9pZCBXZWJTZWNJdGVtQ29weU1hdGNo
aW5nTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkKLXsKLSAgICBTZWNJdGVtQVBJQ29udGV4
dCogY29udGV4dCA9IChTZWNJdGVtQVBJQ29udGV4dCopdm9pZENvbnRleHQ7Ci0gICAgCi0gICAg
U2VjSXRlbVJlcXVlc3REYXRhIHJlcXVlc3REYXRhKGNvbnRleHQtPnF1ZXJ5KTsKLSAgICBTZWNJ
dGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTZWNJdGVt
Q29weU1hdGNoaW5nKHJlcXVlc3REYXRhKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U2Vj
SXRlbUNvcHlNYXRjaGluZzo6UmVwbHkocmVzcG9uc2UpLCAwKSkgewotICAgICAgICBjb250ZXh0
LT5yZXN1bHRDb2RlID0gZXJyU2VjSW50ZXJhY3Rpb25Ob3RBbGxvd2VkOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBjb250
ZXh0LT5yZXN1bHRPYmplY3QgPSByZXNwb25zZS5yZXN1bHRPYmplY3QoKS5sZWFrUmVmKCk7Ci0g
ICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsKLX0KLQotc3Rh
dGljIE9TU3RhdHVzIFdlYlNlY0l0ZW1Db3B5TWF0Y2hpbmcoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5
LCBDRlR5cGVSZWYqIHJlc3VsdCkKLXsKLSAgICBTZWNJdGVtQVBJQ29udGV4dCBjb250ZXh0Owot
ICAgIGNvbnRleHQucXVlcnkgPSBxdWVyeTsKLSAgICAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5k
V2FpdChXZWJTZWNJdGVtQ29weU1hdGNoaW5nTWFpblRocmVhZCwgJmNvbnRleHQpOwotICAgIAot
ICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBjb250ZXh0LnJlc3VsdE9iamVjdDsK
LSAgICByZXR1cm4gY29udGV4dC5yZXN1bHRDb2RlOwotfQotCi1zdGF0aWMgdm9pZCBXZWJTZWNJ
dGVtQWRkT25NYWluVGhyZWFkKHZvaWQqIHZvaWRDb250ZXh0KQotewotICAgIFNlY0l0ZW1BUElD
b250ZXh0KiBjb250ZXh0ID0gKFNlY0l0ZW1BUElDb250ZXh0Kil2b2lkQ29udGV4dDsKLSAgICAK
LSAgICBTZWNJdGVtUmVxdWVzdERhdGEgcmVxdWVzdERhdGEoY29udGV4dC0+cXVlcnkpOwotICAg
IFNlY0l0ZW1SZXNwb25zZURhdGEgcmVzcG9uc2U7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlNl
Y0l0ZW1BZGQocmVxdWVzdERhdGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTZWNJdGVt
QWRkOjpSZXBseShyZXNwb25zZSksIDApKSB7Ci0gICAgICAgIGNvbnRleHQtPnJlc3VsdENvZGUg
PSBlcnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNvbnRleHQtPnJlc3VsdE9i
amVjdCA9IHJlc3BvbnNlLnJlc3VsdE9iamVjdCgpLmxlYWtSZWYoKTsKLSAgICBjb250ZXh0LT5y
ZXN1bHRDb2RlID0gcmVzcG9uc2UucmVzdWx0Q29kZSgpOwotfQotCi1zdGF0aWMgT1NTdGF0dXMg
V2ViU2VjSXRlbUFkZChDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGVHlwZVJlZiogcmVzdWx0KQot
eyAgICAKLSAgICBTZWNJdGVtQVBJQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQucXVlcnkg
PSBxdWVyeTsKLSAgICAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChXZWJTZWNJdGVtQWRk
T25NYWluVGhyZWFkLCAmY29udGV4dCk7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
KnJlc3VsdCA9IGNvbnRleHQucmVzdWx0T2JqZWN0OwotICAgIHJldHVybiBjb250ZXh0LnJlc3Vs
dENvZGU7Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYlNlY0l0ZW1VcGRhdGVPbk1haW5UaHJlYWQodm9p
ZCogdm9pZENvbnRleHQpCi17Ci0gICAgU2VjSXRlbUFQSUNvbnRleHQqIGNvbnRleHQgPSAoU2Vj
SXRlbUFQSUNvbnRleHQqKXZvaWRDb250ZXh0OwotICAgIAotICAgIFNlY0l0ZW1SZXF1ZXN0RGF0
YSByZXF1ZXN0RGF0YShjb250ZXh0LT5xdWVyeSwgY29udGV4dC0+YXR0cmlidXRlc1RvVXBkYXRl
KTsKLSAgICBTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOwotICAgIGlmICghV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpTZWNJdGVtVXBkYXRlKHJlcXVlc3REYXRhKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6U2VjSXRlbVVwZGF0ZTo6UmVwbHkocmVzcG9uc2UpLCAwKSkgewotICAgICAgICBjb250ZXh0
LT5yZXN1bHRDb2RlID0gZXJyU2VjSW50ZXJhY3Rpb25Ob3RBbGxvd2VkOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBjb250
ZXh0LT5yZXN1bHRDb2RlID0gcmVzcG9uc2UucmVzdWx0Q29kZSgpOwotfQotCi1zdGF0aWMgT1NT
dGF0dXMgV2ViU2VjSXRlbVVwZGF0ZShDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGRGljdGlvbmFy
eVJlZiBhdHRyaWJ1dGVzVG9VcGRhdGUpCi17ICAgIAotICAgIFNlY0l0ZW1BUElDb250ZXh0IGNv
bnRleHQ7Ci0gICAgY29udGV4dC5xdWVyeSA9IHF1ZXJ5OwotICAgIGNvbnRleHQuYXR0cmlidXRl
c1RvVXBkYXRlID0gYXR0cmlidXRlc1RvVXBkYXRlOwotICAgIAotICAgIGNhbGxPbk1haW5UaHJl
YWRBbmRXYWl0KFdlYlNlY0l0ZW1VcGRhdGVPbk1haW5UaHJlYWQsICZjb250ZXh0KTsKLSAgICAK
LSAgICByZXR1cm4gY29udGV4dC5yZXN1bHRDb2RlOwotfQotCi1zdGF0aWMgdm9pZCBXZWJTZWNJ
dGVtRGVsZXRlT25NYWluVGhyZWFkKHZvaWQqIHZvaWRDb250ZXh0KQotewotICAgIFNlY0l0ZW1B
UElDb250ZXh0KiBjb250ZXh0ID0gKFNlY0l0ZW1BUElDb250ZXh0Kil2b2lkQ29udGV4dDsKLSAg
ICAKLSAgICBTZWNJdGVtUmVxdWVzdERhdGEgcmVxdWVzdERhdGEoY29udGV4dC0+cXVlcnkpOwot
ICAgIFNlY0l0ZW1SZXNwb25zZURhdGEgcmVzcG9uc2U7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OlNlY0l0ZW1EZWxldGUocmVxdWVzdERhdGEpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpT
ZWNJdGVtRGVsZXRlOjpSZXBseShyZXNwb25zZSksIDApKSB7Ci0gICAgICAgIGNvbnRleHQtPnJl
c3VsdENvZGUgPSBlcnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNvbnRleHQt
PnJlc3VsdENvZGUgPSByZXNwb25zZS5yZXN1bHRDb2RlKCk7Ci19Ci0KLXN0YXRpYyBPU1N0YXR1
cyBXZWJTZWNJdGVtRGVsZXRlKENGRGljdGlvbmFyeVJlZiBxdWVyeSkKLXsgICAgCi0gICAgU2Vj
SXRlbUFQSUNvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LnF1ZXJ5ID0gcXVlcnk7Ci0gICAg
Ci0gICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoV2ViU2VjSXRlbURlbGV0ZU9uTWFpblRocmVh
ZCwgJmNvbnRleHQpOwotCi0gICAgcmV0dXJuIGNvbnRleHQucmVzdWx0Q29kZTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplU2hpbSgpCiB7Ci0gICAgY29uc3QgV2ViUHJvY2Vzc1No
aW1DYWxsYmFja3MgY2FsbGJhY2tzID0gewotICAgICAgICBXZWJTZWNJdGVtQ29weU1hdGNoaW5n
LAotICAgICAgICBXZWJTZWNJdGVtQWRkLAotICAgICAgICBXZWJTZWNJdGVtVXBkYXRlLAotICAg
ICAgICBXZWJTZWNJdGVtRGVsZXRlCi0gICAgfTsKLSAgICAKLSAgICBXZWJQcm9jZXNzU2hpbUlu
aXRpYWxpemVGdW5jIGluaXRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQcm9jZXNzU2hpbUlu
aXRpYWxpemVGdW5jPihkbHN5bShSVExEX0RFRkFVTFQsICJXZWJLaXRXZWJQcm9jZXNzU2hpbUlu
aXRpYWxpemUiKSk7Ci0gICAgaW5pdEZ1bmMoY2FsbGJhY2tzKTsKKyNpZm5kZWYgQlVJTERJTkdf
T05fU05PV19MRU9QQVJECisgICAgaW5pdGlhbGl6ZVNlY0l0ZW1TaGltKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTaGltLmgJKHJldmlzaW9uIDg3MDc1
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NoaW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1z
dHJ1Y3QgV2ViUHJvY2Vzc1NoaW1DYWxsYmFja3MgeworI2lmbmRlZiBCVUlMRElOR19PTl9TTk9X
X0xFT1BBUkQKKworc3RydWN0IFdlYlByb2Nlc3NTZWNJdGVtU2hpbUNhbGxiYWNrcyB7CiAgICAg
T1NTdGF0dXMgKCpzZWNJdGVtQ29weU1hdGNoaW5nKShDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENG
VHlwZVJlZiAqcmVzdWx0KTsKICAgICBPU1N0YXR1cyAoKnNlY0l0ZW1BZGQpKENGRGljdGlvbmFy
eVJlZiBhdHRyaWJ1dGVzLCBDRlR5cGVSZWYgKnJlc3VsdCk7CiAgICAgT1NTdGF0dXMgKCpzZWNJ
dGVtVXBkYXRlKShDRkRpY3Rpb25hcnlSZWYgcXVlcnksIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1
dGVzVG9VcGRhdGUpOwogICAgIE9TU3RhdHVzICgqc2VjSXRlbURlbGV0ZSkoQ0ZEaWN0aW9uYXJ5
UmVmIHF1ZXJ5KTsKIH07CiAKLXR5cGVkZWYgdm9pZCAoKldlYlByb2Nlc3NTaGltSW5pdGlhbGl6
ZUZ1bmMpKGNvbnN0IFdlYlByb2Nlc3NTaGltQ2FsbGJhY2tzJiBjYWxsYmFja3MpOwordHlwZWRl
ZiB2b2lkICgqV2ViUHJvY2Vzc1NlY0l0ZW1TaGltSW5pdGlhbGl6ZUZ1bmMpKGNvbnN0IFdlYlBy
b2Nlc3NTZWNJdGVtU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKTsKKworI2VuZGlmCiAKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NoaW0ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NoaW0u
bW0JKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2Vi
UHJvY2Vzc1NoaW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDI4ICszMywzMCBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotZXh0ZXJuICJDIiB2b2lkIFdlYktpdFdlYlByb2Nlc3NTaGltSW5p
dGlhbGl6ZShjb25zdCBXZWJQcm9jZXNzU2hpbUNhbGxiYWNrcyYpOworI2lmbmRlZiBCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQKIAotc3RhdGljIFdlYlByb2Nlc3NTaGltQ2FsbGJhY2tzIHdlYlBy
b2Nlc3NTaGltQ2FsbGJhY2tzOworZXh0ZXJuICJDIiB2b2lkIFdlYktpdFdlYlByb2Nlc3NTZWNJ
dGVtU2hpbUluaXRpYWxpemUoY29uc3QgV2ViUHJvY2Vzc1NlY0l0ZW1TaGltQ2FsbGJhY2tzJik7
CisKK3N0YXRpYyBXZWJQcm9jZXNzU2VjSXRlbVNoaW1DYWxsYmFja3Mgc2VjSXRlbVNoaW1DYWxs
YmFja3M7CiAKIHN0YXRpYyBPU1N0YXR1cyBzaGltU2VjSXRlbUNvcHlNYXRjaGluZyhDRkRpY3Rp
b25hcnlSZWYgcXVlcnksIENGVHlwZVJlZiogcmVzdWx0KQogewotICAgIHJldHVybiB3ZWJQcm9j
ZXNzU2hpbUNhbGxiYWNrcy5zZWNJdGVtQ29weU1hdGNoaW5nKHF1ZXJ5LCByZXN1bHQpOworICAg
IHJldHVybiBzZWNJdGVtU2hpbUNhbGxiYWNrcy5zZWNJdGVtQ29weU1hdGNoaW5nKHF1ZXJ5LCBy
ZXN1bHQpOwogfQogCiBzdGF0aWMgT1NTdGF0dXMgc2hpbVNlY0l0ZW1BZGQoQ0ZEaWN0aW9uYXJ5
UmVmIHF1ZXJ5LCBDRlR5cGVSZWYqIHJlc3VsdCkKIHsKLSAgICByZXR1cm4gd2ViUHJvY2Vzc1No
aW1DYWxsYmFja3Muc2VjSXRlbUFkZChxdWVyeSwgcmVzdWx0KTsKKyAgICByZXR1cm4gc2VjSXRl
bVNoaW1DYWxsYmFja3Muc2VjSXRlbUFkZChxdWVyeSwgcmVzdWx0KTsKIH0KIAogc3RhdGljIE9T
U3RhdHVzIHNoaW1TZWNJdGVtVXBkYXRlKENGRGljdGlvbmFyeVJlZiBxdWVyeSwgQ0ZEaWN0aW9u
YXJ5UmVmIGF0dHJpYnV0ZXNUb1VwZGF0ZSkKIHsKLSAgICByZXR1cm4gd2ViUHJvY2Vzc1NoaW1D
YWxsYmFja3Muc2VjSXRlbVVwZGF0ZShxdWVyeSwgYXR0cmlidXRlc1RvVXBkYXRlKTsKKyAgICBy
ZXR1cm4gc2VjSXRlbVNoaW1DYWxsYmFja3Muc2VjSXRlbVVwZGF0ZShxdWVyeSwgYXR0cmlidXRl
c1RvVXBkYXRlKTsKIH0KIAogc3RhdGljIE9TU3RhdHVzIHNoaW1TZWNJdGVtRGVsZXRlKENGRGlj
dGlvbmFyeVJlZiBxdWVyeSkKIHsKLSAgICByZXR1cm4gd2ViUHJvY2Vzc1NoaW1DYWxsYmFja3Mu
c2VjSXRlbURlbGV0ZShxdWVyeSk7CisgICAgcmV0dXJuIHNlY0l0ZW1TaGltQ2FsbGJhY2tzLnNl
Y0l0ZW1EZWxldGUocXVlcnkpOwogfQogCiBEWUxEX0lOVEVSUE9TRShzaGltU2VjSXRlbUNvcHlN
YXRjaGluZywgU2VjSXRlbUNvcHlNYXRjaGluZykKQEAgLTYzLDkgKzY1LDExIEBAIERZTERfSU5U
RVJQT1NFKHNoaW1TZWNJdGVtVXBkYXRlLCBTZWNJdGUKIERZTERfSU5URVJQT1NFKHNoaW1TZWNJ
dGVtRGVsZXRlLCBTZWNJdGVtRGVsZXRlKQogCiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKQotdm9pZCBXZWJLaXRXZWJQcm9jZXNzU2hpbUluaXRpYWxpemUoY29uc3QgV2Vi
UHJvY2Vzc1NoaW1DYWxsYmFja3MmIGNhbGxiYWNrcykKK3ZvaWQgV2ViS2l0V2ViUHJvY2Vzc1Nl
Y0l0ZW1TaGltSW5pdGlhbGl6ZShjb25zdCBXZWJQcm9jZXNzU2VjSXRlbVNoaW1DYWxsYmFja3Mm
IGNhbGxiYWNrcykKIHsKLSAgICB3ZWJQcm9jZXNzU2hpbUNhbGxiYWNrcyA9IGNhbGxiYWNrczsK
KyAgICBzZWNJdGVtU2hpbUNhbGxiYWNrcyA9IGNhbGxiYWNrczsKIH0KIAorI2VuZGlmIC8vIEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRAorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="87854"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="87855"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94671</attachid>
            <date>2011-05-24 13:15:19 -0700</date>
            <delta_ts>2011-05-24 13:25:11 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60697</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTkyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDUtMjQgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk0MzQzMTE+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEzMzQKKyAgICAgICAgU2hv
dWxkIHNoaW0gYSBmZXcgU2VjS2V5Y2hhaW5JdGVtKiBtZXRob2RzIG9uIFNub3dMZW9wYXJkCisK
KyAgICAgICAgSW5pdGlhbGl6ZSB0aGUgS2V5Y2hhaW5JdGVtIHNoaW0gb24gU25vd0xlb3BhcmQ6
CisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNoaW0pOgorCisgICAgICAgIE9uIFNub3dMZW9w
YXJkLCBzaGltIHRoZSA0IFNlY0tleWNoYWluSXRlbSBtZXRob2RzOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvbWFjL1dlYlByb2Nlc3NTaGltLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2Vi
UHJvY2Vzc1NoaW0ubW06CisgICAgICAgIChXZWJLaXQ6OnNoaW1TZWNLZXljaGFpbkl0ZW1Db3B5
Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OnNoaW1TZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9t
Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OnNoaW1TZWNLZXljaGFpbkl0ZW1Nb2RpZnlDb250
ZW50KToKKyAgICAgICAgKFdlYktpdDo6c2hpbVNlY0tleWNoYWluSXRlbUZyZWVDb250ZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViS2l0V2ViUHJvY2Vzc0tleWNoYWluSXRlbVNoaW1Jbml0aWFs
aXplKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL0tleWNoYWluSXRlbVNoaW1NZXRob2Rz
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL0tleWNoYWluSXRlbVNoaW1NZXRo
b2RzLm1tOiBBZGRlZC4KKyAgICAgICAgTWFuYWdlIGEgc2V0IG9mIHNoaW0tY29udHJvbGxlZCBB
dHRyaWJ1dGVMaXN0IGRhdGE6CisgICAgICAgIChXZWJLaXQ6OnNoaW1NYW5hZ2VkQXR0cmlidXRl
TGlzdHMpOgorICAgICAgICAoV2ViS2l0OjpmcmVlQXR0cmlidXRlTGlzdENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYktpdDo6YWxsb2NhdGVBdHRyaWJ1dGVMaXN0Q29udGVudHMpOgorCisgICAgICAg
IE1hbmFnZSBhIHNldCBvZiBzaGltLWNvbnRyb2xsZWQgS2V5Y2hhaW5JdGVtIGRhdGE6CisgICAg
ICAgIChXZWJLaXQ6OnNoaW1NYW5hZ2VkS2V5Y2hhaW5JdGVtQ29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjphbGxvY2F0ZUtleWNoYWluSXRlbUNvbnRlbnREYXRhKToKKworICAgICAgICBGcmVl
IGFueSBzaGltLWNvbnRyb2xsZWQgQXR0cmlidXRlTGlzdCBvciBLZXljaGFpbkl0ZW0gZGF0YToK
KyAgICAgICAgKFdlYktpdDo6d2ViRnJlZUF0dHJpYnV0ZUxpc3RDb250ZW50T25NYWluVGhyZWFk
KToKKyAgICAgICAgKFdlYktpdDo6d2ViRnJlZUF0dHJpYnV0ZUxpc3RDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6d2ViRnJlZUtleWNoYWluSXRlbUNvbnRlbnRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViS2l0Ojp3ZWJGcmVlS2V5Y2hhaW5JdGVtQ29udGVudCk6CisKKyAgICAgICAgTWFy
c2hhbGwgdGhlc2UgMyBLZXljaGFpbkl0ZW0gbWV0aG9kcyB0byB0aGUgVUlQcm9jZXNzOgorICAg
ICAgICAoV2ViS2l0Ojp3ZWJTZWNLZXljaGFpbkl0ZW1Db3B5Q29udGVudE9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJLaXQ6OndlYlNlY0tleWNoYWluSXRlbUNvcHlDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6d2ViU2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnRPbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJTZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29udGVu
dCk6CisgICAgICAgIChXZWJLaXQ6OndlYlNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRlbnRPbk1h
aW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJTZWNLZXljaGFpbkl0ZW1Nb2RpZnlDb250
ZW50KToKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZUtleWNoYWluSXRlbVNoaW0pOgorCisg
ICAgICAgIENvbnRhaW5lciBmb3IgYW4gQXR0cmlidXRlTGlzdCBlbnRyeSB0aGF0IGtub3dzIGhv
dyB0byBlbmNvZGUvZGVjb2RlOgorICAgICAgICAqIFNoYXJlZC9tYWMvS2V5Y2hhaW5BdHRyaWJ1
dGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6S2V5Y2hhaW5BdHRyaWJ1dGU6OktleWNo
YWluQXR0cmlidXRlKToKKyAgICAgICAgKENvcmVJUEM6OmVuY29kZSk6CisgICAgICAgIChDb3Jl
SVBDOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvS2V5Y2hhaW5BdHRyaWJ1dGUuaDog
QWRkZWQuCisKKyAgICAgICAgQ29udGFpbmVyIGZvciB0aGUgcmVsZXZhbnQgYXJndW1lbnRzIHRv
IHRoZSBzaGltbWVkIG1ldGhvZHMsIHRvIHNlbmQgdG8gdGhlIFVJUHJvY2VzczoKKyAgICAgICAg
KiBTaGFyZWQvbWFjL1NlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhOjpTZWNLZXljaGFpbkl0ZW1S
ZXF1ZXN0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRh
Ojppbml0aWFsaXplV2l0aEF0dHJpYnV0ZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpTZWNLZXlj
aGFpbkl0ZW1SZXF1ZXN0RGF0YTo6flNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OmF0dHJpYnV0ZUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL21hYy9TZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OmtleWNoYWluSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhOjppdGVtQ2xhc3Mp
OgorICAgICAgICAoV2ViS2l0OjpTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YTo6bGVuZ3RoKToK
KyAgICAgICAgKFdlYktpdDo6U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OmRhdGEpOgorCisg
ICAgICAgIENvbnRhaW5lciBmb3IgdGhlIHBvc3NpYmxlIG91dHB1dCBmcm9tIHRoZSBzaGltbWVk
IG1ldGhvZHMsIHRvIHNlbmQgYmFjayB0byB0aGUgV2ViUHJvY2VzczoKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL1NlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGE6OlNlY0tleWNoYWluSXRlbVJlc3Bv
bnNlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhOjpk
ZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvU2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRh
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGE6
Oml0ZW1DbGFzcyk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0
YTo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YTo6
cmVzdWx0Q29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0
YTo6YXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlc3BvbnNl
RGF0YTo6a2V5Y2hhaW5JdGVtKToKKworICAgICAgICBBY3R1YWxseSBpbXBsZW1lbnQgdGhlIGNh
bGxzIHRvIHRoZSBTZWNLZXljaGFpbkl0ZW0qIG1ldGhvZHMgaW4gdGhlIFVJUHJvY2VzczoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlByb2Nlc3NQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpz
ZWNLZXljaGFpbkl0ZW1Db3B5Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6c2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OnNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRlbnQpOgorCisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBQcm9qZWN0IGZpbGUgc3R1
ZmYKKwogMjAxMS0wNS0yNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSW52YWxpZGF0ZSBKU05QT2JqZWN0cyB3aGVuIHRoZXkgYXJlIGZpbmFsaXplZApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9LZXljaGFpbkF0dHJpYnV0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9LZXljaGFpbkF0dHJpYnV0ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0tleWNoYWluQXR0cmlidXRl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXljaGFpbkF0dHJpYnV0ZS5oIgorCisjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0NGLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitLZXljaGFpbkF0dHJpYnV0ZTo6S2V5Y2hhaW5BdHRyaWJ1dGUoKQor
ICAgIDogdGFnKDApCit7Cit9CisKK0tleWNoYWluQXR0cmlidXRlOjpLZXljaGFpbkF0dHJpYnV0
ZShjb25zdCBTZWNLZXljaGFpbkF0dHJpYnV0ZSYgc2VjS2V5Y2hhaW5BdHRyaWJ1dGUpCisgICAg
OiB0YWcoc2VjS2V5Y2hhaW5BdHRyaWJ1dGUudGFnKQoreworICAgIGlmICghc2VjS2V5Y2hhaW5B
dHRyaWJ1dGUuZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRhdGEuYWRvcHRDRihD
RkRhdGFDcmVhdGUoTlVMTCwgKFVJbnQ4KilzZWNLZXljaGFpbkF0dHJpYnV0ZS5kYXRhLCBzZWNL
ZXljaGFpbkF0dHJpYnV0ZS5sZW5ndGgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K25hbWVzcGFjZSBDb3JlSVBDIHsKKwordm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJLaXQ6OktleWNoYWluQXR0cmlidXRlJiBhdHRyaWJ1dGUp
Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKGF0dHJpYnV0ZS50YWcpOworICAgIGVuY29k
ZXItPmVuY29kZUJvb2woYXR0cmlidXRlLmRhdGEpOworICAgIGlmIChhdHRyaWJ1dGUuZGF0YSkK
KyAgICAgICAgQ29yZUlQQzo6ZW5jb2RlKGVuY29kZXIsIGF0dHJpYnV0ZS5kYXRhLmdldCgpKTsK
K30KKworYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJL
aXQ6OktleWNoYWluQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit7CisgICAgdWludDMyX3QgYXR0cmli
dXRlVGFnOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKGF0dHJpYnV0ZVRhZykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBib29sIGV4cGVjdERhdGE7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGVCb29sKGV4cGVjdERhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgaWYgKGV4cGVjdERhdGEgJiYgIUNvcmVJUEM6OmRlY29kZShkZWNvZGVyLCBh
dHRyaWJ1dGUuZGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdHRyaWJ1
dGUudGFnID0gYXR0cmlidXRlVGFnOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBDb3JlSVBDCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0tleWNoYWluQXR0
cmlidXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9LZXljaGFp
bkF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9L
ZXljaGFpbkF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBLZXljaGFpbkF0dHJpYnV0ZV9oCisjZGVmaW5lIEtleWNoYWluQXR0cmli
dXRlX2gKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxTZWN1cml0eS9T
ZWN1cml0eS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0cnVjdCBLZXljaGFpbkF0
dHJpYnV0ZSB7CisgICAgS2V5Y2hhaW5BdHRyaWJ1dGUoKTsKKyAgICBLZXljaGFpbkF0dHJpYnV0
ZShjb25zdCBTZWNLZXljaGFpbkF0dHJpYnV0ZSYpOworICAgIFNlY0tleWNoYWluQXR0clR5cGUg
dGFnOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Cit9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworY2xhc3MgQXJndW1lbnREZWNv
ZGVyOworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJLaXQ6OktleWNoYWluQXR0cmlidXRlJik7Citib29sIGRlY29kZShBcmd1
bWVudERlY29kZXIqLCBXZWJLaXQ6OktleWNoYWluQXR0cmlidXRlJik7CisKK30gLy8gbmFtZXNw
YWNlIENvcmVJUEMKKworI2VuZGlmIC8vIEtleWNoYWluQXR0cmlidXRlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjS2V5Y2hhaW5JdGVtUmVxdWVz
dERhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNL
ZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY0tleWNoYWlu
SXRlbVJlcXVlc3REYXRhLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1
ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NlY0tleWNo
YWluSXRlbVJlcXVlc3REYXRhOjpTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YSgpCisgICAgOiBt
X2l0ZW1DbGFzcygwKQorICAgICwgbV9hdHRyaWJ1dGVMaXN0KDApCit7Cit9CisKK1NlY0tleWNo
YWluSXRlbVJlcXVlc3REYXRhOjpTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YShTZWNLZXljaGFp
bkl0ZW1SZWYgaXRlbSwgU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiBhdHRyTGlzdCkKKyAgICA6
IG1fa2V5Y2hhaW5JdGVtKGl0ZW0pCisgICAgLCBtX2l0ZW1DbGFzcygwKQorICAgICwgbV9hdHRy
aWJ1dGVMaXN0KDApCit7CisgICAgaW5pdGlhbGl6ZVdpdGhBdHRyaWJ1dGVMaXN0KGF0dHJMaXN0
KTsKK30KKworU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OlNlY0tleWNoYWluSXRlbVJlcXVl
c3REYXRhKFNlY0tleWNoYWluSXRlbVJlZiBpdGVtLCBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3Qq
IGF0dHJMaXN0LCBVSW50MzIgbGVuZ3RoLCBjb25zdCB2b2lkKiBkYXRhKQorICAgIDogbV9rZXlj
aGFpbkl0ZW0oaXRlbSkKKyAgICAsIG1faXRlbUNsYXNzKDApCisgICAgLCBtX2RhdGFSZWZlcmVu
Y2UoKGNvbnN0IHVpbnQ4X3QqKWRhdGEsIGxlbmd0aCkKKyAgICAsIG1fYXR0cmlidXRlTGlzdCgw
KQoreworICAgIGluaXRpYWxpemVXaXRoQXR0cmlidXRlTGlzdChhdHRyTGlzdCk7Cit9CisKKwor
U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6OlNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhKFNl
Y0l0ZW1DbGFzcyBpdGVtQ2xhc3MsIFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxpc3Qs
IFVJbnQzMiBsZW5ndGgsIGNvbnN0IHZvaWQqIGRhdGEpCisgICAgOiBtX2l0ZW1DbGFzcyhpdGVt
Q2xhc3MpCisgICAgLCBtX2RhdGFSZWZlcmVuY2UoKGNvbnN0IHVpbnQ4X3QqKWRhdGEsIGxlbmd0
aCkKKyAgICAsIG1fYXR0cmlidXRlTGlzdCgwKQoreworICAgIGluaXRpYWxpemVXaXRoQXR0cmli
dXRlTGlzdChhdHRyTGlzdCk7Cit9CisKK3ZvaWQgU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGE6
OmluaXRpYWxpemVXaXRoQXR0cmlidXRlTGlzdChTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqIGF0
dHJMaXN0KQoreworICAgIGlmICghYXR0ckxpc3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX2F0
dHJpYnV0ZXMucmVzZXJ2ZUNhcGFjaXR5KGF0dHJMaXN0LT5jb3VudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhdHRyTGlzdC0+Y291bnQ7ICsraSkKKyAgICAgICAgbV9hdHRyaWJ1dGVz
LmFwcGVuZChLZXljaGFpbkF0dHJpYnV0ZShhdHRyTGlzdC0+YXR0cltpXSkpOworfQorCitTZWNL
ZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YTo6flNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhKCkKK3sK
KyAgICBpZiAoIW1fYXR0cmlidXRlTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisjaWZuZGVmIE5E
RUJVRworICAgIC8vIElmIHRoaXMgcmVxdWVzdCB3YXMgZm9yIFNlY0tleWNoYWluSXRlbU1vZGlm
eUNvbnRlbnQ6CisgICAgLy8gICAtIFRoZSBkYXRhIHBvaW50ZXJzIHNob3VsZCd2ZSBiZWVuIHBv
cHVsYXRlZCBieSB0aGlzIFNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLAorICAgIC8vICAgICBh
bmQgc2hvdWxkIG1hdGNoIHRoZSBkYXRhIHBvaW50ZXJzIGNvbnRhaW5lZCBpbiB0aGUgY29ycmVz
cG9uZGluZyBDRkRhdGFSZWYKKyAgICAvLyBJZiB0aGlzIHJlcXVlc3Qgd2FzIGZvciBTZWNLZXlj
aGFpbkl0ZW1Db3B5Q29udGVudDoKKyAgICAvLyAgIC0gU2VjdXJpdHkgQVBJcyBzaG91bGQndmUg
ZmlsbGVkIGluIHRoZSBkYXRhIGluIHRoZSBBdHRyaWJ1dGVMaXN0IGFuZCB0aGF0IGRhdGEgCisg
ICAgLy8gICAgIHNob3VsZCd2ZSBiZWVuIGZyZWVkIGJ5IFNlY0tleWNoYWluSXRlbUZyZWVDb250
ZW50LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hdHRyaWJ1dGVMaXN0LT5jb3VudDsg
KytpKSB7CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXNbaV0uZGF0YSkKKyAgICAgICAgICAgIEFT
U0VSVChtX2F0dHJpYnV0ZUxpc3QtPmF0dHJbaV0uZGF0YSA9PSBDRkRhdGFHZXRCeXRlUHRyKG1f
YXR0cmlidXRlc1tpXS5kYXRhLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFT
U0VSVCghbV9hdHRyaWJ1dGVMaXN0LT5hdHRyW2ldLmRhdGEpOworICAgIH0KKyNlbmRpZgorCisg
ICAgZnJlZShtX2F0dHJpYnV0ZUxpc3QtPmF0dHIpOworICAgIGZyZWUobV9hdHRyaWJ1dGVMaXN0
KTsKK30KKworU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0
RGF0YTo6YXR0cmlidXRlTGlzdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fYXR0cmlidXRlTGlzdCB8
fCBtX2F0dHJpYnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0
OworICAgIAorICAgIG1fYXR0cmlidXRlTGlzdCA9IChTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3Qq
KWNhbGxvYygxLCBzaXplb2YoU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KSk7CisgICAgbV9hdHRy
aWJ1dGVMaXN0LT5jb3VudCA9IG1fYXR0cmlidXRlcy5zaXplKCk7CisgICAgbV9hdHRyaWJ1dGVM
aXN0LT5hdHRyID0gKFNlY0tleWNoYWluQXR0cmlidXRlKiljYWxsb2MobV9hdHRyaWJ1dGVMaXN0
LT5jb3VudCwgc2l6ZW9mKFNlY0tleWNoYWluQXR0cmlidXRlKSk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2F0dHJpYnV0ZUxpc3QtPmNvdW50OyArK2kpIHsKKyAgICAgICAg
bV9hdHRyaWJ1dGVMaXN0LT5hdHRyW2ldLnRhZyA9IG1fYXR0cmlidXRlc1tpXS50YWc7CisgICAg
ICAgIGlmICghbV9hdHRyaWJ1dGVzW2ldLmRhdGEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIG1fYXR0cmlidXRlTGlzdC0+YXR0cltpXS5sZW5ndGggPSBDRkRhdGFH
ZXRMZW5ndGgobV9hdHRyaWJ1dGVzW2ldLmRhdGEuZ2V0KCkpOworICAgICAgICBtX2F0dHJpYnV0
ZUxpc3QtPmF0dHJbaV0uZGF0YSA9ICh2b2lkKilDRkRhdGFHZXRCeXRlUHRyKG1fYXR0cmlidXRl
c1tpXS5kYXRhLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fYXR0cmlidXRlTGlz
dDsKK30KKwordm9pZCBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YTo6ZW5jb2RlKENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGVC
b29sKG1fa2V5Y2hhaW5JdGVtKTsKKyAgICBpZiAobV9rZXljaGFpbkl0ZW0pCisgICAgICAgIENv
cmVJUEM6OmVuY29kZShlbmNvZGVyLCBtX2tleWNoYWluSXRlbS5nZXQoKSk7CisKKyAgICBlbmNv
ZGVyLT5lbmNvZGVVSW50MzIobV9hdHRyaWJ1dGVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDAsIGNvdW50ID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCisgICAg
ICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBtX2F0dHJpYnV0ZXNbaV0pOworICAgIAorICAg
IGVuY29kZXItPmVuY29kZVVJbnQ2NChtX2l0ZW1DbGFzcyk7CisgICAgbV9kYXRhUmVmZXJlbmNl
LmVuY29kZShlbmNvZGVyKTsKK30KKworYm9vbCBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YTo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU2VjS2V5Y2hhaW5JdGVt
UmVxdWVzdERhdGEmIHNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhKQoreworICAgIGJvb2wgaGFz
S2V5Y2hhaW5JdGVtOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChoYXNLZXljaGFpbkl0
ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzS2V5Y2hhaW5JdGVtICYm
ICFDb3JlSVBDOjpkZWNvZGUoZGVjb2Rlciwgc2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEubV9r
ZXljaGFpbkl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgdWludDMyX3Qg
YXR0cmlidXRlQ291bnQ7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50MzIoYXR0cmlidXRl
Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKHNlY0tleWNo
YWluSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRlcy5pc0VtcHR5KCkpOworICAgIHNlY0tleWNo
YWluSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkoYXR0cmlidXRl
Q291bnQpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7
ICsraSkgeworICAgICAgICBLZXljaGFpbkF0dHJpYnV0ZSBhdHRyaWJ1dGU7CisgICAgICAgIGlm
ICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGF0dHJpYnV0ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLm1fYXR0cmlidXRl
cy5hcHBlbmQoYXR0cmlidXRlKTsKKyAgICB9CisgICAgCisgICAgdWludDY0X3QgaXRlbUNsYXNz
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGl0ZW1DbGFzcykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBzZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5tX2l0ZW1D
bGFzcyA9IChTZWNJdGVtQ2xhc3MpaXRlbUNsYXNzOworCisgICAgaWYgKCFDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlOjpkZWNvZGUoZGVjb2Rlciwgc2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEubV9k
YXRhUmVmZXJlbmNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1NlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNLZXljaGFpbkl0ZW1S
ZXF1ZXN0RGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YV9oCisjZGVmaW5lIFNlY0tleWNoYWlu
SXRlbVJlcXVlc3REYXRhX2gKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJLZXljaGFpbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIENvcmVJUEMgeworICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKKyAgICBjbGFzcyBB
cmd1bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorY2xhc3MgU2Vj
S2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEgeworcHVibGljOgorICAgIFNlY0tleWNoYWluSXRlbVJl
cXVlc3REYXRhKCk7CisgICAgU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEoU2VjS2V5Y2hhaW5J
dGVtUmVmLCBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqKTsKKyAgICBTZWNLZXljaGFpbkl0ZW1S
ZXF1ZXN0RGF0YShTZWNLZXljaGFpbkl0ZW1SZWYsIFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCos
IFVJbnQzMiBsZW5ndGgsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgIFNlY0tleWNoYWluSXRlbVJl
cXVlc3REYXRhKFNlY0l0ZW1DbGFzcywgU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiwgVUludDMy
IGxlbmd0aCwgY29uc3Qgdm9pZCogZGF0YSk7CisgICAgflNlY0tleWNoYWluSXRlbVJlcXVlc3RE
YXRhKCk7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25z
dDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgU2Vj
S2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEmKTsKKworICAgIFNlY0tleWNoYWluSXRlbVJlZiBrZXlj
aGFpbkl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2tleWNoYWluSXRlbS5nZXQoKTsgfQorICAgIFNl
Y0l0ZW1DbGFzcyBpdGVtQ2xhc3MoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1DbGFzczsgfQorICAg
IFVJbnQzMiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2RhdGFSZWZlcmVuY2Uuc2l6ZSgpOyB9
CisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVJlZmVyZW5jZS5k
YXRhKCk7IH0KKyAgICAKKyAgICBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqIGF0dHJpYnV0ZUxp
c3QoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoQXR0cmlidXRl
TGlzdChTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8U2Vj
S2V5Y2hhaW5JdGVtUmVmPiBtX2tleWNoYWluSXRlbTsKKyAgICBTZWNJdGVtQ2xhc3MgbV9pdGVt
Q2xhc3M7CisgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBtX2RhdGFSZWZlcmVuY2U7CisgICAg
CisgICAgVmVjdG9yPEtleWNoYWluQXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7CisgICAgbXV0YWJs
ZSBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqIG1fYXR0cmlidXRlTGlzdDsKK307CisgICAgCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNlY0tleWNoYWluSXRlbVJlcXVlc3RE
YXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjS2V5Y2hhaW5JdGVtUmVz
cG9uc2VEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Nl
Y0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1NlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oIgorCisjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0NGLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGE6OlNlY0tleWNoYWluSXRl
bVJlc3BvbnNlRGF0YSgpCisgICAgOiBtX2l0ZW1DbGFzcygwKQorICAgICwgbV9yZXN1bHRDb2Rl
KDApCit7Cit9CisKK1NlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YTo6U2VjS2V5Y2hhaW5JdGVt
UmVzcG9uc2VEYXRhKE9TU3RhdHVzIHJlc3VsdENvZGUsIFNlY0l0ZW1DbGFzcyBpdGVtQ2xhc3Ms
IFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxpc3QsIFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEpCisgICAgOiBtX2l0ZW1DbGFzcyhpdGVtQ2xhc3MpCisgICAgLCBtX2RhdGEoZGF0YSkK
KyAgICAsIG1fcmVzdWx0Q29kZShyZXN1bHRDb2RlKQoreworICAgIGlmICghYXR0ckxpc3QpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2F0dHJpYnV0ZXMucmVzZXJ2ZUNhcGFjaXR5KGF0
dHJMaXN0LT5jb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyTGlzdC0+Y291
bnQ7ICsraSkKKyAgICAgICAgbV9hdHRyaWJ1dGVzLmFwcGVuZChLZXljaGFpbkF0dHJpYnV0ZShh
dHRyTGlzdC0+YXR0cltpXSkpOworfQorCitTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGE6OlNl
Y0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YShPU1N0YXR1cyByZXN1bHRDb2RlLCBSZXRhaW5QdHI8
U2VjS2V5Y2hhaW5JdGVtUmVmPiBrZXljaGFpbkl0ZW0pCisgICAgOiBtX3Jlc3VsdENvZGUocmVz
dWx0Q29kZSkKKyAgICAsIG1fa2V5Y2hhaW5JdGVtKGtleWNoYWluSXRlbSkKK3sKK30KKworU2Vj
S2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhOjpTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEoT1NT
dGF0dXMgcmVzdWx0Q29kZSkKKyAgICA6IG1fcmVzdWx0Q29kZShyZXN1bHRDb2RlKQoreworfQor
Cit2b2lkIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGVJbnQ2NCgo
aW50NjRfdCltX3Jlc3VsdENvZGUpOworICAgIGVuY29kZXItPmVuY29kZVVJbnQzMihtX2l0ZW1D
bGFzcyk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKG1fYXR0cmlidXRlcy5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1fYXR0cmlidXRlcy5zaXplKCk7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgbV9hdHRyaWJ1dGVz
W2ldKTsKKworICAgIGVuY29kZXItPmVuY29kZUJvb2wobV9kYXRhLmdldCgpKTsKKyAgICBpZiAo
bV9kYXRhKQorICAgICAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgbV9kYXRhLmdldCgpKTsK
K30KKworYm9vbCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGE6OmRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YSYgc2Vj
S2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhKQoreworICAgIGludDY0X3QgcmVzdWx0Q29kZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZUludDY0KHJlc3VsdENvZGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdWludDMyX3QgaXRlbUNsYXNzOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
VUludDMyKGl0ZW1DbGFzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1aW50MzJfdCBh
dHRyaWJ1dGVDb3VudDsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihhdHRyaWJ1dGVD
b3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNlY0tleWNoYWluSXRlbVJlc3Bv
bnNlRGF0YS5tX3Jlc3VsdENvZGUgPSAoT1NTdGF0dXMpcmVzdWx0Q29kZTsKKyAgICBzZWNLZXlj
aGFpbkl0ZW1SZXNwb25zZURhdGEubV9pdGVtQ2xhc3MgPSAoU2VjSXRlbUNsYXNzKWl0ZW1DbGFz
czsKKworICAgIEFTU0VSVChzZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEubV9hdHRyaWJ1dGVz
LmlzRW1wdHkoKSk7CisgICAgc2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhLm1fYXR0cmlidXRl
cy5yZXNlcnZlQ2FwYWNpdHkoYXR0cmlidXRlQ291bnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBLZXljaGFpbkF0dHJpYnV0ZSBh
dHRyaWJ1dGU7CisgICAgICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGF0dHJpYnV0
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNlY0tleWNoYWluSXRlbVJl
c3BvbnNlRGF0YS5tX2F0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0ZSk7CisgICAgfQorCisgICAg
Ym9vbCBleHBlY3REYXRhOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChleHBlY3REYXRh
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGV4cGVjdERhdGEgJiYgIUNvcmVJ
UEM6OmRlY29kZShkZWNvZGVyLCBzZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEubV9kYXRhKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNLZXljaGFp
bkl0ZW1SZXNwb25zZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1NlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9TZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjS2V5Y2hhaW5J
dGVtUmVzcG9uc2VEYXRhX2gKKyNkZWZpbmUgU2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhX2gK
KworI2luY2x1ZGUgIktleWNoYWluQXR0cmlidXRlLmgiCisjaW5jbHVkZSA8U2VjdXJpdHkvU2Vj
dXJpdHkuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CisgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwor
ICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAg
CitjbGFzcyBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEgeworcHVibGljOgorICAgIFNlY0tl
eWNoYWluSXRlbVJlc3BvbnNlRGF0YSgpOworICAgIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0
YShPU1N0YXR1cywgU2VjSXRlbUNsYXNzLCBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqLCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPik7CisgICAgU2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhKE9TU3Rh
dHVzLCBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPik7CisgICAgU2VjS2V5Y2hhaW5JdGVt
UmVzcG9uc2VEYXRhKE9TU3RhdHVzKTsKKworICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciopIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqLCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEmKTsKKworICAgIFNlY0l0
ZW1DbGFzcyBpdGVtQ2xhc3MoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1DbGFzczsgfQorICAgIENG
RGF0YVJlZiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisgICAgT1NTdGF0
dXMgcmVzdWx0Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29kZTsgfQorICAgIGNvbnN0
IFZlY3RvcjxLZXljaGFpbkF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXM7IH0KKyAgICBTZWNLZXljaGFpbkl0ZW1SZWYga2V5Y2hhaW5JdGVtKCkgY29u
c3QgeyByZXR1cm4gbV9rZXljaGFpbkl0ZW0uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBTZWNJ
dGVtQ2xhc3MgbV9pdGVtQ2xhc3M7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9kYXRhOwor
ICAgIE9TU3RhdHVzIG1fcmVzdWx0Q29kZTsKKyAgICBWZWN0b3I8S2V5Y2hhaW5BdHRyaWJ1dGU+
IG1fYXR0cmlidXRlczsKKyAgICBSZXRhaW5QdHI8U2VjS2V5Y2hhaW5JdGVtUmVmPiBtX2tleWNo
YWluSXRlbTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNl
Y0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiA4NzE5MikKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEz
NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZWNJdGVtQWRkKGNvbnN0IFNlY0l0ZW1SZXF1ZXN0
RGF0YSYsIFNlY0l0ZW1SZXNwb25zZURhdGEmKTsKICAgICB2b2lkIHNlY0l0ZW1VcGRhdGUoY29u
c3QgU2VjSXRlbVJlcXVlc3REYXRhJiwgU2VjSXRlbVJlc3BvbnNlRGF0YSYpOwogICAgIHZvaWQg
c2VjSXRlbURlbGV0ZShjb25zdCBTZWNJdGVtUmVxdWVzdERhdGEmLCBTZWNJdGVtUmVzcG9uc2VE
YXRhJik7CisgICAgdm9pZCBzZWNLZXljaGFpbkl0ZW1Db3B5Q29udGVudChjb25zdCBTZWNLZXlj
aGFpbkl0ZW1SZXF1ZXN0RGF0YSYsIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YSYpOworICAg
IHZvaWQgc2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnQoY29uc3QgU2VjS2V5Y2hhaW5J
dGVtUmVxdWVzdERhdGEmLCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEmKTsKKyAgICB2b2lk
IHNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRlbnQoY29uc3QgU2VjS2V5Y2hhaW5JdGVtUmVxdWVz
dERhdGEmLCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEmKTsKICNlbmRpZgogCiAgICAgLy8g
Q29yZUlQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDg3MTky
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2Vz
c1Byb3h5IHsKICAgICBTZWNJdGVtQWRkKFdlYktpdDo6U2VjSXRlbVJlcXVlc3REYXRhIHF1ZXJ5
KSAtPiAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3VsdCkKICAgICBTZWNJdGVtVXBk
YXRlKFdlYktpdDo6U2VjSXRlbVJlcXVlc3REYXRhIHF1ZXJ5KSAtPiAoV2ViS2l0OjpTZWNJdGVt
UmVzcG9uc2VEYXRhIHJlc3VsdCkKICAgICBTZWNJdGVtRGVsZXRlKFdlYktpdDo6U2VjSXRlbVJl
cXVlc3REYXRhIHF1ZXJ5KSAtPiAoV2ViS2l0OjpTZWNJdGVtUmVzcG9uc2VEYXRhIHJlc3VsdCkK
KyAgICAKKyAgICBTZWNLZXljaGFpbkl0ZW1Db3B5Q29udGVudChXZWJLaXQ6OlNlY0tleWNoYWlu
SXRlbVJlcXVlc3REYXRhIHF1ZXJ5KSAtPiAoV2ViS2l0OjpTZWNLZXljaGFpbkl0ZW1SZXNwb25z
ZURhdGEgcmVzdWx0KQorICAgIFNlY0tleWNoYWluSXRlbUNyZWF0ZUZyb21Db250ZW50KFdlYktp
dDo6U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEgcXVlcnkpIC0+IChXZWJLaXQ6OlNlY0tleWNo
YWluSXRlbVJlc3BvbnNlRGF0YSByZXN1bHQpCisgICAgU2VjS2V5Y2hhaW5JdGVtTW9kaWZ5Q29u
dGVudChXZWJLaXQ6OlNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhIHF1ZXJ5KSAtPiAoV2ViS2l0
OjpTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEgcmVzdWx0KQogI2VuZGlmCiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1Byb3h5TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1Byb3h5TWFj
Lm1tCShyZXZpc2lvbiA4NzE5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
UHJvY2Vzc1Byb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNp
bXBvcnQgIlNlY0l0ZW1SZXF1ZXN0RGF0YS5oIgogI2ltcG9ydCAiU2VjSXRlbVJlc3BvbnNlRGF0
YS5oIgorI2ltcG9ydCAiU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuaCIKKyNpbXBvcnQgIlNl
Y0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oIgogI2ltcG9ydCA8U2VjdXJpdHkvU2VjSXRlbS5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc1LDQgKzc3LDM3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpzZWNJdGVtRGVsZXRlKGNvbnMKICAgICByZXN1bHQgPSBTZWNJdGVtUmVzcG9uc2VE
YXRhKHJlc3VsdENvZGUsIDApOwogfQogCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VjS2V5Y2hh
aW5JdGVtQ29weUNvbnRlbnQoY29uc3QgU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEmIHJlcXVl
c3QsIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YSYgcmVzcG9uc2UpCit7CisgICAgU2VjS2V5
Y2hhaW5JdGVtUmVmIGl0ZW0gPSByZXF1ZXN0LmtleWNoYWluSXRlbSgpOworICAgIFNlY0l0ZW1D
bGFzcyBpdGVtQ2xhc3M7CisgICAgU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiBhdHRyTGlzdCA9
IHJlcXVlc3QuYXR0cmlidXRlTGlzdCgpOyAgICAKKyAgICBVSW50MzIgbGVuZ3RoOworICAgIHZv
aWQqIG91dERhdGE7CisKKyAgICBPU1N0YXR1cyByZXN1bHRDb2RlID0gU2VjS2V5Y2hhaW5JdGVt
Q29weUNvbnRlbnQoaXRlbSwgJml0ZW1DbGFzcywgYXR0ckxpc3QsICZsZW5ndGgsICZvdXREYXRh
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNy
ZWF0ZSgwLCAoY29uc3QgVUludDgqKW91dERhdGEsIGxlbmd0aCkpOworICAgIHJlc3BvbnNlID0g
U2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhKHJlc3VsdENvZGUsIGl0ZW1DbGFzcywgYXR0ckxp
c3QsIGRhdGEuZ2V0KCkpOworICAgIAorICAgIFNlY0tleWNoYWluSXRlbUZyZWVDb250ZW50KGF0
dHJMaXN0LCBvdXREYXRhKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlY0tleWNoYWlu
SXRlbUNyZWF0ZUZyb21Db250ZW50KGNvbnN0IFNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhJiBy
ZXF1ZXN0LCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEmIHJlc3BvbnNlKQoreworICAgIFNl
Y0tleWNoYWluSXRlbVJlZiBrZXljaGFpbkl0ZW07CisgICAgCisgICAgT1NTdGF0dXMgcmVzdWx0
Q29kZSA9IFNlY0tleWNoYWluSXRlbUNyZWF0ZUZyb21Db250ZW50KHJlcXVlc3QuaXRlbUNsYXNz
KCksIHJlcXVlc3QuYXR0cmlidXRlTGlzdCgpLCByZXF1ZXN0Lmxlbmd0aCgpLCByZXF1ZXN0LmRh
dGEoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsIE5VTEwsICZrZXljaGFpbkl0ZW0pOworCisgICAgcmVzcG9uc2UgPSBT
ZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEocmVzdWx0Q29kZSwgUmV0YWluUHRyPFNlY0tleWNo
YWluSXRlbVJlZj4oQWRvcHRDRiwga2V5Y2hhaW5JdGVtKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpzZWNLZXljaGFpbkl0ZW1Nb2RpZnlDb250ZW50KGNvbnN0IFNlY0tleWNoYWluSXRl
bVJlcXVlc3REYXRhJiByZXF1ZXN0LCBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEmIHJlc3Bv
bnNlKQoreworICAgIE9TU3RhdHVzIHJlc3VsdENvZGUgPSBTZWNLZXljaGFpbkl0ZW1Nb2RpZnlD
b250ZW50KHJlcXVlc3Qua2V5Y2hhaW5JdGVtKCksIHJlcXVlc3QuYXR0cmlidXRlTGlzdCgpLCBy
ZXF1ZXN0Lmxlbmd0aCgpLCByZXF1ZXN0LmRhdGEoKSk7CisgICAgCisgICAgcmVzcG9uc2UgPSBT
ZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEocmVzdWx0Q29kZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODcxOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw2ICsy
OTgsMTQgQEAKIAkJNTEyOTM1RDgxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRl
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOTM1
RDYxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5oICovOyB9OwogCQk1MTI5
MzVFMzEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
OTM1RTExMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmNwcCAqLzsgfTsKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVu
ZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKKwkJNTEyREY2RDgxMzhDMTgxQTAwQTIy
RkM2IC8qIEtleWNoYWluSXRlbVNoaW1NZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERjZENjEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hh
aW5JdGVtU2hpbU1ldGhvZHMuaCAqLzsgfTsKKwkJNTEyREY2RDkxMzhDMTgxQTAwQTIyRkM2IC8q
IEtleWNoYWluSXRlbVNoaW1NZXRob2RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEyREY2RDcxMzhDMTgxQTAwQTIyRkM2IC8qIEtleWNoYWluSXRl
bVNoaW1NZXRob2RzLm1tICovOyB9OworCQk1MTJERjZGRTEzOEMyNTQ2MDBBMjJGQzYgLyogU2Vj
S2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExMkNBNDcxMzg1OEQ0QjAwMzA4NjdEIC8qIFNlY0tleWNoYWlu
SXRlbVJlcXVlc3REYXRhLmNwcCAqLzsgfTsKKwkJNTEyREY2RkYxMzhDMjU0NjAwQTIyRkM2IC8q
IFNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyQ0E0ODEzODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5Y2hh
aW5JdGVtUmVxdWVzdERhdGEuaCAqLzsgfTsKKwkJNTEyREY3MDAxMzhDMjU0NjAwQTIyRkM2IC8q
IFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyQ0E0OTEzODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5
Y2hhaW5JdGVtUmVzcG9uc2VEYXRhLmNwcCAqLzsgfTsKKwkJNTEyREY3MDExMzhDMjU0NjAwQTIy
RkM2IC8qIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMkNBNEExMzg1OEQ0QjAwMzA4NjdEIC8qIFNl
Y0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oICovOyB9OworCQk1MTJERjcwQTEzOEMyNkM3MDBB
MjJGQzYgLyogS2V5Y2hhaW5BdHRyaWJ1dGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMkNCMDcxMzg1Qjk3QjAwMzA4NjdEIC8qIEtleWNoYWlu
QXR0cmlidXRlLmNwcCAqLzsgfTsKKwkJNTEyREY3MEIxMzhDMjZDNzAwQTIyRkM2IC8qIEtleWNo
YWluQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTEyQ0IwNTEzODVCOEQ5MDAzMDg2N0QgLyogS2V5Y2hhaW5BdHRyaWJ1dGUuaCAqLzsg
fTsKIAkJNTEyRTM0RTQxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3
QTMzQjMxMzBCMzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwICov
OyB9OwogCQk1MTJFMzRFNTEzMEI0RDA1MDBBQkQxOUEgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3
QTMzQjQxMzBCMzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUxMkUzNTI0MTMw
QjU1MDYwMEFCRDE5QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkUzNTIwMTMwQjU1
MDEwMEFCRDE5QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcCAqLzsgfTsK
QEAgLTEyMDMsNiArMTIxMSwxMiBAQAogCQk1MTBGQkI5OTEyODhDOTVFMDBBRkZERjQgLyogV2Vi
Q29udGV4dE1lbnVJdGVtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MTBBRTBBMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0ljb25EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMTBBRTBCMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRh
YmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0ljb25EYXRhYmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyQ0E0NzEzODU4RDRCMDAzMDg2N0Qg
LyogU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTEyQ0E0ODEzODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5Y2hh
aW5JdGVtUmVxdWVzdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vj
S2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTExMkNBNDkxMzg1OEQ0QjAwMzA4NjdEIC8qIFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWNLZXljaGFpbkl0ZW1S
ZXNwb25zZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyQ0E0QTEz
ODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0tleWNoYWluSXRlbVJlc3BvbnNlRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyQ0IwNTEzODVCOEQ5MDAzMDg2N0QgLyog
S2V5Y2hhaW5BdHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5
Y2hhaW5BdHRyaWJ1dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExMkNCMDcx
Mzg1Qjk3QjAwMzA4NjdEIC8qIEtleWNoYWluQXR0cmlidXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtleWNoYWluQXR0cmlidXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTExQjI0QTQxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRh
YmFzZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYklj
b25EYXRhYmFzZVByb3h5LmNwcDsgcGF0aCA9IEljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUIyNEE1MTMyRTA5NTcw
MDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJJY29uRGF0YWJhc2VQcm94eS5oOyBwYXRoID0gSWNvbkRhdGFiYXNlL1dl
Ykljb25EYXRhYmFzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUIy
NEE4MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTcsNiArMTIzMSw4IEBACiAJCTUxMjkzNUQ2MTI4OEQxOTQw
MEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29udGV4dE1lbnVJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMjkzNUUxMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0
TWVudUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmpl
Y3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMjkzNUUyMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VD
b250ZXh0TWVudUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmpl
Y3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTJERjZENjEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhv
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5Y2hhaW5JdGVtU2hpbU1l
dGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyREY2RDcxMzhDMTgxQTAw
QTIyRkM2IC8qIEtleWNoYWluSXRlbVNoaW1NZXRob2RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkUzNTIwMTMwQjU1MDEwMEFCRDE5QSAvKiBXZWJBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTJFMzUyMTEzMEI1NTAxMDBBQkQxOUEgLyogV2ViQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMkUzNTJCMTMwQjU1QUYwMEFCRDE5QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlci5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIw
MTQsNiArMjAzMCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFMUJCMTY4ODEzMjAxOEJBMDBG
NDk0MzEgLyogRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oICovLAogCQkJCUUxQkIxNjg5MTMy
MDE4QkEwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tICovLAorCQkJCTUx
MkRGNkQ2MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICovLAor
CQkJCTUxMkRGNkQ3MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5t
bSAqLywKIAkJCQk1MTFGOEE3RDEzOEI0NkZFMDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2Rz
LmggKi8sCiAJCQkJNTExRjhBN0UxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTWV0aG9k
cy5tbSAqLywKIAkJCQkxQTZGQTAxRDExRTE1MjYzMDBEQjEzNzEgLyogV2ViUHJvY2Vzc01haW5N
YWMubW0gKi8sCkBAIC0yODY3LDYgKzI4ODUsOCBAQAogCQkJCTFBNkY5RkI2MTFFMTQwODUwMERC
MTM3MSAvKiBDb21tYW5kTGluZU1hYy5jcHAgKi8sCiAJCQkJMUE5NjM5RjUxMkYzOEVDRDAwNzhB
MDYyIC8qIENvcmVBbmltYXRpb25SZW5kZXJlci5oICovLAogCQkJCTFBOTYzOUY2MTJGMzhFQ0Qw
MDc4QTA2MiAvKiBDb3JlQW5pbWF0aW9uUmVuZGVyZXIubW0gKi8sCisJCQkJNTExMkNCMDcxMzg1
Qjk3QjAwMzA4NjdEIC8qIEtleWNoYWluQXR0cmlidXRlLmNwcCAqLywKKwkJCQk1MTEyQ0IwNTEz
ODVCOEQ5MDAzMDg2N0QgLyogS2V5Y2hhaW5BdHRyaWJ1dGUuaCAqLywKIAkJCQkxQTkyREMxMjEy
RjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dE1hYy5tbSAqLywKIAkJCQkzMUVBMjVE
MDEzNEY3OEIyMDA1QjE0NTIgLyogTmF0aXZlV2ViTW91c2VFdmVudE1hYy5tbSAqLywKIAkJCQlD
MDJCRkYxRDEyNTE1MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbSAq
LywKQEAgLTI4ODEsNiArMjkwMSwxMCBAQAogCQkJCTUxRDEzMDUwMTM4MkVBQzAwMDM1MUVERCAv
KiBTZWNJdGVtUmVxdWVzdERhdGEuaCAqLywKIAkJCQk1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQg
LyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgKi8sCiAJCQkJNTFEMTMwNTIxMzgyRUFDMDAwMzUx
RUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuaCAqLywKKwkJCQk1MTEyQ0E0NzEzODU4RDRCMDAz
MDg2N0QgLyogU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwICovLAorCQkJCTUxMTJDQTQ4
MTM4NThENEIwMDMwODY3RCAvKiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5oICovLAorCQkJ
CTUxMTJDQTQ5MTM4NThENEIwMDMwODY3RCAvKiBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEu
Y3BwICovLAorCQkJCTUxMTJDQTRBMTM4NThENEIwMDMwODY3RCAvKiBTZWNLZXljaGFpbkl0ZW1S
ZXNwb25zZURhdGEuaCAqLywKIAkJCQkxQTk2MzZCQTEyRjM0ODQ5MDA3OEEwNjIgLyogU2hhcmVh
YmxlU3VyZmFjZS5jcHAgKi8sCiAJCQkJMUE5NjM2QkIxMkYzNDg0OTAwNzhBMDYyIC8qIFNoYXJl
YWJsZVN1cmZhY2UuaCAqLywKIAkJCQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMzNUEgLyogV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLApAQCAtMzc5MCw2ICszODE0LDEwIEBACiAJCQkJNTFC
MTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTFGOEE3QjEzOEI0NjA5MDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTUxMUY4QTdGMTM4QjQ2RkUwMEE5NUY0NCAvKiBTZWNJdGVtU2hp
bU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMkRGNkQ4MTM4QzE4MUEwMEEyMkZDNiAv
KiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEyREY2RkYx
MzhDMjU0NjAwQTIyRkM2IC8qIFNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTJERjcwMTEzOEMyNTQ2MDBBMjJGQzYgLyogU2VjS2V5Y2hhaW5JdGVtUmVz
cG9uc2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTJERjcwQjEzOEMyNkM3MDBBMjJGQzYg
LyogS2V5Y2hhaW5BdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDQ1Myw2ICs0NDgxLDEw
IEBACiAJCQkJNTFEMTMwNTgxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUxQjE1QTg0MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9u
bWVudFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFGOEE4MDEzOEI0NkZFMDBB
OTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyREY2
RDkxMzhDMTgxQTAwQTIyRkM2IC8qIEtleWNoYWluSXRlbVNoaW1NZXRob2RzLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTEyREY2RkUxMzhDMjU0NjAwQTIyRkM2IC8qIFNlY0tleWNoYWluSXRlbVJl
cXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMkRGNzAwMTM4QzI1NDYwMEEyMkZD
NiAvKiBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTEyREY3MEExMzhDMjZDNzAwQTIyRkM2IC8qIEtleWNoYWluQXR0cmlidXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvS2V5Y2hhaW5JdGVt
U2hpbU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21h
Yy9LZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9tYWMvS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgS2V5Y2hhaW5JdGVtU2hpbU1l
dGhvZHNfaAorI2RlZmluZSBLZXljaGFpbkl0ZW1TaGltTWV0aG9kc19oCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIGluaXRpYWxpemVLZXljaGFpbkl0ZW1TaGltKCk7CisKK30KKworI2Vu
ZGlmIC8vIEtleWNoYWluSXRlbVNoaW1NZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvbWFjL0tleWNoYWluSXRlbVNoaW1NZXRob2RzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL0tleWNoYWluSXRlbVNoaW1NZXRob2RzLm1tCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvS2V5Y2hhaW5JdGVt
U2hpbU1ldGhvZHMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMuaCIK
KworI2lmIGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorCisjaW1wb3J0ICJTZWNL
ZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5oIgorI2ltcG9ydCAiU2VjS2V5Y2hhaW5JdGVtUmVzcG9u
c2VEYXRhLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJv
eHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1NoaW0uaCIKKyNpbXBvcnQgPGRsZmNu
Lmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisv
LyBNZXRob2RzIHRvIGFsbG93IHRoZSBzaGltIHRvIG1hbmFnZSBtZW1vcnkgZm9yIGl0cyBvd24g
QXR0cmlidXRlTGlzdCBjb250ZW50cy4KK3N0YXRpYyBIYXNoU2V0PFNlY0tleWNoYWluQXR0cmli
dXRlTGlzdCo+JiBzaGltTWFuYWdlZEF0dHJpYnV0ZUxpc3RzKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8U2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0Kj4sIHNldCwgKCkpOwor
ICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVBdHRyaWJ1dGVMaXN0Q29udGVu
dHMoU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiBhdHRyTGlzdCkKK3sKKyAgICBBU1NFUlQoc2hp
bU1hbmFnZWRBdHRyaWJ1dGVMaXN0cygpLmNvbnRhaW5zKGF0dHJMaXN0KSk7CisgICAgQVNTRVJU
KGF0dHJMaXN0KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJMaXN0LT5j
b3VudDsgKytpKQorICAgICAgICBmcmVlKGF0dHJMaXN0LT5hdHRyW2ldLmRhdGEpOworCisgICAg
c2hpbU1hbmFnZWRBdHRyaWJ1dGVMaXN0cygpLnJlbW92ZShhdHRyTGlzdCk7Cit9CisKK3N0YXRp
YyB2b2lkIGFsbG9jYXRlQXR0cmlidXRlTGlzdENvbnRlbnRzKGNvbnN0IFZlY3RvcjxLZXljaGFp
bkF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMsIFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxp
c3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAoIWF0dHJM
aXN0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFzaGltTWFuYWdlZEF0dHJp
YnV0ZUxpc3RzKCkuY29udGFpbnMoYXR0ckxpc3QpKTsKKyAgICBBU1NFUlQoYXR0cmlidXRlcy5z
aXplKCkgPT0gYXR0ckxpc3QtPmNvdW50KTsKKyAgICAKKyAgICBzaGltTWFuYWdlZEF0dHJpYnV0
ZUxpc3RzKCkuYWRkKGF0dHJMaXN0KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF0dHJMaXN0LT5jb3VudDsgKytpKSB7CisgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzW2ldLnRh
ZyA9PSBhdHRyTGlzdC0+YXR0cltpXS50YWcpOworICAgICAgICAKKyAgICAgICAgQ0ZEYXRhUmVm
IGNmRGF0YSA9IGF0dHJpYnV0ZXNbaV0uZGF0YS5nZXQoKTsKKyAgICAgICAgaWYgKCFjZkRhdGEp
IHsKKyAgICAgICAgICAgIGF0dHJMaXN0LT5hdHRyW2ldLmxlbmd0aCA9IDA7CisgICAgICAgICAg
ICBhdHRyTGlzdC0+YXR0cltpXS5kYXRhID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRkRhdGFHZXRM
ZW5ndGgoY2ZEYXRhKTsKKyAgICAgICAgYXR0ckxpc3QtPmF0dHJbaV0ubGVuZ3RoID0gbGVuZ3Ro
OworICAgICAgICBhdHRyTGlzdC0+YXR0cltpXS5kYXRhID0gbWFsbG9jKGxlbmd0aCk7CisgICAg
ICAgIENGRGF0YUdldEJ5dGVzKGNmRGF0YSwgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgKFVJbnQ4
KilhdHRyTGlzdC0+YXR0cltpXS5kYXRhKTsKKyAgICB9Cit9CisKKy8vIE1ldGhvZHMgdG8gYWxs
b3cgdGhlIHNoaW0gdG8gbWFuYWdlIG1lbW9yeSBmb3IgaXRzIG93biBLZXljaGFpbkl0ZW0gY29u
dGVudCBkYXRhLgorc3RhdGljIEhhc2hTZXQ8dm9pZCo+JiBzaGltTWFuYWdlZEtleWNoYWluSXRl
bUNvbnRlbnRzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8dm9pZCo+LCBz
ZXQsICgpKTsKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0aWMgdm9pZCBhbGxvY2F0ZUtleWNo
YWluSXRlbUNvbnRlbnREYXRhKENGRGF0YVJlZiBjZkRhdGEsIFVJbnQzMiogbGVuZ3RoLCB2b2lk
KiogZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCgobGVu
Z3RoICYmIGRhdGEpIHx8ICghbGVuZ3RoICYmICFkYXRhKSk7CisgICAgaWYgKCFkYXRhKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmICghY2ZEYXRhKSB7CisgICAgICAgICpkYXRh
ID0gMDsKKyAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgKmxlbmd0aCA9IENGRGF0YUdldExlbmd0aChjZkRhdGEpOworICAgICpkYXRhID0gbWFs
bG9jKCpsZW5ndGgpOworICAgIENGRGF0YUdldEJ5dGVzKGNmRGF0YSwgQ0ZSYW5nZU1ha2UoMCwg
Kmxlbmd0aCksIChVSW50OCopKmRhdGEpOworICAgIHNoaW1NYW5hZ2VkS2V5Y2hhaW5JdGVtQ29u
dGVudHMoKS5hZGQoKmRhdGEpOworfQorCisvLyBGSVhNRSAoaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYwOTc1KSAtIE9uY2UgQ29yZUlQQyBzdXBwb3J0cyBzeW5jIG1l
c3NhZ2luZyBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwKKy8vIHdlIGNhbiByZW1vdmUgRnJlZUF0
dHJpYnV0ZUxpc3RDb250ZXh0LCBGcmVlS2V5Y2hhaW5JdGVtRGF0YUNvbnRleHQsIEtleWNoYWlu
SXRlbUFQSUNvbnRleHQsIGFuZCB0aGVzZSA1IG1haW4tdGhyZWFkIG1ldGhvZHMsIAorLy8gYW5k
IHdlIGNhbiBoYXZlIHRoZSBzaGltIG1ldGhvZHMgY2FsbCBvdXQgZGlyZWN0bHkgZnJvbSB3aGF0
ZXZlciB0aHJlYWQgdGhleSdyZSBjYWxsZWQgb24uCisKK3N0cnVjdCBGcmVlQXR0cmlidXRlTGlz
dENvbnRleHQgeworICAgIFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxpc3Q7CisgICAg
Ym9vbCBmcmVlZDsKK307CisKK3N0YXRpYyB2b2lkIHdlYkZyZWVBdHRyaWJ1dGVMaXN0Q29udGVu
dE9uTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkKK3sKKyAgICBGcmVlQXR0cmlidXRlTGlz
dENvbnRleHQqIGNvbnRleHQgPSAoRnJlZUF0dHJpYnV0ZUxpc3RDb250ZXh0Kil2b2lkQ29udGV4
dDsKKyAgICAKKyAgICBpZiAoIXNoaW1NYW5hZ2VkQXR0cmlidXRlTGlzdHMoKS5jb250YWlucyhj
b250ZXh0LT5hdHRyTGlzdCkpIHsKKyAgICAgICAgY29udGV4dC0+ZnJlZWQgPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmcmVlQXR0cmlidXRlTGlzdENvbnRlbnRz
KGNvbnRleHQtPmF0dHJMaXN0KTsKKyAgICBjb250ZXh0LT5mcmVlZCA9IHRydWU7Cit9CisKK3N0
YXRpYyBib29sIHdlYkZyZWVBdHRyaWJ1dGVMaXN0Q29udGVudChTZWNLZXljaGFpbkF0dHJpYnV0
ZUxpc3QqIGF0dHJMaXN0KQoreworICAgIEZyZWVBdHRyaWJ1dGVMaXN0Q29udGV4dCBjb250ZXh0
OworICAgIGNvbnRleHQuYXR0ckxpc3QgPSBhdHRyTGlzdDsKKyAgICAKKyAgICBjYWxsT25NYWlu
VGhyZWFkQW5kV2FpdCh3ZWJGcmVlQXR0cmlidXRlTGlzdENvbnRlbnRPbk1haW5UaHJlYWQsICZj
b250ZXh0KTsKKworICAgIHJldHVybiBjb250ZXh0LmZyZWVkOworfQorCitzdHJ1Y3QgRnJlZUtl
eWNoYWluSXRlbURhdGFDb250ZXh0IHsKKyAgICB2b2lkKiBkYXRhOworICAgIGJvb2wgZnJlZWQ7
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJGcmVlS2V5Y2hhaW5JdGVtQ29udGVudE9uTWFpblRocmVh
ZCh2b2lkKiB2b2lkQ29udGV4dCkKK3sKKyAgICBGcmVlS2V5Y2hhaW5JdGVtRGF0YUNvbnRleHQq
IGNvbnRleHQgPSAoRnJlZUtleWNoYWluSXRlbURhdGFDb250ZXh0Kil2b2lkQ29udGV4dDsKKyAg
ICAKKyAgICBpZiAoIXNoaW1NYW5hZ2VkS2V5Y2hhaW5JdGVtQ29udGVudHMoKS5jb250YWlucyhj
b250ZXh0LT5kYXRhKSkgeworICAgICAgICBjb250ZXh0LT5mcmVlZCA9IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBzaGltTWFuYWdlZEtleWNoYWluSXRlbUNv
bnRlbnRzKCkucmVtb3ZlKGNvbnRleHQtPmRhdGEpOworICAgIGZyZWUoY29udGV4dC0+ZGF0YSk7
CisgICAgY29udGV4dC0+ZnJlZWQgPSB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3ZWJGcmVlS2V5
Y2hhaW5JdGVtQ29udGVudCh2b2lkKiBkYXRhKQoreworICAgIEZyZWVLZXljaGFpbkl0ZW1EYXRh
Q29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGF0YSA9IGRhdGE7CisgICAgCisgICAgY2Fs
bE9uTWFpblRocmVhZEFuZFdhaXQod2ViRnJlZUtleWNoYWluSXRlbUNvbnRlbnRPbk1haW5UaHJl
YWQsICZjb250ZXh0KTsKKworICAgIHJldHVybiBjb250ZXh0LmZyZWVkOworfQorCitzdHJ1Y3Qg
U2VjS2V5Y2hhaW5JdGVtQ29udGV4dCB7CisgICAgU2VjS2V5Y2hhaW5JdGVtUmVmIGl0ZW07Cisg
ICAgCisgICAgU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiBhdHRyaWJ1dGVMaXN0OworICAgIFNl
Y0l0ZW1DbGFzcyBpbml0aWFsSXRlbUNsYXNzOworICAgIFVJbnQzMiBsZW5ndGg7CisgICAgY29u
c3Qgdm9pZCogZGF0YTsKKyAgICAKKyAgICBTZWNJdGVtQ2xhc3MqIHJlc3VsdEl0ZW1DbGFzczsK
KyAgICBVSW50MzIqIHJlc3VsdExlbmd0aDsKKyAgICB2b2lkKiogcmVzdWx0RGF0YTsKKworICAg
IE9TU3RhdHVzIHJlc3VsdENvZGU7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJTZWNLZXljaGFpbkl0
ZW1Db3B5Q29udGVudE9uTWFpblRocmVhZCh2b2lkKiB2b2lkQ29udGV4dCkKK3sKKyAgICBTZWNL
ZXljaGFpbkl0ZW1Db250ZXh0KiBjb250ZXh0ID0gKFNlY0tleWNoYWluSXRlbUNvbnRleHQqKXZv
aWRDb250ZXh0OworCisgICAgU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEgcmVxdWVzdERhdGEo
Y29udGV4dC0+aXRlbSwgY29udGV4dC0+YXR0cmlidXRlTGlzdCk7CisgICAgU2VjS2V5Y2hhaW5J
dGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTZWNLZXlj
aGFpbkl0ZW1Db3B5Q29udGVudChyZXF1ZXN0RGF0YSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OlNlY0tleWNoYWluSXRlbUNvcHlDb250ZW50OjpSZXBseShyZXNwb25zZSksIDApKSB7Cisg
ICAgICAgIGNvbnRleHQtPnJlc3VsdENvZGUgPSBlcnJTZWNJbnRlcmFjdGlvbk5vdEFsbG93ZWQ7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBhbGxvY2F0ZUF0dHJpYnV0ZUxpc3RDb250ZW50cyhyZXNwb25zZS5hdHRy
aWJ1dGVzKCksIGNvbnRleHQtPmF0dHJpYnV0ZUxpc3QpOworICAgIGFsbG9jYXRlS2V5Y2hhaW5J
dGVtQ29udGVudERhdGEocmVzcG9uc2UuZGF0YSgpLCBjb250ZXh0LT5yZXN1bHRMZW5ndGgsIGNv
bnRleHQtPnJlc3VsdERhdGEpOworICAgIGlmIChjb250ZXh0LT5yZXN1bHRJdGVtQ2xhc3MpCisg
ICAgICAgICpjb250ZXh0LT5yZXN1bHRJdGVtQ2xhc3MgPSByZXNwb25zZS5pdGVtQ2xhc3MoKTsK
KyAgICBjb250ZXh0LT5yZXN1bHRDb2RlID0gcmVzcG9uc2UucmVzdWx0Q29kZSgpOworfQorCitz
dGF0aWMgT1NTdGF0dXMgd2ViU2VjS2V5Y2hhaW5JdGVtQ29weUNvbnRlbnQoU2VjS2V5Y2hhaW5J
dGVtUmVmIGl0ZW0sIFNlY0l0ZW1DbGFzcyogaXRlbUNsYXNzLCBTZWNLZXljaGFpbkF0dHJpYnV0
ZUxpc3QqIGF0dHJMaXN0LCBVSW50MzIqIGxlbmd0aCwgdm9pZCoqIG91dERhdGEpCit7CisgICAg
U2VjS2V5Y2hhaW5JdGVtQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuaXRlbSA9IGl0ZW07
CisgICAgY29udGV4dC5yZXN1bHRJdGVtQ2xhc3MgPSBpdGVtQ2xhc3M7CisgICAgY29udGV4dC5h
dHRyaWJ1dGVMaXN0ID0gYXR0ckxpc3Q7CisgICAgY29udGV4dC5yZXN1bHRMZW5ndGggPSBsZW5n
dGg7CisgICAgY29udGV4dC5yZXN1bHREYXRhID0gb3V0RGF0YTsKKworICAgIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHdlYlNlY0tleWNoYWluSXRlbUNvcHlDb250ZW50T25NYWluVGhyZWFkLCAm
Y29udGV4dCk7CisKKyAgICByZXR1cm4gY29udGV4dC5yZXN1bHRDb2RlOworfQorCitzdGF0aWMg
dm9pZCB3ZWJTZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29udGVudE9uTWFpblRocmVhZCh2b2lk
KiB2b2lkQ29udGV4dCkKK3sKKyAgICBTZWNLZXljaGFpbkl0ZW1Db250ZXh0KiBjb250ZXh0ID0g
KFNlY0tleWNoYWluSXRlbUNvbnRleHQqKXZvaWRDb250ZXh0OworCisgICAgU2VjS2V5Y2hhaW5J
dGVtUmVxdWVzdERhdGEgcmVxdWVzdERhdGEoY29udGV4dC0+aW5pdGlhbEl0ZW1DbGFzcywgY29u
dGV4dC0+YXR0cmlidXRlTGlzdCwgY29udGV4dC0+bGVuZ3RoLCBjb250ZXh0LT5kYXRhKTsKKyAg
ICBTZWNLZXljaGFpbkl0ZW1SZXNwb25zZURhdGEgcmVzcG9uc2U7CisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OlNlY0tleWNoYWluSXRlbUNyZWF0ZUZyb21Db250ZW50KHJlcXVlc3REYXRhKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnQ6
OlJlcGx5KHJlc3BvbnNlKSwgMCkpIHsKKyAgICAgICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IGVy
clNlY0ludGVyYWN0aW9uTm90QWxsb3dlZDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIENGUmV0YWluKHJlc3BvbnNl
LmtleWNoYWluSXRlbSgpKTsKKyAgICBjb250ZXh0LT5pdGVtID0gcmVzcG9uc2Uua2V5Y2hhaW5J
dGVtKCk7CisgICAgY29udGV4dC0+cmVzdWx0Q29kZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsK
K30KKworc3RhdGljIE9TU3RhdHVzIHdlYlNlY0tleWNoYWluSXRlbUNyZWF0ZUZyb21Db250ZW50
KFNlY0l0ZW1DbGFzcyBpdGVtQ2xhc3MsIFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxp
c3QsIFVJbnQzMiBsZW5ndGgsIGNvbnN0IHZvaWQqIGRhdGEsIFNlY0tleWNoYWluSXRlbVJlZiAq
aXRlbSkKK3sKKyAgICBTZWNLZXljaGFpbkl0ZW1Db250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4
dC5pbml0aWFsSXRlbUNsYXNzID0gaXRlbUNsYXNzOworICAgIGNvbnRleHQuYXR0cmlidXRlTGlz
dCA9IGF0dHJMaXN0OworICAgIGNvbnRleHQubGVuZ3RoID0gbGVuZ3RoOworICAgIGNvbnRleHQu
ZGF0YSA9IGRhdGE7CisgICAgCisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQod2ViU2VjS2V5
Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnRPbk1haW5UaHJlYWQsICZjb250ZXh0KTsKKyAgICAK
KyAgICBpZiAoaXRlbSkKKyAgICAgICAgKml0ZW0gPSBjb250ZXh0Lml0ZW07CisgICAgZWxzZQor
ICAgICAgICBDRlJlbGVhc2UoY29udGV4dC5pdGVtKTsKKworICAgIHJldHVybiBjb250ZXh0LnJl
c3VsdENvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRl
bnRPbk1haW5UaHJlYWQodm9pZCogdm9pZENvbnRleHQpCit7CisgICAgU2VjS2V5Y2hhaW5JdGVt
Q29udGV4dCogY29udGV4dCA9IChTZWNLZXljaGFpbkl0ZW1Db250ZXh0Kil2b2lkQ29udGV4dDsK
KworICAgIFNlY0tleWNoYWluSXRlbVJlcXVlc3REYXRhIHJlcXVlc3REYXRhKGNvbnRleHQtPml0
ZW0sIGNvbnRleHQtPmF0dHJpYnV0ZUxpc3QsIGNvbnRleHQtPmxlbmd0aCwgY29udGV4dC0+ZGF0
YSk7CisgICAgU2VjS2V5Y2hhaW5JdGVtUmVzcG9uc2VEYXRhIHJlc3BvbnNlOworICAgIGlmICgh
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpTZWNLZXljaGFpbkl0ZW1Nb2RpZnlDb250ZW50KHJlcXVlc3REYXRhKSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U2VjS2V5Y2hhaW5JdGVtTW9kaWZ5Q29udGVudDo6
UmVwbHkocmVzcG9uc2UpLCAwKSkgeworICAgICAgICBjb250ZXh0LT5yZXN1bHRDb2RlID0gZXJy
U2VjSW50ZXJhY3Rpb25Ob3RBbGxvd2VkOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY29udGV4dC0+cmVzdWx0Q29k
ZSA9IHJlc3BvbnNlLnJlc3VsdENvZGUoKTsKK30KKworc3RhdGljIE9TU3RhdHVzIHdlYlNlY0tl
eWNoYWluSXRlbU1vZGlmeUNvbnRlbnQoU2VjS2V5Y2hhaW5JdGVtUmVmIGl0ZW1SZWYsIGNvbnN0
IFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxpc3QsIFVJbnQzMiBsZW5ndGgsIGNvbnN0
IHZvaWQqIGRhdGEpCit7CisgICAgU2VjS2V5Y2hhaW5JdGVtQ29udGV4dCBjb250ZXh0OworICAg
IGNvbnRleHQuaXRlbSA9IGl0ZW1SZWY7CisgICAgY29udGV4dC5hdHRyaWJ1dGVMaXN0ID0gKFNl
Y0tleWNoYWluQXR0cmlidXRlTGlzdCopYXR0ckxpc3Q7CisgICAgY29udGV4dC5sZW5ndGggPSBs
ZW5ndGg7CisgICAgY29udGV4dC5kYXRhID0gZGF0YTsKKyAgICAKKyAgICBjYWxsT25NYWluVGhy
ZWFkQW5kV2FpdCh3ZWJTZWNLZXljaGFpbkl0ZW1Nb2RpZnlDb250ZW50T25NYWluVGhyZWFkLCAm
Y29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIGNvbnRleHQucmVzdWx0Q29kZTsKK30KKwordm9p
ZCBpbml0aWFsaXplS2V5Y2hhaW5JdGVtU2hpbSgpCit7CisgICAgY29uc3QgV2ViUHJvY2Vzc0tl
eWNoYWluSXRlbVNoaW1DYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICB3ZWJTZWNLZXlj
aGFpbkl0ZW1Db3B5Q29udGVudCwKKyAgICAgICAgd2ViU2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJv
bUNvbnRlbnQsCisgICAgICAgIHdlYlNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRlbnQsCisgICAg
ICAgIHdlYkZyZWVBdHRyaWJ1dGVMaXN0Q29udGVudCwKKyAgICAgICAgd2ViRnJlZUtleWNoYWlu
SXRlbUNvbnRlbnQKKyAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBXZWJQcm9jZXNzS2V5Y2hh
aW5JdGVtU2hpbUluaXRpYWxpemVGdW5jIGZ1bmMgPSByZWludGVycHJldF9jYXN0PFdlYlByb2Nl
c3NLZXljaGFpbkl0ZW1TaGltSW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERfREVGQVVMVCwgIldl
YktpdFdlYlByb2Nlc3NLZXljaGFpbkl0ZW1TaGltSW5pdGlhbGl6ZSIpKTsKKyAgICBmdW5jKGNh
bGxiYWNrcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDg3MTkyKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMu
aCIKLSNpbXBvcnQgIlNlY0l0ZW1TaGltTWV0aG9kcy5oIgogI2ltcG9ydCA8V2ViQ29yZS9GaWxl
U3lzdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KQEAgLTQ0LDYgKzQzLDEyIEBACiAjaW1wb3J0IDxtYWNo
L21hY2hfZXJyb3IuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCisjaWYgZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisjaW1wb3J0ICJLZXljaGFpbkl0ZW1TaGltTWV0aG9k
cy5oIgorI2Vsc2UKKyNpbXBvcnQgIlNlY0l0ZW1TaGltTWV0aG9kcy5oIgorI2VuZGlmCisKICNp
ZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkKICNpbXBvcnQgPHNhbmRib3guaD4KICNpbXBv
cnQgPHN0ZGxpYi5oPgpAQCAtMjQyLDcgKzI0Nyw5IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplV2ViUHIKIAogdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplU2hpbSgpCiB7
Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lmIGRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGluaXRpYWxpemVLZXljaGFpbkl0ZW1TaGltKCk7
CisjZWxzZQogICAgIGluaXRpYWxpemVTZWNJdGVtU2hpbSgpOwogI2VuZGlmCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzU2hpbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NTaGltLmgJKHJldmlz
aW9uIDg3MTkyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1No
aW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDExIEBACiAgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLQogI2lmbmRlZiBXZWJQ
cm9jZXNzU2hpbV9oCiAjZGVmaW5lIFdlYlByb2Nlc3NTaGltX2gKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0KIHN0cnVjdCBX
ZWJQcm9jZXNzU2VjSXRlbVNoaW1DYWxsYmFja3MgewogICAgIE9TU3RhdHVzICgqc2VjSXRlbUNv
cHlNYXRjaGluZykoQ0ZEaWN0aW9uYXJ5UmVmIHF1ZXJ5LCBDRlR5cGVSZWYgKnJlc3VsdCk7CiAg
ICAgT1NTdGF0dXMgKCpzZWNJdGVtQWRkKShDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQ0ZU
eXBlUmVmICpyZXN1bHQpOwpAQCAtMzksOCArMzYsMTYgQEAgc3RydWN0IFdlYlByb2Nlc3NTZWNJ
dGVtU2hpbUNhbGxiYWNrcyB7CiAKIHR5cGVkZWYgdm9pZCAoKldlYlByb2Nlc3NTZWNJdGVtU2hp
bUluaXRpYWxpemVGdW5jKShjb25zdCBXZWJQcm9jZXNzU2VjSXRlbVNoaW1DYWxsYmFja3MmIGNh
bGxiYWNrcyk7CiAKLSNlbmRpZiAvLyBCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQKK3N0cnVjdCBX
ZWJQcm9jZXNzS2V5Y2hhaW5JdGVtU2hpbUNhbGxiYWNrcyB7CisgICAgT1NTdGF0dXMgKCpzZWNL
ZXljaGFpbkl0ZW1Db3B5Q29udGVudCkoU2VjS2V5Y2hhaW5JdGVtUmVmLCBTZWNJdGVtQ2xhc3Mq
LCBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqLCBVSW50MzIqIGxlbmd0aCwgdm9pZCoqIG91dERh
dGEpOworICAgIE9TU3RhdHVzICgqc2VjS2V5Y2hhaW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnQpKFNl
Y0l0ZW1DbGFzcywgU2VjS2V5Y2hhaW5BdHRyaWJ1dGVMaXN0KiwgVUludDMyIGxlbmd0aCwgY29u
c3Qgdm9pZCogZGF0YSwgU2VjS2V5Y2hhaW5JdGVtUmVmKik7CisgICAgT1NTdGF0dXMgKCpzZWNL
ZXljaGFpbkl0ZW1Nb2RpZnlDb250ZW50KShTZWNLZXljaGFpbkl0ZW1SZWYsIGNvbnN0IFNlY0tl
eWNoYWluQXR0cmlidXRlTGlzdCosIFVJbnQzMiBsZW5ndGgsIGNvbnN0IHZvaWQqIGRhdGEpOwor
ICAgIGJvb2wgKCpmcmVlQXR0cmlidXRlTGlzdENvbnRlbnQpKFNlY0tleWNoYWluQXR0cmlidXRl
TGlzdCogYXR0ckxpc3QpOworICAgIGJvb2wgKCpmcmVlS2V5Y2hhaW5JdGVtQ29udGVudERhdGEp
KHZvaWQqIGRhdGEpOworfTsKKwordHlwZWRlZiB2b2lkICgqV2ViUHJvY2Vzc0tleWNoYWluSXRl
bVNoaW1Jbml0aWFsaXplRnVuYykoY29uc3QgV2ViUHJvY2Vzc0tleWNoYWluSXRlbVNoaW1DYWxs
YmFja3MmIGNhbGxiYWNrcyk7CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gV2ViUHJvY2Vzc1NoaW1faApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMv
V2ViUHJvY2Vzc1NoaW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9tYWMvV2ViUHJvY2Vzc1NoaW0ubW0JKHJldmlzaW9uIDg3MTkyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc1NoaW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDYgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwotCiAjaW1wb3J0ICJXZWJQcm9jZXNzU2hpbS5oIgogCiAjaW1wb3J0IDxT
ZWN1cml0eS9TZWNJdGVtLmg+CkBAIC0zMSw2ICszMCwxMCBAQAogICAgIF9fYXR0cmlidXRlX18o
KHVzZWQpKSBzdGF0aWMgc3RydWN0eyBjb25zdCB2b2lkKiByZXBsYWNlbWVudDsgY29uc3Qgdm9p
ZCogcmVwbGFjZWU7IH0gX2ludGVycG9zZV8jI19yZXBsYWNlZSBcCiAgICAgX19hdHRyaWJ1dGVf
XyAoKHNlY3Rpb24gKCJfX0RBVEEsX19pbnRlcnBvc2UiKSkpID0geyAoY29uc3Qgdm9pZCopKHVu
c2lnbmVkIGxvbmcpJl9yZXBsYWNlbWVudCwgKGNvbnN0IHZvaWQqKSh1bnNpZ25lZCBsb25nKSZf
cmVwbGFjZWUgfTsKIAorI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNykgfHwgTUFD
X09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNworI2RlZmlu
ZSBCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQpAQCAtNzAsNiArNzMs
NTcgQEAgdm9pZCBXZWJLaXRXZWJQcm9jZXNzU2VjSXRlbVNoaW1Jbml0aWFsaQogICAgIHNlY0l0
ZW1TaGltQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwogfQogCi0jZW5kaWYgLy8gQlVJTERJTkdfT05f
U05PV19MRU9QQVJECisjZW5kaWYgLy8gIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorCisjaWYgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisKK2V4dGVybiAiQyIg
dm9pZCBXZWJLaXRXZWJQcm9jZXNzS2V5Y2hhaW5JdGVtU2hpbUluaXRpYWxpemUoY29uc3QgV2Vi
UHJvY2Vzc0tleWNoYWluSXRlbVNoaW1DYWxsYmFja3MmKTsKKworc3RhdGljIFdlYlByb2Nlc3NL
ZXljaGFpbkl0ZW1TaGltQ2FsbGJhY2tzIGtleWNoYWluSXRlbVNoaW1DYWxsYmFja3M7CisKK3N0
YXRpYyBPU1N0YXR1cyBzaGltU2VjS2V5Y2hhaW5JdGVtQ29weUNvbnRlbnQoU2VjS2V5Y2hhaW5J
dGVtUmVmIGl0ZW0sIFNlY0l0ZW1DbGFzcyogaXRlbUNsYXNzLCBTZWNLZXljaGFpbkF0dHJpYnV0
ZUxpc3QqIGF0dHJMaXN0LCBVSW50MzIqIGxlbmd0aCwgdm9pZCoqIG91dERhdGEpCit7CisgICAg
cmV0dXJuIGtleWNoYWluSXRlbVNoaW1DYWxsYmFja3Muc2VjS2V5Y2hhaW5JdGVtQ29weUNvbnRl
bnQoaXRlbSwgaXRlbUNsYXNzLCBhdHRyTGlzdCwgbGVuZ3RoLCBvdXREYXRhKTsKK30KKworc3Rh
dGljIE9TU3RhdHVzIHNoaW1TZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29udGVudChTZWNJdGVt
Q2xhc3MgaXRlbUNsYXNzLCBTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqIGF0dHJMaXN0LCBVSW50
MzIgbGVuZ3RoLCBjb25zdCB2b2lkKiBkYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjS2V5Y2hhaW5SZWYga2V5Y2hhaW5SZWYsIFNl
Y0FjY2Vzc1JlZiBpbml0aWFsQWNjZXNzLCBTZWNLZXljaGFpbkl0ZW1SZWYgKml0ZW1SZWYpCit7
CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBzaGltbWluZyBTZWNLZXljaGFpbkl0ZW1DcmVhdGVG
cm9tQ29udGVudCB3aXRoIEtleWNoYWluIG9yIEFjY2VzcyBhcmd1bWVudHMgYXQgdGhpcyB0aW1l
CisgICAgaWYgKGtleWNoYWluUmVmIHx8IGluaXRpYWxBY2Nlc3MpCisgICAgICAgIHJldHVybiBT
ZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29udGVudChpdGVtQ2xhc3MsIGF0dHJMaXN0LCBsZW5n
dGgsIGRhdGEsIGtleWNoYWluUmVmLCBpbml0aWFsQWNjZXNzLCBpdGVtUmVmKTsKKyAgICByZXR1
cm4ga2V5Y2hhaW5JdGVtU2hpbUNhbGxiYWNrcy5zZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29u
dGVudChpdGVtQ2xhc3MsIGF0dHJMaXN0LCBsZW5ndGgsIGRhdGEsIGl0ZW1SZWYpOworfQorCitz
dGF0aWMgT1NTdGF0dXMgc2hpbVNlY0tleWNoYWluSXRlbU1vZGlmeUNvbnRlbnQoU2VjS2V5Y2hh
aW5JdGVtUmVmIGl0ZW1SZWYsIGNvbnN0IFNlY0tleWNoYWluQXR0cmlidXRlTGlzdCogYXR0ckxp
c3QsIFVJbnQzMiBsZW5ndGgsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgcmV0dXJuIGtleWNo
YWluSXRlbVNoaW1DYWxsYmFja3Muc2VjS2V5Y2hhaW5JdGVtTW9kaWZ5Q29udGVudChpdGVtUmVm
LCBhdHRyTGlzdCwgbGVuZ3RoLCBkYXRhKTsKK30KKworc3RhdGljIE9TU3RhdHVzIHNoaW1TZWNL
ZXljaGFpbkl0ZW1GcmVlQ29udGVudChTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QqIGF0dHJMaXN0
LCB2b2lkKiBkYXRhKQoreyAgICAKKyAgICBib29sIGF0dHJMaXN0SGFuZGxlZCA9ICFhdHRyTGlz
dCB8fCBrZXljaGFpbkl0ZW1TaGltQ2FsbGJhY2tzLmZyZWVBdHRyaWJ1dGVMaXN0Q29udGVudChh
dHRyTGlzdCk7CisgICAgYm9vbCBrZXljaGFpbkl0ZW1Db250ZW50SGFuZGxlZCA9ICFkYXRhIHx8
IGtleWNoYWluSXRlbVNoaW1DYWxsYmFja3MuZnJlZUtleWNoYWluSXRlbUNvbnRlbnREYXRhKGRh
dGEpOworICAgIAorICAgIC8vIElmIGJvdGggaXRlbXMgd2VyZSBoYW5kbGVkIGJ5IHRoZSBzaGlt
IGhhbmRsZXJzLCByZXR1cm4gbm93LgorICAgIGlmIChhdHRyTGlzdEhhbmRsZWQgJiYga2V5Y2hh
aW5JdGVtQ29udGVudEhhbmRsZWQpCisgICAgICAgIHJldHVybiBlcnJTZWNTdWNjZXNzOworICAg
IAorICAgIC8vIEhhdmUgdGhlIG5hdGl2ZSBmdW5jdGlvbiBoYW5kbGUgd2hpY2hldmVyIGl0ZW0g
d2Fzbid0IGFscmVhZHkgaGFuZGxlZC4KKyAgICByZXR1cm4gU2VjS2V5Y2hhaW5JdGVtRnJlZUNv
bnRlbnQoYXR0ckxpc3RIYW5kbGVkID8gYXR0ckxpc3QgOiBOVUxMLCBrZXljaGFpbkl0ZW1Db250
ZW50SGFuZGxlZCA/IGRhdGEgOiBOVUxMKTsKK30KKworRFlMRF9JTlRFUlBPU0Uoc2hpbVNlY0tl
eWNoYWluSXRlbUNvcHlDb250ZW50LCBTZWNLZXljaGFpbkl0ZW1Db3B5Q29udGVudCkKK0RZTERf
SU5URVJQT1NFKHNoaW1TZWNLZXljaGFpbkl0ZW1DcmVhdGVGcm9tQ29udGVudCwgU2VjS2V5Y2hh
aW5JdGVtQ3JlYXRlRnJvbUNvbnRlbnQpCitEWUxEX0lOVEVSUE9TRShzaGltU2VjS2V5Y2hhaW5J
dGVtTW9kaWZ5Q29udGVudCwgU2VjS2V5Y2hhaW5JdGVtTW9kaWZ5Q29udGVudCkKK0RZTERfSU5U
RVJQT1NFKHNoaW1TZWNLZXljaGFpbkl0ZW1GcmVlQ29udGVudCwgU2VjS2V5Y2hhaW5JdGVtRnJl
ZUNvbnRlbnQpCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCit2b2lk
IFdlYktpdFdlYlByb2Nlc3NLZXljaGFpbkl0ZW1TaGltSW5pdGlhbGl6ZShjb25zdCBXZWJQcm9j
ZXNzS2V5Y2hhaW5JdGVtU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKQoreworICAgIGtleWNoYWlu
SXRlbVNoaW1DYWxsYmFja3MgPSBjYWxsYmFja3M7Cit9CisKKyNlbmRpZiAvLyBkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="88010"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="88011"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>