<?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>72866</bug_id>
          
          <creation_ts>2011-11-21 01:36:18 -0800</creation_ts>
          <short_desc>Accessibility: AccessibilityController should support listening to notifications on all elements.</short_desc>
          <delta_ts>2011-12-08 13:27:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>312.x</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72624</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Dominic Mazzoni">dmazzoni</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>506800</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-21 01:36:18 -0800</bug_when>
    <thetext>Currently there&apos;s no way to add a listener for a notification that will fire on an element when it&apos;s first created. 

This is the first step in order to fix: https://bugs.webkit.org/show_bug.cgi?id=72624</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506821</commentid>
    <comment_count>1</comment_count>
      <attachid>116056</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-21 02:44:44 -0800</bug_when>
    <thetext>Created attachment 116056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506824</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 02:46:50 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506873</commentid>
    <comment_count>3</comment_count>
      <attachid>116056</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-11-21 04:30:12 -0800</bug_when>
    <thetext>Comment on attachment 116056
Patch

Attachment 116056 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10472582</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506966</commentid>
    <comment_count>4</comment_count>
      <attachid>116088</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-21 07:57:33 -0800</bug_when>
    <thetext>Created attachment 116088
Patch

Fix GTK &amp; Win compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507008</commentid>
    <comment_count>5</comment_count>
      <attachid>116088</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-21 08:59:43 -0800</bug_when>
    <thetext>Comment on attachment 116088
Patch

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

&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:120
&gt;      case AXObjectCache::AXActiveDescendantChanged:

Is it possible to just make the enums defined on AXObjectCache and their reflection through the API have exactly the same values such that a simple cast could replace this switch/case statement?  That&apos;s how we handle reflecting most other enum values.  Then, to keep the API ones consistent with their WebCore counterparts, we extend AssertMatchingEnums.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507031</commentid>
    <comment_count>6</comment_count>
      <attachid>116088</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-21 09:39:21 -0800</bug_when>
    <thetext>Comment on attachment 116088
Patch

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

&gt;&gt; Source/WebKit/chromium/src/ChromeClientImpl.cpp:120
&gt;&gt;      case AXObjectCache::AXActiveDescendantChanged:
&gt; 
&gt; Is it possible to just make the enums defined on AXObjectCache and their reflection through the API have exactly the same values such that a simple cast could replace this switch/case statement?  That&apos;s how we handle reflecting most other enum values.  Then, to keep the API ones consistent with their WebCore counterparts, we extend AssertMatchingEnums.cpp.

Good idea. I split this into a separate bug - https://bugs.webkit.org/show_bug.cgi?id=72895 - patch coming momentarily. Then I can remove all of those files from this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507113</commentid>
    <comment_count>7</comment_count>
      <attachid>116113</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-21 11:45:59 -0800</bug_when>
    <thetext>Created attachment 116113
Patch

Remove Chromium notification changes that were committed in bug 72895.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507122</commentid>
    <comment_count>8</comment_count>
      <attachid>116113</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 12:18:27 -0800</bug_when>
    <thetext>Comment on attachment 116113
Patch

Attachment 116113 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10393436

New failing tests:
accessibility/notification-listeners.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507944</commentid>
    <comment_count>9</comment_count>
      <attachid>116320</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-11-22 22:42:44 -0800</bug_when>
    <thetext>Created attachment 116320
Patch

Try again, cr-linux should pass...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510046</commentid>
    <comment_count>10</comment_count>
      <attachid>116320</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-11-28 12:00:07 -0800</bug_when>
    <thetext>Comment on attachment 116320
Patch

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

You also need to make this work in WebKitTestRunner, which will basically duplicate a bunch of this code

&gt; Tools/DumpRenderTree/AccessibilityController.h:65
&gt; +#endif

Can these methods be reconciled with windows so we don&apos;t need two addNotificationListeners

&gt; Tools/DumpRenderTree/AccessibilityController.h:82
&gt; +#endif

this should probably be a RetainPtr&lt;NotificationHandler&gt;

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:34
&gt; +#import &lt;Cocoa/Cocoa.h&gt;

i doubt you need to import Cocoa here. I believe the prefix header handles this

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:43
&gt; +- (id)initAndListenToAllElements;

i think you should add a setter to set the platform element if you want (so you don&apos;t need two different init&apos;s)
and i think you should have to call startObserving explicitly.
that way you can remove both the init methods, and add a setPlatformElement:() and make startObserving public

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:47
&gt; +

if these are private they should not be in the header. if they are not private they should not be prefixed with_

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:36
&gt; +#import &lt;Foundation/Foundation.h&gt;

unlikely that you need Foundation here

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:66
&gt; +    m_platformElement = platformElement;

if [super init] returns nil then you should also return nil right away

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:93
&gt; +    // Release the old callback.

comment is not needed.

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:106
&gt; +    [NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;) accessibilitySetShouldRepostNotifications:YES];

you should assert that NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;) returns something  (in case the name changes like it did recently)

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:122
&gt; +        JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 1, &amp;notificationNameArgument, 0);

if you have an if block with a comment (making it more than one line), i believe you should be using brackets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512560</commentid>
    <comment_count>11</comment_count>
      <attachid>116320</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-12-01 00:16:17 -0800</bug_when>
    <thetext>Comment on attachment 116320
Patch

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

New patch with WebKitTestRunner changes coming.

&gt;&gt; Tools/DumpRenderTree/AccessibilityController.h:65
&gt;&gt; +#endif
&gt; 
&gt; Can these methods be reconciled with windows so we don&apos;t need two addNotificationListeners

Sure, I gave them a &quot;win&quot; prefix.

&gt;&gt; Tools/DumpRenderTree/AccessibilityController.h:82
&gt;&gt; +#endif
&gt; 
&gt; this should probably be a RetainPtr&lt;NotificationHandler&gt;

Done.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:34
&gt;&gt; +#import &lt;Cocoa/Cocoa.h&gt;
&gt; 
&gt; i doubt you need to import Cocoa here. I believe the prefix header handles this

Done.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:43
&gt;&gt; +- (id)initAndListenToAllElements;
&gt; 
&gt; i think you should add a setter to set the platform element if you want (so you don&apos;t need two different init&apos;s)
&gt; and i think you should have to call startObserving explicitly.
&gt; that way you can remove both the init methods, and add a setPlatformElement:() and make startObserving public

Sure.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h:47
&gt;&gt; +
&gt; 
&gt; if these are private they should not be in the header. if they are not private they should not be prefixed with_

Private, removed from the header.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:36
&gt;&gt; +#import &lt;Foundation/Foundation.h&gt;
&gt; 
&gt; unlikely that you need Foundation here

Done.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:66
&gt;&gt; +    m_platformElement = platformElement;
&gt; 
&gt; if [super init] returns nil then you should also return nil right away

Done.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:93
&gt;&gt; +    // Release the old callback.
&gt; 
&gt; comment is not needed.

Done.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:106
&gt;&gt; +    [NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;) accessibilitySetShouldRepostNotifications:YES];
&gt; 
&gt; you should assert that NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;) returns something  (in case the name changes like it did recently)

Good idea.

&gt;&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:122
&gt;&gt; +        JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 1, &amp;notificationNameArgument, 0);
&gt; 
&gt; if you have an if block with a comment (making it more than one line), i believe you should be using brackets

Seems to be inconsistent, I found examples both ways. But brackets is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512568</commentid>
    <comment_count>12</comment_count>
      <attachid>117363</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-12-01 00:22:01 -0800</bug_when>
    <thetext>Created attachment 117363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512811</commentid>
    <comment_count>13</comment_count>
      <attachid>117363</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-12-01 08:58:47 -0800</bug_when>
    <thetext>Comment on attachment 117363
Patch

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

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:37
&gt; +bool AccessibilityController::addNotificationListener(JSValueRef functionCallback) {

bracket should be on the next line

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:52
&gt; +bool AccessibilityController::removeNotificationListener() {

bracket should be on following line

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:68
&gt; +    m_platformElement = nil;

not necessary. this value will be set to nil by default

&gt; LayoutTests/accessibility/notification-listeners.html:66
&gt; +        }, false);

you don&apos;t necessary need to do this after a timeout. just calling runTest() should work just as fine. Scripts don&apos;t run until the page loads anyway

&gt; LayoutTests/accessibility/notification-listeners.html:76
&gt; +&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;

you&apos;re missing the js-test-post include at the bottom of this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517528</commentid>
    <comment_count>14</comment_count>
      <attachid>118417</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2011-12-08 10:31:43 -0800</bug_when>
    <thetext>Created attachment 118417
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517733</commentid>
    <comment_count>15</comment_count>
      <attachid>118417</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-08 13:27:36 -0800</bug_when>
    <thetext>Comment on attachment 118417
Patch for landing

Clearing flags on attachment: 118417

Committed r102378: &lt;http://trac.webkit.org/changeset/102378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517734</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-08 13:27:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116056</attachid>
            <date>2011-11-21 02:44:44 -0800</date>
            <delta_ts>2011-11-21 07:57:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72866-20111121024443.patch</filename>
            <type>text/plain</type>
            <size>44926</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTIxICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcgogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdDsKIC0gKHZvaWQpZGV0YWNoOwogLSAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKysgKHZv
aWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0
OwogCiAvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMg
cG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWRO
b3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzE4OSw3ICszMTg5LDcgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZQogCiAvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50
cyB0byBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMuCiBzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3Vs
ZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0CisrICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdAogewogICAgIGFjY2Vzc2li
aWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zID0gcmVwb3N0OwogfQpAQCAtMzE5OCw3ICsz
MTk4LDcgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOgogewogICAg
IGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgewogICAgICAgICBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIG5pbF07Ci0g
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNh
dGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzp1c2VySW5m
b107CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5v
dGlmaWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0OnNlbGYgdXNlckluZm86
dXNlckluZm9dOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTEtMjEgIERvbWluaWMgTWF6em9uaSAg
PGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIg
c2hvdWxkIHN1cHBvcnQgbGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVsZW1lbnRz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NjYK
KworICAgICAgICBBZGRzIHNvbWUgbWlzc2luZyBub3RpZmljYXRpb25zIHNvIHRoYXQgdGhpcyBu
ZXcgbGF5b3V0IHRlc3QgY2FuIHBhc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVu
ZXJzLmh0bWwKKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
Lmg6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp0b1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgorCiAyMDExLTExLTIwICBLZW5pY2hp
IElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJl
bW92ZSBvbGQgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoKSBhbmQgZmFtaWx5Rm9yQ2hhcnMo
KSBBUElzLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaAkocmV2aXNpb24gMTAwNjQwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBlbnVtIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24gewogICAgIFdlYkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25BY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCwKKyAgICBXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uQXV0b2NvcnJlY3Rpb25PY2N1cmVkLAogICAgIFdlYkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25DaGVja2VkU3RhdGVDaGFuZ2VkLAogICAgIFdlYkFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25DaGlsZHJlbkNoYW5nZWQsCiAgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkLApAQCAtNDUsMTEgKzQ2LDEzIEBAIGVudW0g
V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbiB7CiAgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvblZhbHVlQ2hhbmdlZCwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uU2Ny
b2xsZWRUb0FuY2hvciwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uTGl2ZVJlZ2lv
bkNoYW5nZWQsCisgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbk1lbnVMaXN0SXRlbVNl
bGVjdGVkLAogICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25NZW51TGlzdFZhbHVlQ2hh
bmdlZCwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uUm93Q291bnRDaGFuZ2VkLAog
ICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dDb2xsYXBzZWQsCiAgICAgV2ViQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvblJvd0V4cGFuZGVkLAotICAgIFdlYkFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25JbnZhbGlkCisgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFs
aWRTdGF0dXNDaGFuZ2VkLAorICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25JbnZhbGlk
LAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTAwNjQwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw2ICsxMTksOCBAQCBzdGF0aWMgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbiB0b1dlCiAgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKICAgICBjYXNlIEFYT2JqZWN0
Q2FjaGU6OkFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ6CiAgICAgICAgIHJldHVybiBXZWJBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ7CisgICAgY2FzZSBB
WE9iamVjdENhY2hlOjpBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZDoKKyAgICAgICAgcmV0dXJuIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25BdXRvY29ycmVjdGlvbk9jY3VyZWQ7CiAgICAgY2Fz
ZSBBWE9iamVjdENhY2hlOjpBWENoZWNrZWRTdGF0ZUNoYW5nZWQ6CiAgICAgICAgIHJldHVybiBX
ZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uQ2hlY2tlZFN0YXRlQ2hhbmdlZDsKICAgICBjYXNl
IEFYT2JqZWN0Q2FjaGU6OkFYQ2hpbGRyZW5DaGFuZ2VkOgpAQCAtMTM5LDYgKzE0MSw4IEBAIHN0
YXRpYyBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIHRvV2UKICAgICAgICAgcmV0dXJuIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25TY3JvbGxlZFRvQW5jaG9yOwogICAgIGNhc2UgQVhP
YmplY3RDYWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZDoKICAgICAgICAgcmV0dXJuIFdlYkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25MaXZlUmVnaW9uQ2hhbmdlZDsKKyAgICBjYXNlIEFYT2JqZWN0
Q2FjaGU6OkFYTWVudUxpc3RJdGVtU2VsZWN0ZWQ6CisgICAgICAgIHJldHVybiBXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uTWVudUxpc3RJdGVtU2VsZWN0ZWQ7CiAgICAgY2FzZSBBWE9iamVj
dENhY2hlOjpBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkOgogICAgICAgICByZXR1cm4gV2ViQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbk1lbnVMaXN0VmFsdWVDaGFuZ2VkOwogICAgIGNhc2UgQVhPYmpl
Y3RDYWNoZTo6QVhSb3dDb3VudENoYW5nZWQ6CkBAIC0xNDcsNiArMTUxLDggQEAgc3RhdGljIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24gdG9XZQogICAgICAgICByZXR1cm4gV2ViQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvblJvd0NvbGxhcHNlZDsKICAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6
OkFYUm93RXhwYW5kZWQ6CiAgICAgICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uUm93RXhwYW5kZWQ7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWEludmFsaWRTdGF0dXND
aGFuZ2VkOgorICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFs
aWRTdGF0dXNDaGFuZ2VkOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFsaWQ7
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMDA4OTEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2MCBAQAorMjAxMS0xMS0yMSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xl
LmNvbT4KKworICAgICAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBzaG91bGQgc3VwcG9ydCBs
aXN0ZW5pbmcgdG8gbm90aWZpY2F0aW9ucyBvbiBhbGwgZWxlbWVudHMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjg2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIgYW5kIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIG1ldGhvZHMKKyAgICAgICAgdG8g
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIsIHRvIGxpc3RlbiB0byBub3RpZmljYXRpb25zIG9uIGFu
eSBlbGVtZW50CisgICAgICAgIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMgZWxlbWVudC4gTWFjIGFu
ZCBDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbnMgYXJlCisgICAgICAgIGJvdGggY29udGFpbmVkIGlu
IHRoaXMgY2hhbmdlLgorCisgICAgICAgIE9uIE1hYywgcmVmYWN0b3JzIEFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyIGludG8gaXRzIG93bgorICAgICAgICBzb3VyY2UgZmlsZSB0aGF0
IGNhbiBiZSB1c2VkIGJ5IGJvdGggQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgYW5kCisgICAgICAg
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuCisKKyAgICAgICAgT24gQ2hyb21pdW0sIGFkZHMgc29t
ZSBtaXNzaW5nIG5vdGlmaWNhdGlvbnMgdG8gYWxsb3cgdGhlIHRlc3QgdG8KKyAgICAgICAgcGFz
cy4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMu
aHRtbAorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAg
IChyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
ayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJWaWV3SG9zdDo6cG9zdEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIuaDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTlNTdHJpbmcgY3Jl
YXRlSlNTdHJpbmdSZWZdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIgaW5pdFdpdGhQbGF0Zm9ybUVsZW1lbnQ6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGluaXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzXSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGRlYWxsb2NdKToKKyAgICAg
ICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9zdGFydE9ic2Vydmlu
Z10pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZp
Y2F0aW9uUmVjZWl2ZWQ6XSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorCiAyMDExLTExLTIxICBUYWth
c2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2UgSG9z
dCgpLnBvcnRfZmFjdG9yeSBpbnN0ZWFkIG9mIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZh
Y3RvcnkuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDI0
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEVsZW1lbnRBdFBvaW50Q2FsbGIKICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250
ZXh0LCBjb250cm9sbGVyLT5lbGVtZW50QXRQb2ludCh4LCB5KSk7CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlUmVmIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgZmFsc2UpOworICAgIAorICAgIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIEpTT2JqZWN0
UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKTsKKyAgICBib29sIHN1Y2NlZWRlZCA9IGNvbnRyb2xsZXItPmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIHN1Y2NlZWRlZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNhdGlv
bkxpc3RlbmVyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpnZXRKU0NsYXNzKCkKIHsKICAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBz
dGF0aWNGdW5jdGlvbnNbXSA9IHsKQEAgLTEwNSw2ICsxMjMsOCBAQCBKU0NsYXNzUmVmIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpnZXRKCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzIiwgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImVsZW1lbnRBdFBvaW50IiwgZ2V0RWxlbWVudEF0UG9pbnRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIsIGFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDA2
NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKTsKIAotICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIC8v
IEdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIsIGNhcHR1cmVzIG5vdGlmaWNhdGlvbnMgb24g
YW55IG9iamVjdC4KKyAgICBib29sIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVm
IGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIo
KTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAvLyBIZWxwZXIgbWV0aG9kcyBzbyB0aGlzIGNs
YXNzIGNhbiBhZGQgdGhlIGxpc3RlbmVycyBvbiBiZWhhbGYgb2YgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC4KKyAgICBib29sIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKFBsYXRmb3JtVUlFbGVtZW50
LCBKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKTsKICAgICB2b2lkIG5vdGlmaWNhdGlvblJl
Y2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYgZXZlbnROYW1lKTsK
KyNlbmRpZgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsK
QEAgLTY5LDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAgSFdJTkVWRU5USE9PSyBtX25vdGlmaWNh
dGlvbnNFdmVudEhvb2s7CiAgICAgSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RS
ZWY+IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgTm90aWZpY2F0aW9uSGFuZGxlciBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXI7Cisj
ZW5kaWYKIH07CiAKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcl9oCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAKIAkJNURCOUFDOUYwRjcyMkMzNjAwNjg0NjQxIC8q
IFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJCTVEQjlBQ0EwMEY3MjJDMzYwMDY4NDY0
MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8q
IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk1REU4QUU0NDEzQTJDMTU5MDBE
NkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFOEFFNDMxM0EyQzE1ODAwRDZBMzdEIC8q
IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKKwkJODAwNDVBRUQxNDc3MThFNzAw
ODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFFQjE0NzcxOEU3MDA4Mjkw
QTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLzsgfTsKKwkJODAwNDVB
RUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODAwNDVBRUMx
NDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICov
OyB9OwogCQk4NDY1RTJDNzBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY1RTJDNjBG
RkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTkzM0JGNUFC
MEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNCRjVBOTBGOTNGQTVDMDAwRjA0NDEg
LyogUGxhaW5UZXh0Q29udHJvbGxlci5oICovOyB9OwogCQk5MzNCRjVBQzBGOTNGQTVDMDAwRjA0
NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0JGNUFBMEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRD
b250cm9sbGVyLm1tICovOyB9OwpAQCAtMjU4LDYgKzI2MCw4IEBACiAJCTUzQ0JCODMwMTM0RTQy
RjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDQkI4MzExMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1Jl
ZHVuZGFuY3lDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDeWNsaWNS
ZWR1bmRhbmN5Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURFOEFFNDMx
M0EyQzE1ODAwRDZBMzdEIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9B
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4MDA0NUFFQzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1cHBvcnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2Vi
S2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTMzQkY1QTkwRjkzRkE1QzAwMEYwNDQx
IC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGxhaW5UZXh0Q29udHJvbGxlci5oOyBwYXRoID0gbWFjL1BsYWluVGV4dENvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQzOCw2ICs0NDIsOCBAQAogCQkxNDIy
QTI2OTBBRjZGNDUyMDBFMUE4ODMgLyogQ29udHJvbGxlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovLAorCQkJCTgwMDQ1QUVDMTQ3NzE4
RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLywKIAkJ
CQlCQ0QwOEIzOTBFMTA1N0VGMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3Bw
ICovLAogCQkJCUJDRDA4QTU4MEUxMDQ5NkIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oICovLAogCQkJCUJDRDA4QjcwMEUxMDU5RDIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlck1hYy5tbSAqLywKQEAgLTY3OSw2ICs2ODUsNyBAQAogCQkJCTI5Q0ZCQTEwMTIy
NzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxN0RBQTFEMTM3QjNFMjQwMDdDNTdGQiAvKiBXZWJDb3Jl
VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTgwMDQ1QUVEMTQ3NzE4RTcwMDgyOTBB
OCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC04NzksNiArODg2LDcgQEAKIAkJCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMkUxMjI3M0Ex
MDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk4MDA0NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsOCBAQCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvCiB7CiAK
ICAgICBiaW5kTWV0aG9kKCJsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzIiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2spOworICAgIGJpbmRNZXRo
b2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90
aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7CiAKICAgICBiaW5kUHJvcGVydHkoImZvY3VzZWRF
bGVtZW50IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNh
bGxiYWNrKTsKICAgICBiaW5kUHJvcGVydHkoInJvb3RFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyb290RWxlbWVudEdldHRlckNhbGxiYWNrKTsKQEAgLTkzLDggKzk1LDE5IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNob3VsZExvZ0EKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0JiB0YXJnZXQsIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUp
CiB7CisgICAgLy8gQ2FsbCBub3RpZmljYXRpb24gbGlzdGVuZXJzIG9uIHRoZSBlbGVtZW50Lgog
ICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnRzLmdldE9yQ3Jl
YXRlKHRhcmdldCk7CiAgICAgZWxlbWVudC0+bm90aWZpY2F0aW9uUmVjZWl2ZWQobm90aWZpY2F0
aW9uTmFtZSk7CisKKyAgICAvLyBDYWxsIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXJzLgor
ICAgIHNpemVfdCBjYWxsYmFja0NvdW50ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAg
ICAgIENwcFZhcmlhbnQgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0uc2V0KCpl
bGVtZW50LT5nZXRBc0NwcFZhcmlhbnQoKSk7CisgICAgICAgIGFyZ3VtZW50c1sxXS5zZXQobm90
aWZpY2F0aW9uTmFtZSk7CisgICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OworICAgICAg
ICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgMiwg
aW52b2tlUmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCkBAIC0xMDMsNiArMTE2LDIzIEBAIHZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2kKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsK
KyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
ICAgICByZXN1bHQtPnNldCgqKGdldEZvY3VzZWRFbGVtZW50KCktPmdldEFzQ3BwVmFyaWFudCgp
KSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDggQEAgcHJpdmF0ZToKICAgICAvLyBCb3VuZCBtZXRob2RzIGFuZCBw
cm9wZXJ0aWVzCiAgICAgdm9pZCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZmFsbGJhY2tDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGROb3Rp
ZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgdm9pZCBmb2N1c2VkRWxlbWVu
dEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwpAQCAtNzMsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgbV9lbGVtZW50czsKIAorICAgIHN0ZDo6dmVjdG9y
PENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzOworCiAgICAgVGVzdFNoZWxsKiBt
X3NoZWxsOwogfTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmNwcAkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsNiArNTYxLDkg
QEAgdm9pZCBXZWJWaWV3SG9zdDo6cG9zdEFjY2Vzc2liaWxpdHlOb3RpZgogICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkOgogICAgICAg
ICBub3RpZmljYXRpb25OYW1lID0gIkFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkIjsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uQXV0b2NvcnJlY3Rp
b25PY2N1cmVkOgorICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkF1dG9jb3JyZWN0aW9uT2Nj
dXJlZCI7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkNoZWNrZWRTdGF0ZUNoYW5nZWQ6CiAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQ2hl
Y2tlZFN0YXRlQ2hhbmdlZCI7CiAgICAgICAgIGJyZWFrOwpAQCAtNTkxLDYgKzU5NCw5IEBAIHZv
aWQgV2ViVmlld0hvc3Q6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWYKICAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25MaXZlUmVnaW9uQ2hhbmdlZDoKICAgICAgICAgbm90aWZpY2F0
aW9uTmFtZSA9ICJMaXZlUmVnaW9uQ2hhbmdlZCI7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbk1lbnVMaXN0SXRlbVNlbGVjdGVkOgorICAgICAg
ICBub3RpZmljYXRpb25OYW1lID0gIk1lbnVMaXN0VmFsdWVJdGVtU2VsZWN0ZWQiOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25NZW51TGlzdFZh
bHVlQ2hhbmdlZDoKICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJNZW51TGlzdFZhbHVlQ2hh
bmdlZCI7CiAgICAgICAgIGJyZWFrOwpAQCAtNjAzLDYgKzYwOSw5IEBAIHZvaWQgV2ViVmlld0hv
c3Q6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWYKICAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25Sb3dFeHBhbmRlZDoKICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJSb3dFeHBh
bmRlZCI7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkludmFsaWRTdGF0dXNDaGFuZ2VkOgorICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIklu
dmFsaWRTdGF0dXNDaGFuZ2VkIjsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgbm90aWZpY2F0aW9uTmFtZSA9ICJVbmtub3duTm90aWZpY2F0aW9uIjsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDEwICs5NywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRM
b2dBY2NlCiAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwogfQogCi12b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihQbGF0Zm9y
bVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKIHsKIH0KIAotdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQs
IGNvbnN0IHN0ZDo6c3RyaW5nJikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHsKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9u
IDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiRHVt
cFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCiAKKyNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CkBAIC0zNSwxMSArMzYsMTQgQEAKICNpbXBvcnQg
PFdlYktpdC9XZWJIVE1MVmlldy5oPgogCiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIoKQorICAgIDogbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKDAp
CiB7CiB9CiAKIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKQogeworICAgIC8vIFRoZSBub3RpZmljYXRpb24gaGFuZGxlciBzaG91bGQgYmUgbmlsIGJl
Y2F1c2UgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxl
ZCBpbiB0aGUgdGVzdC4KKyAgICBBU1NFUlQoIW1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcik7
CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVs
ZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKQEAgLTgxLDEwICs4NSwyNiBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2NlCiB7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKFBsYXRmb3JtVUlFbGVtZW50LCBK
U09iamVjdFJlZikKK2Jvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCiB7CisgICAgaWYgKCFmdW5j
dGlvbkNhbGxiYWNrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgLy8gTWFjIHByb2dy
YW1tZXJzIHNob3VsZCBub3QgYmUgYWRkaW5nIG1vcmUgdGhhbiBvbmUgZ2xvYmFsIG5vdGlmaWNh
dGlvbiBsaXN0ZW5lci4KKyAgICAvLyBPdGhlciBwbGF0Zm9ybXMgbWF5IGJlIGRpZmZlcmVudC4K
KyAgICBpZiAobV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gW1tBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBhbGxvY10gaW5pdEFuZExpc3RlblRvQWxsRWxlbWVudHNdOworICAg
IFttX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6ZnVuY3Rpb25DYWxsYmFj
a107CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQsIGNvbnN0IHN0ZDo6c3Ry
aW5nJikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkKIHsKKyAgICAvLyBNYWMgcHJvZ3JhbW1lcnMgc2hvdWxkIG5vdCBiZSB0cnlpbmcg
dG8gcmVtb3ZlIGEgbGlzdGVuZXIgdGhhdCdzIGFscmVhZHkgcmVtb3ZlZC4KKyAgICBBU1NFUlQo
bV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKTsKKworICAgIFttX2dsb2JhbE5vdGlmaWNhdGlv
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gbmls
OwogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcl9oCisK
KyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVj
dFJlZi5oPgorCitAaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIDog
TlNPYmplY3QgeworICAgIGlkIG1fcGxhdGZvcm1FbGVtZW50OworICAgIEpTT2JqZWN0UmVmIG1f
bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjazsKK30KKworLSAoaWQpaW5pdFdpdGhQbGF0Zm9y
bUVsZW1lbnQ6KGlkKXBsYXRmb3JtRWxlbWVudDsKKy0gKGlkKWluaXRBbmRMaXN0ZW5Ub0FsbEVs
ZW1lbnRzOworLSAodm9pZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2s7CistICh2
b2lkKV9zdGFydE9ic2VydmluZzsKKy0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKKworQGVuZAorCisjZW5kaWYgLy8gQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQko
cmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oIgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2lt
cG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViVHlwZXNJbnRlcm5h
bC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckFkZGl0aW9ucykKKysgKHZvaWQpYWNjZXNzaWJp
bGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0OworQGVuZAorCitA
aW50ZXJmYWNlIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFkZGl0aW9ucykKKy0gKEpTU3RyaW5nUmVm
KWNyZWF0ZUpTU3RyaW5nUmVmOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpT
U3RyaW5nUmVmQWRkaXRpb25zKQorCistIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZgor
eworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpc2Vs
Zik7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyCisKKy0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVs
ZW1lbnQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIG1fcGxhdGZvcm1FbGVtZW50
ID0gcGxhdGZvcm1FbGVtZW50OworICAgIFtzZWxmIF9zdGFydE9ic2VydmluZ107CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IG5pbDsKKyAgICBb
c2VsZiBfc3RhcnRPYnNlcnZpbmddOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGZdOworICAgIEpTVmFsdWVVbnByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxD
b250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNh
dGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSAwOworICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAodm9pZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2sKK3sKKyAgICBpZiAo
IWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgCisgICAgLy8gUmVsZWFzZSB0aGUgb2xkIGNh
bGxiYWNrLgorICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spIAorICAgICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayk7CisgICAgCisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrID0gY2FsbGJhY2s7CisgICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxD
b250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKK30KKworLSAodm9pZClf
c3RhcnRPYnNlcnZpbmcKK3sKKyAgICAvLyBPbmNlIHdlIHN0YXJ0IHJlcXVlc3Rpbmcgbm90aWZp
Y2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgorICAgIC8v
IFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5p
bmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKKyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBjYW4gaWdub3JlIGV2ZW50cyBpdCBkb2Vzbid0IGNhcmUgYWJvdXQu
CisgICAgW05TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIi
KSBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOworICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZp
Y2F0aW9uIiBvYmplY3Q6bmlsXTsKK30KKworLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgTlNTdHJpbmcgKm5vdGlmaWNh
dGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZp
Y2F0aW9uTmFtZSJdOworICAgIGlmICghbm90aWZpY2F0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCAmJiBtX3BsYXRmb3JtRWxlbWVudCAhPSBbbm90
aWZpY2F0aW9uIG9iamVjdF0pCisgICAgICAgIHJldHVybjsKKworICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRl
SlNTdHJpbmdSZWZdKTsKKyAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9
IEpTVmFsdWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0
aW9uLmdldCgpKTsKKyAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpCisgICAgICAgIC8vIExpc3Rl
bmVyIGZvciBvbmUgZWxlbWVudCBqdXN0IGdldHMgb25lIGFyZ3VtZW50LCB0aGUgbm90aWZpY2F0
aW9uIG5hbWUuCisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oW21haW5GcmFtZSBnbG9i
YWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrLCAwLCAxLCAmbm90aWZp
Y2F0aW9uTmFtZUFyZ3VtZW50LCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQSBnbG9iYWwg
bGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCBhbmQgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFzIGFy
Z3VtZW50cy4KKyAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07CisgICAgICAgIGFyZ3Vt
ZW50c1swXSA9IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1ha2VKU0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudChb
bm90aWZpY2F0aW9uIG9iamVjdF0pKTsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gbm90aWZpY2F0
aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJh
bWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMiwg
YXJndW1lbnRzLCAwKTsKKyAgICB9Cit9CisKK0BlbmQKKwpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlz
aW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmgiCiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgpAQCAtNjAsNyArNjEs
NiBAQCB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiCiAKIEBpbnRlcmZh
Y2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCiAtIChOU0FycmF5ICop
YWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBp
bmRleDooTlNVSW50ZWdlcilpbmRleCBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudDsKLS0g
KHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVw
b3N0OwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOihpZCljaGlsZDsK
IC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5n
ICopYXR0cmlidXRlOwogQGVuZApAQCAtODgsNjYgKzg4LDYgQEAgLSAoSlNTdHJpbmdSZWYpY3Jl
YXRlSlNTdHJpbmdSZWYKIAogQGVuZAogCi1AaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyIDogTlNPYmplY3QKLXsKLSAgICBpZCBtX3BsYXRmb3JtRWxlbWVudDsKLSAg
ICBKU09iamVjdFJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2s7Ci19Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyCi0KLS0g
KGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1lbnQKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotCi0gICAgbV9wbGF0Zm9ybUVsZW1lbnQgPSBwbGF0Zm9ybUVs
ZW1lbnQ7Ci0gICAgCi0gICAgLy8gT25jZSBhbiBvYmplY3Qgc3RhcnRzIHJlcXVlc3Rpbmcgbm90
aWZpY2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgotICAg
IC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3RzIHR1
cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKLSAgICAvLyBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4ganVzdCBsaXN0ZW4gd2hlbiB0aGV5IHdhbnQgdG8uCi0g
ICAgW21fcGxhdGZvcm1FbGVtZW50IGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmlj
YXRpb25zOllFU107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6
KSBuYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWxdOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0gCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotICAgIEpTVmFsdWVVbnByb3Rl
Y3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrKTsKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSAwOwotICAgIAotICAg
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlv
bk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0
aW9uTmFtZSJdOwotICAgIGlmICghbm90aWZpY2F0aW9uTmFtZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwg
W25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwganNO
b3RpZmljYXRpb24uZ2V0KCkpOwotICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oW21haW5GcmFt
ZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrLCAwLCAxLCAm
YXJndW1lbnQsIDApOwotfQotCi0tICh2b2lkKXNldENhbGxiYWNrOihKU09iamVjdFJlZiljYWxs
YmFjawotewotICAgIGlmICghY2FsbGJhY2spCi0gICAgICAgIHJldHVybjsKLSAKLSAgICAvLyBS
ZWxlYXNlIHRoZSBvbGQgY2FsbGJhY2suCi0gICAgaWYgKG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjaykgCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250
ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLSAgICAKLSAgICBtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICBKU1ZhbHVlUHJvdGVjdChb
bWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sp
OwotfQotCi1AZW5kCi0KIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50
KQogICAgICwgbV9ub3RpZmljYXRpb25IYW5kbGVyKDApCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAJKHJl
dmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw2ICsyODEsMTUgQEAgc3Rh
dGljIENPTVB0cjxJQWNjZXNzaWJsZUNvbXBhcmFibGU+IGNvbQogICAgIHJldHVybiBjb21wYXJh
YmxlOwogfQogCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25M
aXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKQoreworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmlj
YXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2
ZW50TmFtZSkKIHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0
UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAh
PSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTAwODkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTEtMTEtMjEgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgc2hvdWxkIHN1cHBvcnQg
bGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVsZW1lbnRzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbm90aWZp
Y2F0aW9uLWxpc3RlbmVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTEtMTEtMjEgIFl1dGEg
S2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1F0XSBXZWJTb2NrZXQg
Y2xvc2UgdGVzdHMgYXJlIGZhaWxpbmcKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGZ1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYSBub3Rp
ZmljYXRpb24gbGlzdGVuZXIgb24gYW4gZWxlbWVudCBvbmx5IGxpc3RlbnMgdG8gdGhhdCBvbmUg
ZWxlbWVudCwgYW5kIHRoYXQgYSBnbG9iYWwgbm90aWZpY2F0aW9uIGxpc3RlbmVyIGxpc3RlbnMg
dG8gYWxsIG5vdGlmaWNhdGlvbnMuIik7CisKKyAgICAgICAgd2luZG93LnNlbGVjdE5vdGlmaWNh
dGlvbkNvdW50ID0gMDsKKyAgICAgICAgd2luZG93LnNsaWRlck5vdGlmaWNhdGlvbkNvdW50ID0g
MDsKKyAgICAgICAgd2luZG93Lmdsb2JhbE5vdGlmaWNhdGlvbkNvdW50ID0gMDsKKworICAgICAg
ICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZWN0IikuZm9jdXMoKTsKKyAgICAgICAgICAgIHdpbmRv
dy5zZWxlY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAg
ICAgICAgIHNlbGVjdC5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihmdW5jdGlvbihub3RpZmljYXRp
b24pIHsKKyAgICAgICAgICAgICAgICBzZWxlY3ROb3RpZmljYXRpb25Db3VudCsrOworICAgICAg
ICAgICAgICAgIGRlYnVnKCJTRUxFQ1QgIiArIG5vdGlmaWNhdGlvbiArICI8YnI+Iik7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRl
ciIpLmZvY3VzKCk7CisgICAgICAgICAgICB3aW5kb3cuc2xpZGVyID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgICAgICBzbGlkZXIuYWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoZnVuY3Rpb24obm90aWZpY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgc2xp
ZGVyTm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiU0xJREVSICIg
KyBub3RpZmljYXRpb24gKyAiPGJyPiIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9u
KGVsZW1lbnQsIG5vdGlmaWNhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmlz
RXF1YWwoc2xpZGVyKSB8fCBlbGVtZW50LmlzRXF1YWwoc2VsZWN0KSkgeworICAgICAgICAgICAg
ICAgICAgICBnbG9iYWxOb3RpZmljYXRpb25Db3VudCsrOworICAgICAgICAgICAgICAgICAgICBk
ZWJ1ZygiR0xPQkFMICIgKyBub3RpZmljYXRpb24gKyAiIG9uIGVsZW1lbnQgd2l0aCByb2xlICIg
KyBlbGVtZW50LnJvbGUgKyAiPGJyPiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciBhICJpbnZh
bGlkIHN0YXR1cyBjaGFuZ2VkIiBub3RpZmljYXRpb24gb24gdGhlIHNlbGVjdC4KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVjdCIpLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZh
bGlkIiwgInRydWUiKTsKKworICAgICAgICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIGEgInZhbHVl
IGNoYW5nZWQiIG5vdGlmaWNhdGlvbiBvbiB0aGUgc2xpZGVyLgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgic2xpZGVyIikuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IiwgIjYi
KTsKKworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHNob3VsZEJlKCJzZWxlY3ROb3RpZmljYXRpb25Db3VudCIsICIxIik7CisgICAgICAgICAgICBz
aG91bGRCZSgic2xpZGVyTm90aWZpY2F0aW9uQ291bnQiLCAiMSIpOworICAgICAgICAgICAgc2hv
dWxkQmUoImdsb2JhbE5vdGlmaWNhdGlvbkNvdW50IiwgIjIiKTsKKworICAgICAgICAgICAgZGVi
dWcoIjxiciAvPjxzcGFuIGNsYXNzPSdwYXNzJz5URVNUIENPTVBMRVRFPC9zcGFuPiIpOworCisg
ICAgICAgICAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAg
ICAgICAgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3QucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIo
KTsKKyAgICAgICAgICAgICAgICBzbGlkZXIucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgIH0sIDEwKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KHJ1blRlc3QsIDEwKTsKKyAgICAgICAgfSwg
ZmFsc2UpOworICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxzZWxlY3QgaWQ9
InNlbGVjdCIgdmFsdWU9IlNlbGVjdCI+PG9wdGlvbj5BPG9wdGlvbj5CPC9zZWxlY3Q+CisKKzxk
aXYgaWQ9InNsaWRlciIgdGFiaW5kZXg9IjAiIHJvbGU9InNsaWRlciIgYXJpYS12YWx1ZW5vdz0i
NSI+U2xpZGVyPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vYWNjZXNz
aWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0
aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAK
KworU2xpZGVyCitUaGlzIHRlc3RzIHRoYXQgYSBub3RpZmljYXRpb24gbGlzdGVuZXIgb24gYW4g
ZWxlbWVudCBvbmx5IGxpc3RlbnMgdG8gdGhhdCBvbmUgZWxlbWVudCwgYW5kIHRoYXQgYSBnbG9i
YWwgbm90aWZpY2F0aW9uIGxpc3RlbmVyIGxpc3RlbnMgdG8gYWxsIG5vdGlmaWNhdGlvbnMuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitTRUxFQ1QgSW52YWxpZFN0YXR1c0NoYW5n
ZWQKKworR0xPQkFMIEludmFsaWRTdGF0dXNDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFY
Um9sZTogQVhQb3BVcEJ1dHRvbgorCitTTElERVIgVmFsdWVDaGFuZ2VkCisKK0dMT0JBTCBWYWx1
ZUNoYW5nZWQgb24gZWxlbWVudCB3aXRoIHJvbGUgQVhSb2xlOiBBWFNsaWRlcgorCitQQVNTIHNl
bGVjdE5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1Mgc2xpZGVyTm90aWZpY2F0aW9uQ291bnQg
aXMgMQorUEFTUyBnbG9iYWxOb3RpZmljYXRpb25Db3VudCBpcyAyCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDEwMDY0MCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiAr
NDAwLDcgQEAgYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAogYWNjZXNzaWJp
bGl0eS9sZWdlbmQuaHRtbAogYWNjZXNzaWJpbGl0eS9saXN0cy5odG1sCiBhY2Nlc3NpYmlsaXR5
L2xvYWRpbmctaWZyYW1lLXVwZGF0ZXMtYXh0cmVlLmh0bWwKK2FjY2Vzc2liaWxpdHkvbm90aWZp
Y2F0aW9uLWxpc3RlbmVycy5odG1sCiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRt
bAogYWNjZXNzaWJpbGl0eS9wbGFjZWhvbGRlci5odG1sCiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5o
dG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmlj
YXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIxIEBACisKK1NsaWRlcgorVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxp
c3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFu
ZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3Rp
ZmljYXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU0VMRUNUIEFYSW52
YWxpZFN0YXR1c0NoYW5nZWQKKworR0xPQkFMIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQgb24gZWxl
bWVudCB3aXRoIHJvbGUgQVhSb2xlOiBBWFBvcFVwQnV0dG9uCisKK1NMSURFUiBBWFZhbHVlQ2hh
bmdlZAorCitHTE9CQUwgQVhWYWx1ZUNoYW5nZWQgb24gZWxlbWVudCB3aXRoIHJvbGUgQVhSb2xl
OiBBWFNsaWRlcgorCitQQVNTIHNlbGVjdE5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1Mgc2xp
ZGVyTm90aWZpY2F0aW9uQ291bnQgaXMgMQorUEFTUyBnbG9iYWxOb3RpZmljYXRpb25Db3VudCBp
cyAyCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJl
dmlzaW9uIDEwMDY0MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODAsNiArNTgwLDcgQEAgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50
Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9jaGlsZHJlbi1lbGVtZW50cy5odG1sCiBhY2Nlc3NpYmls
aXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sCiBhY2Nlc3NpYmls
aXR5L25vbi1uYXRpdmUtaW1hZ2UtY3Jhc2guaHRtbAorYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRp
b24tbGlzdGVuZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvb25jbGljay1oYW5kbGVycy5odG1sCiBh
Y2Nlc3NpYmlsaXR5L2FyaWEtb3B0aW9uLXJvbGUuaHRtbAogYWNjZXNzaWJpbGl0eS9wbGFjZWhv
bGRlci5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116088</attachid>
            <date>2011-11-21 07:57:33 -0800</date>
            <delta_ts>2011-11-21 11:45:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72866-20111121075730.patch</filename>
            <type>text/plain</type>
            <size>44861</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTIxICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcgogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdDsKIC0gKHZvaWQpZGV0YWNoOwogLSAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKysgKHZv
aWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0
OwogCiAvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMg
cG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWRO
b3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzE4OSw3ICszMTg5LDcgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZQogCiAvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50
cyB0byBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMuCiBzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3Vs
ZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0CisrICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdAogewogICAgIGFjY2Vzc2li
aWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zID0gcmVwb3N0OwogfQpAQCAtMzE5OCw3ICsz
MTk4LDcgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOgogewogICAg
IGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgewogICAgICAgICBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIG5pbF07Ci0g
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNh
dGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzp1c2VySW5m
b107CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5v
dGlmaWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0OnNlbGYgdXNlckluZm86
dXNlckluZm9dOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTEtMjEgIERvbWluaWMgTWF6em9uaSAg
PGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIg
c2hvdWxkIHN1cHBvcnQgbGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVsZW1lbnRz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NjYK
KworICAgICAgICBBZGRzIHNvbWUgbWlzc2luZyBub3RpZmljYXRpb25zIHNvIHRoYXQgdGhpcyBu
ZXcgbGF5b3V0IHRlc3QgY2FuIHBhc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVu
ZXJzLmh0bWwKKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
Lmg6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp0b1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgorCiAyMDExLTExLTIwICBLZW5pY2hp
IElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJl
bW92ZSBvbGQgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoKSBhbmQgZmFtaWx5Rm9yQ2hhcnMo
KSBBUElzLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaAkocmV2aXNpb24gMTAwNjQwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBlbnVtIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24gewogICAgIFdlYkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25BY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCwKKyAgICBXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uQXV0b2NvcnJlY3Rpb25PY2N1cmVkLAogICAgIFdlYkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25DaGVja2VkU3RhdGVDaGFuZ2VkLAogICAgIFdlYkFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25DaGlsZHJlbkNoYW5nZWQsCiAgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkLApAQCAtNDUsMTEgKzQ2LDEzIEBAIGVudW0g
V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbiB7CiAgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvblZhbHVlQ2hhbmdlZCwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uU2Ny
b2xsZWRUb0FuY2hvciwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uTGl2ZVJlZ2lv
bkNoYW5nZWQsCisgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbk1lbnVMaXN0SXRlbVNl
bGVjdGVkLAogICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25NZW51TGlzdFZhbHVlQ2hh
bmdlZCwKICAgICBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uUm93Q291bnRDaGFuZ2VkLAog
ICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dDb2xsYXBzZWQsCiAgICAgV2ViQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvblJvd0V4cGFuZGVkLAotICAgIFdlYkFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25JbnZhbGlkCisgICAgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFs
aWRTdGF0dXNDaGFuZ2VkLAorICAgIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25JbnZhbGlk
LAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTAwNjQwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw2ICsxMTksOCBAQCBzdGF0aWMgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbiB0b1dlCiAgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKICAgICBjYXNlIEFYT2JqZWN0
Q2FjaGU6OkFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ6CiAgICAgICAgIHJldHVybiBXZWJBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ7CisgICAgY2FzZSBB
WE9iamVjdENhY2hlOjpBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZDoKKyAgICAgICAgcmV0dXJuIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25BdXRvY29ycmVjdGlvbk9jY3VyZWQ7CiAgICAgY2Fz
ZSBBWE9iamVjdENhY2hlOjpBWENoZWNrZWRTdGF0ZUNoYW5nZWQ6CiAgICAgICAgIHJldHVybiBX
ZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uQ2hlY2tlZFN0YXRlQ2hhbmdlZDsKICAgICBjYXNl
IEFYT2JqZWN0Q2FjaGU6OkFYQ2hpbGRyZW5DaGFuZ2VkOgpAQCAtMTM5LDYgKzE0MSw4IEBAIHN0
YXRpYyBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIHRvV2UKICAgICAgICAgcmV0dXJuIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25TY3JvbGxlZFRvQW5jaG9yOwogICAgIGNhc2UgQVhP
YmplY3RDYWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZDoKICAgICAgICAgcmV0dXJuIFdlYkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25MaXZlUmVnaW9uQ2hhbmdlZDsKKyAgICBjYXNlIEFYT2JqZWN0
Q2FjaGU6OkFYTWVudUxpc3RJdGVtU2VsZWN0ZWQ6CisgICAgICAgIHJldHVybiBXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uTWVudUxpc3RJdGVtU2VsZWN0ZWQ7CiAgICAgY2FzZSBBWE9iamVj
dENhY2hlOjpBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkOgogICAgICAgICByZXR1cm4gV2ViQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbk1lbnVMaXN0VmFsdWVDaGFuZ2VkOwogICAgIGNhc2UgQVhPYmpl
Y3RDYWNoZTo6QVhSb3dDb3VudENoYW5nZWQ6CkBAIC0xNDcsNiArMTUxLDggQEAgc3RhdGljIFdl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24gdG9XZQogICAgICAgICByZXR1cm4gV2ViQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvblJvd0NvbGxhcHNlZDsKICAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6
OkFYUm93RXhwYW5kZWQ6CiAgICAgICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uUm93RXhwYW5kZWQ7CisgICAgY2FzZSBBWE9iamVjdENhY2hlOjpBWEludmFsaWRTdGF0dXND
aGFuZ2VkOgorICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFs
aWRTdGF0dXNDaGFuZ2VkOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFsaWQ7
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMDA4OTEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2MCBAQAorMjAxMS0xMS0yMSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xl
LmNvbT4KKworICAgICAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBzaG91bGQgc3VwcG9ydCBs
aXN0ZW5pbmcgdG8gbm90aWZpY2F0aW9ucyBvbiBhbGwgZWxlbWVudHMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjg2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIgYW5kIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIG1ldGhvZHMKKyAgICAgICAgdG8g
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIsIHRvIGxpc3RlbiB0byBub3RpZmljYXRpb25zIG9uIGFu
eSBlbGVtZW50CisgICAgICAgIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMgZWxlbWVudC4gTWFjIGFu
ZCBDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbnMgYXJlCisgICAgICAgIGJvdGggY29udGFpbmVkIGlu
IHRoaXMgY2hhbmdlLgorCisgICAgICAgIE9uIE1hYywgcmVmYWN0b3JzIEFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyIGludG8gaXRzIG93bgorICAgICAgICBzb3VyY2UgZmlsZSB0aGF0
IGNhbiBiZSB1c2VkIGJ5IGJvdGggQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgYW5kCisgICAgICAg
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuCisKKyAgICAgICAgT24gQ2hyb21pdW0sIGFkZHMgc29t
ZSBtaXNzaW5nIG5vdGlmaWNhdGlvbnMgdG8gYWxsb3cgdGhlIHRlc3QgdG8KKyAgICAgICAgcGFz
cy4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMu
aHRtbAorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAg
IChyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
ayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJWaWV3SG9zdDo6cG9zdEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIuaDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTlNTdHJpbmcgY3Jl
YXRlSlNTdHJpbmdSZWZdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIgaW5pdFdpdGhQbGF0Zm9ybUVsZW1lbnQ6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGluaXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzXSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGRlYWxsb2NdKToKKyAgICAg
ICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9zdGFydE9ic2Vydmlu
Z10pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZp
Y2F0aW9uUmVjZWl2ZWQ6XSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorCiAyMDExLTExLTIxICBUYWth
c2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2UgSG9z
dCgpLnBvcnRfZmFjdG9yeSBpbnN0ZWFkIG9mIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmZh
Y3RvcnkuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDI0
IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEVsZW1lbnRBdFBvaW50Q2FsbGIKICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250
ZXh0LCBjb250cm9sbGVyLT5lbGVtZW50QXRQb2ludCh4LCB5KSk7CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlUmVmIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50ICE9IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgZmFsc2UpOworICAgIAorICAgIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIEpTT2JqZWN0
UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKTsKKyAgICBib29sIHN1Y2NlZWRlZCA9IGNvbnRyb2xsZXItPmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIHN1Y2NlZWRlZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNhdGlv
bkxpc3RlbmVyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpnZXRKU0NsYXNzKCkKIHsKICAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBz
dGF0aWNGdW5jdGlvbnNbXSA9IHsKQEAgLTEwNSw2ICsxMjMsOCBAQCBKU0NsYXNzUmVmIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpnZXRKCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzIiwgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImVsZW1lbnRBdFBvaW50IiwgZ2V0RWxlbWVudEF0UG9pbnRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIsIGFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDA2
NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKTsKIAorICAgIC8vIEdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVu
ZXIsIGNhcHR1cmVzIG5vdGlmaWNhdGlvbnMgb24gYW55IG9iamVjdC4KKyAgICBib29sIGFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIHZv
aWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICAvLyBIZWxwZXIgbWV0aG9kcyBzbyB0aGlzIGNsYXNzIGNhbiBhZGQgdGhlIGxpc3RlbmVycyBv
biBiZWhhbGYgb2YgQWNjZXNzaWJpbGl0eVVJRWxlbWVudC4KICAgICB2b2lkIGFkZE5vdGlmaWNh
dGlvbkxpc3RlbmVyKFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxi
YWNrKTsKICAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBj
b25zdCBzdGQ6OnN0cmluZyYgZXZlbnROYW1lKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIHN0
YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKQEAgLTY5LDYgKzc2LDEwIEBAIHByaXZhdGU6
CiAgICAgSFdJTkVWRU5USE9PSyBtX25vdGlmaWNhdGlvbnNFdmVudEhvb2s7CiAgICAgSGFzaE1h
cDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJz
OwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgTm90aWZpY2F0aW9uSGFuZGxlciBt
X2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXI7CisjZW5kaWYKIH07CiAKICNlbmRpZiAvLyBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcl9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAK
IAkJNURCOUFDOUYwRjcyMkMzNjAwNjg0NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
IGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
NzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87
IH07CiAJCTVEQjlBQ0EwMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAw
LnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRm
ICovOyB9OwogCQk1REU4QUU0NDEzQTJDMTU5MDBENkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBw
b3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNURFOEFFNDMxM0EyQzE1ODAwRDZBMzdEIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxp
YiAqLzsgfTsKKwkJODAwNDVBRUQxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIuaCAqLzsgfTsKKwkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODAwNDVBRUMxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovOyB9OwogCQk4NDY1RTJDNzBGRkE4REYyMDAz
QjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY1RTJDNjBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1w
U3VwcG9ydC5jcHAgKi87IH07CiAJCTkzM0JGNUFCMEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzNCRjVBOTBGOTNGQTVDMDAwRjA0NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5oICov
OyB9OwogCQk5MzNCRjVBQzBGOTNGQTVDMDAwRjA0NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0JGNUFB
MEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLm1tICovOyB9OwpAQCAtMjU4
LDYgKzI2MCw4IEBACiAJCTUzQ0JCODMwMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRh
bmN5Q2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDQkI4
MzExMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURFOEFFNDMxM0EyQzE1ODAwRDZBMzdEIC8qIGxpYldlYkNv
cmVUZXN0U3VwcG9ydC5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRl
c3RTdXBwb3J0LmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk4
MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MDA0NUFFQzE0NzcxOEU3MDA4
MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8q
IFBpeGVsRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBpeGVsRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBw
YXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJOTMzQkY1QTkwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhaW5UZXh0Q29udHJvbGxlci5oOyBw
YXRoID0gbWFjL1BsYWluVGV4dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQzOCw2ICs0NDIsOCBAQAogCQkxNDIyQTI2OTBBRjZGNDUyMDBFMUE4ODMgLyogQ29u
dHJvbGxlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5oICovLAorCQkJCTgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLywKIAkJCQlCQ0QwOEIzOTBFMTA1N0VGMDBBN0QwQzEg
LyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwICovLAogCQkJCUJDRDA4QTU4MEUxMDQ5NkIw
MEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oICovLAogCQkJCUJDRDA4QjcwMEUx
MDU5RDIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAqLywKQEAgLTY3
OSw2ICs2ODUsNyBAQAogCQkJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJF
NkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxN0RB
QTFEMTM3QjNFMjQwMDdDNTdGQiAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTgwMDQ1QUVEMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04NzksNiArODg2LDcgQEAKIAkJCQkyOUNG
QkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJF
NkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk4MDA0
NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwMDY0
MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvCiB7CiAKICAgICBiaW5kTWV0aG9kKCJsb2dBY2Nlc3Np
YmlsaXR5RXZlbnRzIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7
CiAKICAgICBiaW5kUHJvcGVydHkoImZvY3VzZWRFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNrKTsKICAgICBiaW5kUHJvcGVydHko
InJvb3RFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudEdldHRl
ckNhbGxiYWNrKTsKQEAgLTkzLDggKzk1LDE5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnNob3VsZExvZ0EKIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0
aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiB0YXJnZXQs
IGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpCiB7CisgICAgLy8gQ2FsbCBub3RpZmljYXRp
b24gbGlzdGVuZXJzIG9uIHRoZSBlbGVtZW50LgogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGVsZW1lbnQgPSBtX2VsZW1lbnRzLmdldE9yQ3JlYXRlKHRhcmdldCk7CiAgICAgZWxlbWVudC0+
bm90aWZpY2F0aW9uUmVjZWl2ZWQobm90aWZpY2F0aW9uTmFtZSk7CisKKyAgICAvLyBDYWxsIGds
b2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXJzLgorICAgIHNpemVfdCBjYWxsYmFja0NvdW50ID0g
bV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAgICAgIENwcFZhcmlhbnQgYXJndW1lbnRzWzJd
OworICAgICAgICBhcmd1bWVudHNbMF0uc2V0KCplbGVtZW50LT5nZXRBc0NwcFZhcmlhbnQoKSk7
CisgICAgICAgIGFyZ3VtZW50c1sxXS5zZXQobm90aWZpY2F0aW9uTmFtZSk7CisgICAgICAgIENw
cFZhcmlhbnQgaW52b2tlUmVzdWx0OworICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrc1tp
XS5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgMiwgaW52b2tlUmVzdWx0KTsKKyAgICB9CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCkBAIC0xMDMs
NiArMTE2LDIzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2kKICAg
ICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX25vdGlmaWNhdGlvbkNhbGxi
YWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
fQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICByZXN1bHQtPnNldCgqKGdldEZvY3Vz
ZWRFbGVtZW50KCktPmdldEFzQ3BwVmFyaWFudCgpKSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgcHJpdmF0
ZToKICAgICAvLyBCb3VuZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzCiAgICAgdm9pZCBsb2dBY2Nl
c3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwogICAgIHZvaWQgZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vdGlm
aWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwogCiAgICAgdm9pZCBmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
KTsKICAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwpAQCAt
NzMsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3Qg
bV9lbGVtZW50czsKIAorICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2tzOworCiAgICAgVGVzdFNoZWxsKiBtX3NoZWxsOwogfTsKIApJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAkocmV2aXNpb24gMTAw
NjQwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NjEsNiArNTYxLDkgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cG9zdEFj
Y2Vzc2liaWxpdHlOb3RpZgogICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkFj
dGl2ZURlc2NlbmRhbnRDaGFuZ2VkOgogICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFjdGl2
ZURlc2NlbmRhbnRDaGFuZ2VkIjsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uQXV0b2NvcnJlY3Rpb25PY2N1cmVkOgorICAgICAgICBub3RpZmlj
YXRpb25OYW1lID0gIkF1dG9jb3JyZWN0aW9uT2NjdXJlZCI7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkNoZWNrZWRTdGF0ZUNoYW5nZWQ6CiAg
ICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQ2hlY2tlZFN0YXRlQ2hhbmdlZCI7CiAgICAgICAg
IGJyZWFrOwpAQCAtNTkxLDYgKzU5NCw5IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBvc3RBY2Nlc3Np
YmlsaXR5Tm90aWYKICAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25MaXZlUmVn
aW9uQ2hhbmdlZDoKICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJMaXZlUmVnaW9uQ2hhbmdl
ZCI7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bk1lbnVMaXN0SXRlbVNlbGVjdGVkOgorICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIk1lbnVM
aXN0VmFsdWVJdGVtU2VsZWN0ZWQiOworICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25NZW51TGlzdFZhbHVlQ2hhbmdlZDoKICAgICAgICAgbm90aWZp
Y2F0aW9uTmFtZSA9ICJNZW51TGlzdFZhbHVlQ2hhbmdlZCI7CiAgICAgICAgIGJyZWFrOwpAQCAt
NjAzLDYgKzYwOSw5IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWYK
ICAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dFeHBhbmRlZDoKICAgICAg
ICAgbm90aWZpY2F0aW9uTmFtZSA9ICJSb3dFeHBhbmRlZCI7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkludmFsaWRTdGF0dXNDaGFuZ2VkOgor
ICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkludmFsaWRTdGF0dXNDaGFuZ2VkIjsKKyAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJVbmtu
b3duTm90aWZpY2F0aW9uIjsKICAgICAgICAgYnJlYWs7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJKHJl
dmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDEwICs5NywxMSBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2NlCiAgICAgbG9nZ2luZ0FjY2Vzc2li
aWxpdHlFdmVudHMgPSB0cnVlOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCiti
b29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09i
amVjdFJlZikKIHsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBz
dGQ6OnN0cmluZyYpCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmlj
YXRpb25MaXN0ZW5lcigpCiB7CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMDA2NDAp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkR1bXBSZW5kZXJU
cmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCisjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIgogI2ltcG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgpAQCAtMzUsMTEgKzM2LDE0IEBACiAjaW1wb3J0IDxXZWJLaXQv
V2ViSFRNTFZpZXcuaD4KIAogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCkKKyAgICA6IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcigwKQogewogfQog
CiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIHsK
KyAgICAvLyBUaGUgbm90aWZpY2F0aW9uIGhhbmRsZXIgc2hvdWxkIGJlIG5pbCBiZWNhdXNlIHJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhl
IHRlc3QuCisgICAgQVNTRVJUKCFtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpOwogfQogCiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpCkBAIC04MSwxMCArODUsMjYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6c2V0TG9nQWNjZQogewogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RS
ZWYpCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5l
cihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQogeworICAgIGlmICghZnVuY3Rpb25DYWxs
YmFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgIC8vIE1hYyBwcm9ncmFtbWVycyBz
aG91bGQgbm90IGJlIGFkZGluZyBtb3JlIHRoYW4gb25lIGdsb2JhbCBub3RpZmljYXRpb24gbGlz
dGVuZXIuCisgICAgLy8gT3RoZXIgcGxhdGZvcm1zIG1heSBiZSBkaWZmZXJlbnQuCisgICAgaWYg
KG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IFtbQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIgYWxsb2NdIGluaXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzXTsKKyAgICBbbV9nbG9i
YWxOb3RpZmljYXRpb25IYW5kbGVyIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlm
aWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCit2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigp
CiB7CisgICAgLy8gTWFjIHByb2dyYW1tZXJzIHNob3VsZCBub3QgYmUgdHJ5aW5nIHRvIHJlbW92
ZSBhIGxpc3RlbmVyIHRoYXQncyBhbHJlYWR5IHJlbW92ZWQuCisgICAgQVNTRVJUKG1fZ2xvYmFs
Tm90aWZpY2F0aW9uSGFuZGxlcik7CisKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVy
IHJlbGVhc2VdOworICAgIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IG5pbDsKIH0KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
X2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaAorCisjaW1wb3J0
IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4K
KworQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0
IHsKKyAgICBpZCBtX3BsYXRmb3JtRWxlbWVudDsKKyAgICBKU09iamVjdFJlZiBtX25vdGlmaWNh
dGlvbkZ1bmN0aW9uQ2FsbGJhY2s7Cit9CisKKy0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50
OihpZClwbGF0Zm9ybUVsZW1lbnQ7CistIChpZClpbml0QW5kTGlzdGVuVG9BbGxFbGVtZW50czsK
Ky0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrOworLSAodm9pZClfc3Rh
cnRPYnNlcnZpbmc7CistICh2b2lkKV9ub3RpZmljYXRpb25SZWNlaXZlZDooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb247CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlzaW9u
IDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdl
YktpdC9XZWJGcmFtZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KKyNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBZGRpdGlvbnMpCisrICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRT
aG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKK0BlbmQKKworQGludGVyZmFj
ZSBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCistIChKU1N0cmluZ1JlZiljcmVhdGVK
U1N0cmluZ1JlZjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChKU1N0cmluZ1Jl
ZkFkZGl0aW9ucykKKworLSAoSlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWYKK3sKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNlbGYpOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
cgorCistIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1FbGVtZW50Cit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRm
b3JtRWxlbWVudDsKKyAgICBbc2VsZiBfc3RhcnRPYnNlcnZpbmddOworICAgIHJldHVybiBzZWxm
OworfQorCistIChpZClpbml0QW5kTGlzdGVuVG9BbGxFbGVtZW50cworeworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgbV9wbGF0Zm9ybUVsZW1lbnQgPSBuaWw7CisgICAgW3NlbGYgX3N0
YXJ0T2JzZXJ2aW5nXTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjpzZWxmXTsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0s
IG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25GdW5j
dGlvbkNhbGxiYWNrID0gMDsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZv
aWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrCit7CisgICAgaWYgKCFjYWxsYmFj
aykKKyAgICAgICAgcmV0dXJuOworIAorICAgIC8vIFJlbGVhc2UgdGhlIG9sZCBjYWxsYmFjay4K
KyAgICBpZiAobV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKSAKKyAgICAgICAgSlNWYWx1
ZVVucHJvdGVjdChbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0
aW9uQ2FsbGJhY2spOworICAgIAorICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayA9
IGNhbGxiYWNrOworICAgIEpTVmFsdWVQcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0s
IG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Cit9CisKKy0gKHZvaWQpX3N0YXJ0T2Jz
ZXJ2aW5nCit7CisgICAgLy8gT25jZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMs
IGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKyAgICAvLyBUaGlzIGlz
IHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMg
ZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCisgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIgY2FuIGlnbm9yZSBldmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgorICAgIFtO
U0NsYXNzRnJvbVN0cmluZyhAIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIikgYWNjZXNz
aWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKKyAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIg
b2JqZWN0Om5pbF07Cit9CisKKy0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1l
ID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5h
bWUiXTsKKyAgICBpZiAoIW5vdGlmaWNhdGlvbk5hbWUpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAobV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlv
biBvYmplY3RdKQorICAgICAgICByZXR1cm47CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5n
UmVmXSk7CisgICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25OYW1lQXJndW1lbnQgPSBKU1ZhbHVl
TWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBqc05vdGlmaWNhdGlvbi5nZXQo
KSk7CisgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50KQorICAgICAgICAvLyBMaXN0ZW5lciBmb3Ig
b25lIGVsZW1lbnQganVzdCBnZXRzIG9uZSBhcmd1bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1l
LgorICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJm5vdGlmaWNhdGlvbk5h
bWVBcmd1bWVudCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVy
IGdldHMgdGhlIGVsZW1lbnQgYW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMu
CisgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0g
PSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFtt
YWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoW25vdGlmaWNh
dGlvbiBvYmplY3RdKSk7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVB
cmd1bWVudDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50
cywgMCk7CisgICAgfQorfQorCitAZW5kCisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiAxMDA2
NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgog
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTYwLDcgKzYxLDYgQEAgdHlw
ZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYgogCiBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQogLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczooTlNTdHJpbmcgKilhdHRyaWJ1dGUgaW5kZXg6KE5T
VUludGVnZXIpaW5kZXggbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQ7Ci0tICh2b2lkKWFj
Y2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKIC0g
KE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CiAtIChOU1VJ
bnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0dHJp
YnV0ZTsKIEBlbmQKQEAgLTg4LDY2ICs4OCw2IEBAIC0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3Ry
aW5nUmVmCiAKIEBlbmQKIAotQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlciA6IE5TT2JqZWN0Ci17Ci0gICAgaWQgbV9wbGF0Zm9ybUVsZW1lbnQ7Ci0gICAgSlNPYmpl
Y3RSZWYgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrOwotfQotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgotCi0tIChpZClpbml0
V2l0aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1FbGVtZW50Ci17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLQotICAgIG1fcGxhdGZvcm1FbGVtZW50ID0gcGxhdGZvcm1FbGVtZW50Owot
ICAgIAotICAgIC8vIE9uY2UgYW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlv
bnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KLSAgICAvLyBUaGlz
IGlzIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRo
aXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCi0gICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIgY2FuIGp1c3QgbGlzdGVuIHdoZW4gdGhleSB3YW50IHRvLgotICAgIFttX3Bs
YXRmb3JtRWxlbWVudCBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZ
RVNdOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpA
IkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
IAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWlu
RnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0g
ICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gMDsKLSAgICAKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0g
W1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUi
XTsKLSAgICBpZiAoIW5vdGlmaWNhdGlvbk5hbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmlj
YXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9
IEpTVmFsdWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0
aW9uLmdldCgpKTsKLSAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFs
Q29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJmFyZ3VtZW50
LCAwKTsKLX0KLQotLSAodm9pZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2sKLXsK
LSAgICBpZiAoIWNhbGxiYWNrKQotICAgICAgICByZXR1cm47Ci0gCi0gICAgLy8gUmVsZWFzZSB0
aGUgb2xkIGNhbGxiYWNrLgotICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sp
IAotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1f
bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgCi0gICAgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFt
ZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLX0KLQot
QGVuZAotCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAs
IG1fbm90aWZpY2F0aW9uSGFuZGxlcigwKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAx
MDA2NDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDE1IEBAIHN0YXRpYyBDT01Q
dHI8SUFjY2Vzc2libGVDb21wYXJhYmxlPiBjb20KICAgICByZXR1cm4gY29tcGFyYWJsZTsKIH0K
IAorYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
SlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
KCkKK3sKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVj
ZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUp
CiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0
ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3Rp
ZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5
MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2
IEBACisyMDExLTExLTIxICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgor
CisgICAgICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3Rlbmlu
ZyB0byBub3RpZmljYXRpb25zIG9uIGFsbCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1s
aXN0ZW5lcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vYWNjZXNz
aWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJh
ICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRl
c3RzIGFyZSBmYWlsaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNh
dGlvbi1saXN0ZW5lcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDgwIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0
KCkgeworICAgICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9u
IGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQs
IGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBu
b3RpZmljYXRpb25zLiIpOworCisgICAgICAgIHdpbmRvdy5zZWxlY3ROb3RpZmljYXRpb25Db3Vu
dCA9IDA7CisgICAgICAgIHdpbmRvdy5zbGlkZXJOb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAg
ICAgIHdpbmRvdy5nbG9iYWxOb3RpZmljYXRpb25Db3VudCA9IDA7CisKKyAgICAgICAgaWYgKHdp
bmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInNlbGVjdCIpLmZvY3VzKCk7CisgICAgICAgICAgICB3aW5kb3cuc2VsZWN0
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgICAgICBz
ZWxlY3QuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoZnVuY3Rpb24obm90aWZpY2F0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgc2VsZWN0Tm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAg
ICBkZWJ1ZygiU0VMRUNUICIgKyBub3RpZmljYXRpb24gKyAiPGJyPiIpOworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbGlkZXIiKS5mb2N1
cygpOworICAgICAgICAgICAgd2luZG93LnNsaWRlciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmZvY3VzZWRFbGVtZW50OworICAgICAgICAgICAgc2xpZGVyLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGZ1bmN0aW9uKG5vdGlmaWNhdGlvbikgeworICAgICAgICAgICAgICAgIHNsaWRlck5vdGlm
aWNhdGlvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgZGVidWcoIlNMSURFUiAiICsgbm90aWZp
Y2F0aW9uICsgIjxicj4iKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihmdW5jdGlvbihlbGVtZW50
LCBub3RpZmljYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pc0VxdWFsKHNs
aWRlcikgfHwgZWxlbWVudC5pc0VxdWFsKHNlbGVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2xvYmFsTm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdM
T0JBTCAiICsgbm90aWZpY2F0aW9uICsgIiBvbiBlbGVtZW50IHdpdGggcm9sZSAiICsgZWxlbWVu
dC5yb2xlICsgIjxicj4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIHRyaWdnZXIgYSAiaW52YWxpZCBzdGF0
dXMgY2hhbmdlZCIgbm90aWZpY2F0aW9uIG9uIHRoZSBzZWxlY3QuCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzZWxlY3QiKS5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsICJ0
cnVlIik7CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dlciBhICJ2YWx1ZSBjaGFuZ2Vk
IiBub3RpZmljYXRpb24gb24gdGhlIHNsaWRlci4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInNsaWRlciIpLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsICI2Iik7CisKKyAg
ICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzaG91bGRC
ZSgic2VsZWN0Tm90aWZpY2F0aW9uQ291bnQiLCAiMSIpOworICAgICAgICAgICAgc2hvdWxkQmUo
InNsaWRlck5vdGlmaWNhdGlvbkNvdW50IiwgIjEiKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJn
bG9iYWxOb3RpZmljYXRpb25Db3VudCIsICIyIik7CisKKyAgICAgICAgICAgIGRlYnVnKCI8YnIg
Lz48c3BhbiBjbGFzcz0ncGFzcyc+VEVTVCBDT01QTEVURTwvc3Bhbj4iKTsKKworICAgICAgICAg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7Cisg
ICAgICAgICAgICAgICAgc2VsZWN0LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAg
ICAgICAgICAgICAgc2xpZGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICB9LCAxMCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgc2V0VGltZW91dChydW5UZXN0LCAxMCk7CisgICAgICAgIH0sIGZhbHNlKTsK
KyAgICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8c2VsZWN0IGlkPSJzZWxlY3Qi
IHZhbHVlPSJTZWxlY3QiPjxvcHRpb24+QTxvcHRpb24+Qjwvc2VsZWN0PgorCis8ZGl2IGlkPSJz
bGlkZXIiIHRhYmluZGV4PSIwIiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVub3c9IjUiPlNsaWRl
cjwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0
ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisKK1NsaWRl
cgorVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQg
b25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlm
aWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworU0VMRUNUIEludmFsaWRTdGF0dXNDaGFuZ2VkCisKK0dM
T0JBTCBJbnZhbGlkU3RhdHVzQ2hhbmdlZCBvbiBlbGVtZW50IHdpdGggcm9sZSBBWFJvbGU6IEFY
UG9wVXBCdXR0b24KKworU0xJREVSIFZhbHVlQ2hhbmdlZAorCitHTE9CQUwgVmFsdWVDaGFuZ2Vk
IG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhTbGlkZXIKKworUEFTUyBzZWxlY3ROb3Rp
ZmljYXRpb25Db3VudCBpcyAxCitQQVNTIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BB
U1MgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQgaXMgMgorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiAxMDA2NDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBA
IGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVn
ZW5kLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9sb2FkaW5n
LWlmcmFtZS11cGRhdGVzLWF4dHJlZS5odG1sCithY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1s
aXN0ZW5lcnMuaHRtbAogYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwKIGFjY2Vz
c2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9wbHVnaW4uaHRtbApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxp
c3RlbmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3Rp
ZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MSBAQAorCitTbGlkZXIKK1RoaXMgdGVzdHMgdGhhdCBhIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBv
biBhbiBlbGVtZW50IG9ubHkgbGlzdGVucyB0byB0aGF0IG9uZSBlbGVtZW50LCBhbmQgdGhhdCBh
IGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIgbGlzdGVucyB0byBhbGwgbm90aWZpY2F0aW9u
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NFTEVDVCBBWEludmFsaWRTdGF0
dXNDaGFuZ2VkCisKK0dMT0JBTCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0
aCByb2xlIEFYUm9sZTogQVhQb3BVcEJ1dHRvbgorCitTTElERVIgQVhWYWx1ZUNoYW5nZWQKKwor
R0xPQkFMIEFYVmFsdWVDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhTbGlk
ZXIKKworUEFTUyBzZWxlY3ROb3RpZmljYXRpb25Db3VudCBpcyAxCitQQVNTIHNsaWRlck5vdGlm
aWNhdGlvbkNvdW50IGlzIDEKK1BBU1MgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQgaXMgMgorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiAx
MDA2NDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5
KQpAQCAtNTgwLDYgKzU4MCw3IEBAIGFjY2Vzc2liaWxpdHkvbWVkaWEtZWxlbWVudC5odG1sCiBh
Y2Nlc3NpYmlsaXR5L25vY2hpbGRyZW4tZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24t
ZGF0YS10YWJsZS1jZWxsLXRpdGxlLXVpLWVsZW1lbnQuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24t
bmF0aXZlLWltYWdlLWNyYXNoLmh0bWwKK2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3Rl
bmVycy5odG1sCiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbAogYWNjZXNzaWJp
bGl0eS9hcmlhLW9wdGlvbi1yb2xlLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRt
bAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116113</attachid>
            <date>2011-11-21 11:45:59 -0800</date>
            <delta_ts>2011-11-22 22:42:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72866-20111121114558.patch</filename>
            <type>text/plain</type>
            <size>39371</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTIxICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcgogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdDsKIC0gKHZvaWQpZGV0YWNoOwogLSAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKysgKHZv
aWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0
OwogCiAvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMg
cG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWRO
b3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzE4OSw3ICszMTg5LDcgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZQogCiAvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50
cyB0byBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMuCiBzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3Vs
ZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0CisrICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdAogewogICAgIGFjY2Vzc2li
aWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zID0gcmVwb3N0OwogfQpAQCAtMzE5OCw3ICsz
MTk4LDcgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOgogewogICAg
IGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgewogICAgICAgICBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIG5pbF07Ci0g
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNh
dGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzp1c2VySW5m
b107CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5v
dGlmaWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0OnNlbGYgdXNlckluZm86
dXNlckluZm9dOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwODkxKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMTEtMjEgIERvbWluaWMgTWF6
em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIgc2hvdWxkIHN1cHBvcnQgbGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVs
ZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI4NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRzIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIGFuZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
ciBtZXRob2RzCisgICAgICAgIHRvIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLCB0byBsaXN0ZW4g
dG8gbm90aWZpY2F0aW9ucyBvbiBhbnkgZWxlbWVudAorICAgICAgICByYXRoZXIgdGhhbiBhIHNw
ZWNpZmljIGVsZW1lbnQuIE1hYyBhbmQgQ2hyb21pdW0gaW1wbGVtZW50YXRpb25zIGFyZQorICAg
ICAgICBib3RoIGNvbnRhaW5lZCBpbiB0aGlzIGNoYW5nZS4KKworICAgICAgICBPbiBNYWMsIHJl
ZmFjdG9ycyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBpbnRvIGl0cyBvd24KKyAg
ICAgICAgc291cmNlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSBib3RoIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIGFuZAorICAgICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LgorCisgICAgICAg
IE9uIENocm9taXVtLCBhZGRzIHNvbWUgbWlzc2luZyBub3RpZmljYXRpb25zIHRvIGFsbG93IHRo
ZSB0ZXN0IHRvCisgICAgICAgIHBhc3MuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9u
b3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyQ2FsbGJhY2spOgorICAgICAgICAocmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
ayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcyk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0
aW9uUmVjZWl2ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGRO
b3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW06IEFk
ZGVkLgorICAgICAgICAoLVtOU1N0cmluZyBjcmVhdGVKU1N0cmluZ1JlZl0pOgorICAgICAgICAo
LVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBpbml0V2l0aFBsYXRmb3JtRWxlbWVu
dDpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgaW5pdEFu
ZExpc3RlblRvQWxsRWxlbWVudHNdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlciBzZXRDYWxsYmFjazpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIgX3N0YXJ0T2JzZXJ2aW5nXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcik6CisKIDIwMTEtMTEtMjEgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVzZSBIb3N0KCkucG9ydF9mYWN0b3J5IGluc3RlYWQgb2Yg
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwMDY0
MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxl
bWVudEF0UG9pbnRDYWxsYgogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtl
SlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnRleHQsIGNvbnRyb2xsZXItPmVsZW1lbnRBdFBv
aW50KHgsIHkpKTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCBmYWxzZSk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGJvb2wgc3VjY2VlZGVk
ID0gY29udHJvbGxlci0+YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoY2FsbGJhY2spOworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgc3VjY2VlZGVkKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQogewog
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewpAQCAtMTA1
LDYgKzEyMyw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEoKICAg
ICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dTY3JvbGxpbmdTdGFydEV2ZW50
c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCBs
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZWxlbWVu
dEF0UG9pbnQiLCBnZXRFbGVtZW50QXRQb2ludENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
ImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIsIHJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAw
IH0KICAgICB9OwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDE1
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCisgICAg
Ly8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciwgY2FwdHVyZXMgbm90aWZpY2F0aW9ucyBv
biBhbnkgb2JqZWN0LgorICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RS
ZWYgZnVuY3Rpb25DYWxsYmFjayk7CisgICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEhlbHBlciBtZXRob2RzIHNvIHRoaXMg
Y2xhc3MgY2FuIGFkZCB0aGUgbGlzdGVuZXJzIG9uIGJlaGFsZiBvZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LgogICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoUGxhdGZvcm1VSUVsZW1l
bnQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spOwogICAgIHZvaWQgbm90aWZpY2F0aW9u
UmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmVudE5hbWUp
OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygp
OwpAQCAtNjksNiArNzYsMTAgQEAgcHJpdmF0ZToKICAgICBIV0lORVZFTlRIT09LIG1fbm90aWZp
Y2F0aW9uc0V2ZW50SG9vazsKICAgICBIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVj
dFJlZj4gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnM7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBOb3RpZmljYXRpb25IYW5kbGVyIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcjsK
KyNlbmRpZgogfTsKIAogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyX2gKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQAogCQk1REI5QUM5RjBGNzIyQzM2MDA2ODQ2NDEg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBX
ZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNURCOUFDQTAwRjcyMkMzNjAwNjg0
NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3OTBEQUMzQ0I2MDBDOEI0RTUg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CiAJCTVERThBRTQ0MTNBMkMxNTkw
MEQ2QTM3RCAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4QUU0MzEzQTJDMTU4MDBENkEzN0Qg
LyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovOyB9OworCQk4MDA0NUFFRDE0NzcxOEU3
MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMDQ1QUVCMTQ3NzE4RTcwMDgy
OTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovOyB9OworCQk4MDA0
NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFF
QzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0g
Ki87IH07CiAJCTg0NjVFMkM3MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjVFMkM2
MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJOTMzQkY1
QUIwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0JGNUE5MEY5M0ZBNUMwMDBGMDQ0
MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggKi87IH07CiAJCTkzM0JGNUFDMEY5M0ZBNUMwMDBG
MDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzQkY1QUEwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4
dENvbnRyb2xsZXIubW0gKi87IH07CkBAIC0yNTgsNiArMjYwLDggQEAKIAkJNTNDQkI4MzAxMzRF
NDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NCQjgzMTEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN5Y2xp
Y1JlZHVuZGFuY3lDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1REU4QUU0
MzEzQTJDMTU4MDBENkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBwYXRoID0gbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFjL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NDY1RTJDNjBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxEdW1wU3VwcG9ydC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBX
ZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJLaXQuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzNCRjVBOTBGOTNGQTVDMDAwRjA0
NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGFpblRleHRDb250cm9sbGVyLmg7IHBhdGggPSBtYWMvUGxhaW5UZXh0Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM4LDYgKzQ0Miw4IEBACiAJCTE0
MjJBMjY5MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJODAwNDVBRUIxNDc3MThFNzAwODI5MEE4IC8q
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8sCisJCQkJODAwNDVBRUMxNDc3
MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovLAog
CQkJCUJDRDA4QjM5MEUxMDU3RUYwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAgKi8sCiAJCQkJQkNEMDhBNTgwRTEwNDk2QjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmggKi8sCiAJCQkJQkNEMDhCNzAwRTEwNTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyTWFjLm1tICovLApAQCAtNjc5LDYgKzY4NSw3IEBACiAJCQkJMjlDRkJBMTAx
MjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE3REFBMUQxMzdCM0UyNDAwN0M1N0ZCIC8qIFdlYkNv
cmVUZXN0U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODAwNDVBRUQxNDc3MThFNzAwODI5
MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTg3OSw2ICs4ODYsNyBAQAogCQkJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkEyRTEyMjcz
QTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkzQTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw2ICs0NSw4IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q28KIHsK
IAogICAgIGJpbmRNZXRob2QoImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayk7CisgICAgYmluZE1l
dGhvZCgiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKIAogICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNl
ZEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVy
Q2FsbGJhY2spOwogICAgIGJpbmRQcm9wZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2spOwpAQCAtOTMsOCArOTUsMTkg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2hvdWxkTG9nQQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBXZWJLaXQ6Oldl
YkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFt
ZSkKIHsKKyAgICAvLyBDYWxsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgb24gdGhlIGVsZW1lbnQu
CiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudHMuZ2V0T3JD
cmVhdGUodGFyZ2V0KTsKICAgICBlbGVtZW50LT5ub3RpZmljYXRpb25SZWNlaXZlZChub3RpZmlj
YXRpb25OYW1lKTsKKworICAgIC8vIENhbGwgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMu
CisgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50OyBpKyspIHsKKyAg
ICAgICAgQ3BwVmFyaWFudCBhcmd1bWVudHNbMl07CisgICAgICAgIGFyZ3VtZW50c1swXS5zZXQo
KmVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKTsKKyAgICAgICAgYXJndW1lbnRzWzFdLnNldChu
b3RpZmljYXRpb25OYW1lKTsKKyAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7CisgICAg
ICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmludm9rZURlZmF1bHQoYXJndW1lbnRzLCAy
LCBpbnZva2VSZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTEwMyw2ICsxMTYsMjMgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmpl
Y3QoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVudHNbMF0p
OworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIHJlc3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJpYW50
KCkpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwcml2YXRlOgogICAgIC8vIEJvdW5kIG1ldGhvZHMgYW5k
IHByb3BlcnRpZXMKICAgICB2b2lkIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBmYWxsYmFja0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICB2b2lkIGZvY3VzZWRFbGVt
ZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwogICAgIHZvaWQgcm9vdEVsZW1lbnRHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CkBAIC03Myw2ICs3NSw4IEBAIHByaXZhdGU6CiAKICAg
ICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCBtX2VsZW1lbnRzOwogCisgICAgc3RkOjp2ZWN0
b3I8Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7CisKICAgICBUZXN0U2hlbGwq
IG1fc2hlbGw7CiB9OwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEwMDY0MCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDEwICs5NywxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzZXRMb2dBY2NlCiAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVl
OwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0
ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCitib29sIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKIHsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNh
dGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCit2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB7
CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2lt
cG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgpAQCAtMzUsMTEgKzM2LDE0IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXcuaD4KIAog
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKKyAgICA6
IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcigwKQogewogfQogCiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIHsKKyAgICAvLyBUaGUgbm90aWZp
Y2F0aW9uIGhhbmRsZXIgc2hvdWxkIGJlIG5pbCBiZWNhdXNlIHJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhlIHRlc3QuCisgICAgQVNTRVJU
KCFtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkp
CkBAIC04MSwxMCArODUsMjYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9n
QWNjZQogewogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRp
b25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCitib29sIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5j
dGlvbkNhbGxiYWNrKQogeworICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworIAorICAgIC8vIE1hYyBwcm9ncmFtbWVycyBzaG91bGQgbm90IGJlIGFkZGlu
ZyBtb3JlIHRoYW4gb25lIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIuCisgICAgLy8gT3Ro
ZXIgcGxhdGZvcm1zIG1heSBiZSBkaWZmZXJlbnQuCisgICAgaWYgKG1fZ2xvYmFsTm90aWZpY2F0
aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZ2xvYmFsTm90aWZpY2F0
aW9uSGFuZGxlciA9IFtbQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgYWxsb2NdIGlu
aXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzXTsKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5k
bGVyIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKFBs
YXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCit2b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB7CisgICAgLy8gTWFjIHBy
b2dyYW1tZXJzIHNob3VsZCBub3QgYmUgdHJ5aW5nIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQn
cyBhbHJlYWR5IHJlbW92ZWQuCisgICAgQVNTRVJUKG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxl
cik7CisKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIG1f
Z2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IG5pbDsKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyX2gKKyNkZWZpbmUgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaAorCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKworQGludGVyZmFjZSBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0IHsKKyAgICBpZCBtX3BsYXRm
b3JtRWxlbWVudDsKKyAgICBKU09iamVjdFJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2s7Cit9CisKKy0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1l
bnQ7CistIChpZClpbml0QW5kTGlzdGVuVG9BbGxFbGVtZW50czsKKy0gKHZvaWQpc2V0Q2FsbGJh
Y2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrOworLSAodm9pZClfc3RhcnRPYnNlcnZpbmc7CistICh2
b2lkKV9ub3RpZmljYXRpb25SZWNlaXZlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247
CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyX2gK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEdW1w
UmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
aCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBZGRpdGlvbnMpCisrICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmlj
YXRpb25zOihCT09MKXJlcG9zdDsKK0BlbmQKKworQGludGVyZmFjZSBOU1N0cmluZyAoSlNTdHJp
bmdSZWZBZGRpdGlvbnMpCistIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZjsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFkZGl0aW9ucykKKworLSAo
SlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWYKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNlbGYpOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgorCistIChpZClpbml0V2l0
aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1FbGVtZW50Cit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsKKyAgICBb
c2VsZiBfc3RhcnRPYnNlcnZpbmddOworICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0
QW5kTGlzdGVuVG9BbGxFbGVtZW50cworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
bV9wbGF0Zm9ybUVsZW1lbnQgPSBuaWw7CisgICAgW3NlbGYgX3N0YXJ0T2JzZXJ2aW5nXTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBKU1Zh
bHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gMDsK
KyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpT
T2JqZWN0UmVmKWNhbGxiYWNrCit7CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworIAorICAgIC8vIFJlbGVhc2UgdGhlIG9sZCBjYWxsYmFjay4KKyAgICBpZiAobV9ub3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrKSAKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOworICAg
IAorICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIEpT
VmFsdWVQcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7Cit9CisKKy0gKHZvaWQpX3N0YXJ0T2JzZXJ2aW5nCit7CisgICAgLy8g
T25jZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBk
dXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKyAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNl
IGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJ
bnN0ZWFkCisgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGlnbm9y
ZSBldmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgorICAgIFtOU0NsYXNzRnJvbVN0cmluZyhA
IldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIikgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJl
cG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRp
b25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbF07Cit9CisK
Ky0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24g
dXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKKyAgICBpZiAoIW5v
dGlmaWNhdGlvbk5hbWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9wbGF0Zm9ybUVsZW1l
bnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24o
QWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7CisgICAgSlNWYWx1
ZVJlZiBub3RpZmljYXRpb25OYW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAgaWYgKG1fcGxh
dGZvcm1FbGVtZW50KQorICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVzdCBn
ZXRzIG9uZSBhcmd1bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1lLgorICAgICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9u
RnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJm5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVyIGdldHMgdGhlIGVsZW1lbnQg
YW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMuCisgICAgICAgIEpTVmFsdWVS
ZWYgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0gPSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFttYWluRnJhbWUgZ2xvYmFsQ29u
dGV4dF0sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoW25vdGlmaWNhdGlvbiBvYmplY3RdKSk7Cisg
ICAgICAgIGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKKyAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50cywgMCk7CisgICAgfQorfQor
CitAZW5kCisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5o
IgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogCiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTYwLDcgKzYxLDYgQEAgdHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3Np
YmlsaXR5QWRkaXRpb25zKQogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0
ZVZhbHVlczooTlNTdHJpbmcgKilhdHRyaWJ1dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4
Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQ7Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91
bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKIC0gKE5TVUludGVnZXIpYWNjZXNz
aWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxp
dHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKIEBlbmQKQEAgLTg4
LDY2ICs4OCw2IEBAIC0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5nUmVmCiAKIEBlbmQKIAot
QGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0Ci17
Ci0gICAgaWQgbV9wbGF0Zm9ybUVsZW1lbnQ7Ci0gICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgotCi0tIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVu
dDooaWQpcGxhdGZvcm1FbGVtZW50Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLQotICAg
IG1fcGxhdGZvcm1FbGVtZW50ID0gcGxhdGZvcm1FbGVtZW50OwotICAgIAotICAgIC8vIE9uY2Ug
YW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KLSAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSBy
YWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2Zm
LiBJbnN0ZWFkCi0gICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGp1
c3QgbGlzdGVuIHdoZW4gdGhleSB3YW50IHRvLgotICAgIFttX3BsYXRmb3JtRWxlbWVudCBhY2Nl
c3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOwotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9u
IiBvYmplY3Q6bmlsXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotIAotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjpzZWxmXTsKLSAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrID0gMDsKLSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKLSAgICBpZiAoIW5vdGlm
aWNhdGlvbk5hbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpT
U3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJmFyZ3VtZW50LCAwKTsKLX0KLQotLSAodm9p
ZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2sKLXsKLSAgICBpZiAoIWNhbGxiYWNr
KQotICAgICAgICByZXR1cm47Ci0gCi0gICAgLy8gUmVsZWFzZSB0aGUgb2xkIGNhbGxiYWNrLgot
ICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spIAotICAgICAgICBKU1ZhbHVl
VW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rp
b25DYWxsYmFjayk7Ci0gICAgCi0gICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0g
Y2FsbGJhY2s7Ci0gICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwg
bV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLX0KLQotQGVuZAotCiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fbm90aWZpY2F0aW9uSGFu
ZGxlcigwKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsNiArMjgxLDE1IEBAIHN0YXRpYyBDT01QdHI8SUFjY2Vzc2libGVDb21w
YXJhYmxlPiBjb20KICAgICByZXR1cm4gY29tcGFyYWJsZTsKIH0KIAorYm9vbCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rp
b25DYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KKwogdm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNo
TWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3Rp
ZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMu
ZW5kKCk7ICsraXQpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTIxICBE
b21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25z
IG9uIGFsbCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRp
b24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0
aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9Ta2lwcGVkOgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCklu
ZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1s
aXN0ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVs
ZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFs
IG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLiIpOwor
CisgICAgICAgIHdpbmRvdy5zZWxlY3ROb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgICAgIHdp
bmRvdy5zbGlkZXJOb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgICAgIHdpbmRvdy5nbG9iYWxO
b3RpZmljYXRpb25Db3VudCA9IDA7CisKKyAgICAgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVj
dCIpLmZvY3VzKCk7CisgICAgICAgICAgICB3aW5kb3cuc2VsZWN0ID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgICAgICBzZWxlY3QuYWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoZnVuY3Rpb24obm90aWZpY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0Tm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiU0VMRUNUICIg
KyBub3RpZmljYXRpb24gKyAiPGJyPiIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbGlkZXIiKS5mb2N1cygpOworICAgICAgICAgICAg
d2luZG93LnNsaWRlciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
ICAgICAgICAgICAgc2xpZGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9uKG5vdGlm
aWNhdGlvbikgeworICAgICAgICAgICAgICAgIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgZGVidWcoIlNMSURFUiAiICsgbm90aWZpY2F0aW9uICsgIjxicj4iKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5h
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihmdW5jdGlvbihlbGVtZW50LCBub3RpZmljYXRpb24pIHsK
KyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pc0VxdWFsKHNsaWRlcikgfHwgZWxlbWVudC5p
c0VxdWFsKHNlbGVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTm90aWZpY2F0aW9u
Q291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdMT0JBTCAiICsgbm90aWZpY2F0
aW9uICsgIiBvbiBlbGVtZW50IHdpdGggcm9sZSAiICsgZWxlbWVudC5yb2xlICsgIjxicj4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFRoaXMgc2hvdWxkIHRyaWdnZXIgYSAiaW52YWxpZCBzdGF0dXMgY2hhbmdlZCIgbm90aWZp
Y2F0aW9uIG9uIHRoZSBzZWxlY3QuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
ZWxlY3QiKS5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsICJ0cnVlIik7CisKKyAgICAgICAg
Ly8gVGhpcyBzaG91bGQgdHJpZ2dlciBhICJ2YWx1ZSBjaGFuZ2VkIiBub3RpZmljYXRpb24gb24g
dGhlIHNsaWRlci4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpLnNl
dEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsICI2Iik7CisKKyAgICAgICAgd2luZG93LnNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzaG91bGRCZSgic2VsZWN0Tm90aWZpY2F0
aW9uQ291bnQiLCAiMSIpOworICAgICAgICAgICAgc2hvdWxkQmUoInNsaWRlck5vdGlmaWNhdGlv
bkNvdW50IiwgIjEiKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJnbG9iYWxOb3RpZmljYXRpb25D
b3VudCIsICIyIik7CisKKyAgICAgICAgICAgIGRlYnVnKCI8YnIgLz48c3BhbiBjbGFzcz0ncGFz
cyc+VEVTVCBDT01QTEVURTwvc3Bhbj4iKTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2xpZGVy
LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCAxMCk7CisgICAgfQor
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0VGlt
ZW91dChydW5UZXN0LCAxMCk7CisgICAgICAgIH0sIGZhbHNlKTsKKyAgICB9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorCis8c2VsZWN0IGlkPSJzZWxlY3QiIHZhbHVlPSJTZWxlY3QiPjxv
cHRpb24+QTxvcHRpb24+Qjwvc2VsZWN0PgorCis8ZGl2IGlkPSJzbGlkZXIiIHRhYmluZGV4PSIw
IiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVub3c9IjUiPlNsaWRlcjwvZGl2PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5
L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3Rl
bmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisKK1NsaWRlcgorVGhpcyB0ZXN0cyB0aGF0
IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRo
YXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBs
aXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworU0VMRUNUIEludmFsaWRTdGF0dXNDaGFuZ2VkCisKK0dMT0JBTCBJbnZhbGlkU3RhdHVz
Q2hhbmdlZCBvbiBlbGVtZW50IHdpdGggcm9sZSBBWFJvbGU6IEFYUG9wVXBCdXR0b24KKworU0xJ
REVSIFZhbHVlQ2hhbmdlZAorCitHTE9CQUwgVmFsdWVDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCBy
b2xlIEFYUm9sZTogQVhTbGlkZXIKKworUEFTUyBzZWxlY3ROb3RpZmljYXRpb25Db3VudCBpcyAx
CitQQVNTIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1MgZ2xvYmFsTm90aWZpY2F0
aW9uQ291bnQgaXMgMgorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCShyZXZpc2lvbiAxMDA2NDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIGFjY2Vzc2liaWxpdHkvbGFu
Z3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwKIGFjY2Vzc2li
aWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9sb2FkaW5nLWlmcmFtZS11cGRhdGVzLWF4
dHJlZS5odG1sCithY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAogYWNj
ZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xk
ZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9wbHVnaW4uaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorCitTbGlkZXIKK1Ro
aXMgdGVzdHMgdGhhdCBhIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBvbiBhbiBlbGVtZW50IG9ubHkg
bGlzdGVucyB0byB0aGF0IG9uZSBlbGVtZW50LCBhbmQgdGhhdCBhIGdsb2JhbCBub3RpZmljYXRp
b24gbGlzdGVuZXIgbGlzdGVucyB0byBhbGwgbm90aWZpY2F0aW9ucy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1NFTEVDVCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkCisKK0dMT0JB
TCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhQ
b3BVcEJ1dHRvbgorCitTTElERVIgQVhWYWx1ZUNoYW5nZWQKKworR0xPQkFMIEFYVmFsdWVDaGFu
Z2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhTbGlkZXIKKworUEFTUyBzZWxlY3RO
b3RpZmljYXRpb25Db3VudCBpcyAxCitQQVNTIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50IGlzIDEK
K1BBU1MgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQgaXMgMgorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiAxMDA2NDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDYgKzU4MCw3
IEBAIGFjY2Vzc2liaWxpdHkvbWVkaWEtZWxlbWVudC5odG1sCiBhY2Nlc3NpYmlsaXR5L25vY2hp
bGRyZW4tZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tZGF0YS10YWJsZS1jZWxsLXRp
dGxlLXVpLWVsZW1lbnQuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tbmF0aXZlLWltYWdlLWNyYXNo
Lmh0bWwKK2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCiBhY2Nlc3Np
YmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbAogYWNjZXNzaWJpbGl0eS9hcmlhLW9wdGlvbi1y
b2xlLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116320</attachid>
            <date>2011-11-22 22:42:44 -0800</date>
            <delta_ts>2011-12-01 00:21:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72866-20111122224241.patch</filename>
            <type>text/plain</type>
            <size>39371</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTIxICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcgogLSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdDsKIC0gKHZvaWQpZGV0YWNoOwogLSAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKysgKHZv
aWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0
OwogCiAvLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMg
cG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWRO
b3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzE4OSw3ICszMTg5LDcgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZQogCiAvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50
cyB0byBsaXN0ZW4gZm9yIG5vdGlmaWNhdGlvbnMuCiBzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3Vs
ZFJlcG9zdE5vdGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0CisrICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdAogewogICAgIGFjY2Vzc2li
aWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zID0gcmVwb3N0OwogfQpAQCAtMzE5OCw3ICsz
MTk4LDcgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOgogewogICAg
IGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgewogICAgICAgICBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIG5pbF07Ci0g
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNh
dGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzp1c2VySW5m
b107CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5v
dGlmaWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0OnNlbGYgdXNlckluZm86
dXNlckluZm9dOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwODkxKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMTEtMjEgIERvbWluaWMgTWF6
em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIgc2hvdWxkIHN1cHBvcnQgbGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVs
ZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI4NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRzIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIGFuZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
ciBtZXRob2RzCisgICAgICAgIHRvIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLCB0byBsaXN0ZW4g
dG8gbm90aWZpY2F0aW9ucyBvbiBhbnkgZWxlbWVudAorICAgICAgICByYXRoZXIgdGhhbiBhIHNw
ZWNpZmljIGVsZW1lbnQuIE1hYyBhbmQgQ2hyb21pdW0gaW1wbGVtZW50YXRpb25zIGFyZQorICAg
ICAgICBib3RoIGNvbnRhaW5lZCBpbiB0aGlzIGNoYW5nZS4KKworICAgICAgICBPbiBNYWMsIHJl
ZmFjdG9ycyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBpbnRvIGl0cyBvd24KKyAg
ICAgICAgc291cmNlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSBib3RoIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIGFuZAorICAgICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LgorCisgICAgICAg
IE9uIENocm9taXVtLCBhZGRzIHNvbWUgbWlzc2luZyBub3RpZmljYXRpb25zIHRvIGFsbG93IHRo
ZSB0ZXN0IHRvCisgICAgICAgIHBhc3MuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9u
b3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyQ2FsbGJhY2spOgorICAgICAgICAocmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
ayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcyk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0
aW9uUmVjZWl2ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGRO
b3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW06IEFk
ZGVkLgorICAgICAgICAoLVtOU1N0cmluZyBjcmVhdGVKU1N0cmluZ1JlZl0pOgorICAgICAgICAo
LVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBpbml0V2l0aFBsYXRmb3JtRWxlbWVu
dDpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgaW5pdEFu
ZExpc3RlblRvQWxsRWxlbWVudHNdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlciBzZXRDYWxsYmFjazpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIgX3N0YXJ0T2JzZXJ2aW5nXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcik6CisKIDIwMTEtMTEtMjEgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVzZSBIb3N0KCkucG9ydF9mYWN0b3J5IGluc3RlYWQgb2Yg
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZmFjdG9yeS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwMDY0
MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxl
bWVudEF0UG9pbnRDYWxsYgogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtl
SlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnRleHQsIGNvbnRyb2xsZXItPmVsZW1lbnRBdFBv
aW50KHgsIHkpKTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCBmYWxzZSk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGJvb2wgc3VjY2VlZGVk
ID0gY29udHJvbGxlci0+YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoY2FsbGJhY2spOworICAgIHJl
dHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgc3VjY2VlZGVkKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQogewog
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewpAQCAtMTA1
LDYgKzEyMyw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEoKICAg
ICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dTY3JvbGxpbmdTdGFydEV2ZW50
c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCBs
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZWxlbWVu
dEF0UG9pbnQiLCBnZXRFbGVtZW50QXRQb2ludENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
ImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIsIHJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAw
IH0KICAgICB9OwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMDY0MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDE1
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCisgICAg
Ly8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciwgY2FwdHVyZXMgbm90aWZpY2F0aW9ucyBv
biBhbnkgb2JqZWN0LgorICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RS
ZWYgZnVuY3Rpb25DYWxsYmFjayk7CisgICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEhlbHBlciBtZXRob2RzIHNvIHRoaXMg
Y2xhc3MgY2FuIGFkZCB0aGUgbGlzdGVuZXJzIG9uIGJlaGFsZiBvZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LgogICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoUGxhdGZvcm1VSUVsZW1l
bnQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spOwogICAgIHZvaWQgbm90aWZpY2F0aW9u
UmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmVudE5hbWUp
OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygp
OwpAQCAtNjksNiArNzYsMTAgQEAgcHJpdmF0ZToKICAgICBIV0lORVZFTlRIT09LIG1fbm90aWZp
Y2F0aW9uc0V2ZW50SG9vazsKICAgICBIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVj
dFJlZj4gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnM7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBOb3RpZmljYXRpb25IYW5kbGVyIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcjsK
KyNlbmRpZgogfTsKIAogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyX2gKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQAogCQk1REI5QUM5RjBGNzIyQzM2MDA2ODQ2NDEg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUYwOTc4MERBQzNDQjYwMEM4QjRFNSAvKiBX
ZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNURCOUFDQTAwRjcyMkMzNjAwNjg0
NjQxIC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3OTBEQUMzQ0I2MDBDOEI0RTUg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CiAJCTVERThBRTQ0MTNBMkMxNTkw
MEQ2QTM3RCAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REU4QUU0MzEzQTJDMTU4MDBENkEzN0Qg
LyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovOyB9OworCQk4MDA0NUFFRDE0NzcxOEU3
MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMDQ1QUVCMTQ3NzE4RTcwMDgy
OTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovOyB9OworCQk4MDA0
NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFF
QzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0g
Ki87IH07CiAJCTg0NjVFMkM3MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjVFMkM2
MEZGQThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJOTMzQkY1
QUIwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0JGNUE5MEY5M0ZBNUMwMDBGMDQ0
MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggKi87IH07CiAJCTkzM0JGNUFDMEY5M0ZBNUMwMDBG
MDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzQkY1QUEwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4
dENvbnRyb2xsZXIubW0gKi87IH07CkBAIC0yNTgsNiArMjYwLDggQEAKIAkJNTNDQkI4MzAxMzRF
NDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NCQjgzMTEzNEU0MkYzMDAxQ0U2QTQgLyogQ3ljbGlj
UmVkdW5kYW5jeUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN5Y2xp
Y1JlZHVuZGFuY3lDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1REU4QUU0
MzEzQTJDMTU4MDBENkEzN0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBwYXRoID0gbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFjL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NDY1RTJDNjBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxEdW1wU3VwcG9ydC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBX
ZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJLaXQuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzNCRjVBOTBGOTNGQTVDMDAwRjA0
NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGFpblRleHRDb250cm9sbGVyLmg7IHBhdGggPSBtYWMvUGxhaW5UZXh0Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM4LDYgKzQ0Miw4IEBACiAJCTE0
MjJBMjY5MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJODAwNDVBRUIxNDc3MThFNzAwODI5MEE4IC8q
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8sCisJCQkJODAwNDVBRUMxNDc3
MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovLAog
CQkJCUJDRDA4QjM5MEUxMDU3RUYwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAgKi8sCiAJCQkJQkNEMDhBNTgwRTEwNDk2QjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmggKi8sCiAJCQkJQkNEMDhCNzAwRTEwNTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyTWFjLm1tICovLApAQCAtNjc5LDYgKzY4NSw3IEBACiAJCQkJMjlDRkJBMTAx
MjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzQTU2MjZDQzEzMUNBMDM2MDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE3REFBMUQxMzdCM0UyNDAwN0M1N0ZCIC8qIFdlYkNv
cmVUZXN0U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODAwNDVBRUQxNDc3MThFNzAwODI5
MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTg3OSw2ICs4ODYsNyBAQAogCQkJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkEyRTEyMjcz
QTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkzQTU2MjZDQjEzMUNBMDJBMDAyQkU2RDkgLyogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw2ICs0NSw4IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q28KIHsK
IAogICAgIGJpbmRNZXRob2QoImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayk7CisgICAgYmluZE1l
dGhvZCgiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKIAogICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNl
ZEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVy
Q2FsbGJhY2spOwogICAgIGJpbmRQcm9wZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2spOwpAQCAtOTMsOCArOTUsMTkg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2hvdWxkTG9nQQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBXZWJLaXQ6Oldl
YkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFt
ZSkKIHsKKyAgICAvLyBDYWxsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgb24gdGhlIGVsZW1lbnQu
CiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudHMuZ2V0T3JD
cmVhdGUodGFyZ2V0KTsKICAgICBlbGVtZW50LT5ub3RpZmljYXRpb25SZWNlaXZlZChub3RpZmlj
YXRpb25OYW1lKTsKKworICAgIC8vIENhbGwgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMu
CisgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50OyBpKyspIHsKKyAg
ICAgICAgQ3BwVmFyaWFudCBhcmd1bWVudHNbMl07CisgICAgICAgIGFyZ3VtZW50c1swXS5zZXQo
KmVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKTsKKyAgICAgICAgYXJndW1lbnRzWzFdLnNldChu
b3RpZmljYXRpb25OYW1lKTsKKyAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7CisgICAg
ICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmludm9rZURlZmF1bHQoYXJndW1lbnRzLCAy
LCBpbnZva2VSZXN1bHQpOworICAgIH0KIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTEwMyw2ICsxMTYsMjMgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaQogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmpl
Y3QoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVudHNbMF0p
OworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIHJlc3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJpYW50
KCkpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTAwNjQwKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwcml2YXRlOgogICAgIC8vIEJvdW5kIG1ldGhvZHMgYW5k
IHByb3BlcnRpZXMKICAgICB2b2lkIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBmYWxsYmFja0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICB2b2lkIGZvY3VzZWRFbGVt
ZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwogICAgIHZvaWQgcm9vdEVsZW1lbnRHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CkBAIC03Myw2ICs3NSw4IEBAIHByaXZhdGU6CiAKICAg
ICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCBtX2VsZW1lbnRzOwogCisgICAgc3RkOjp2ZWN0
b3I8Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7CisKICAgICBUZXN0U2hlbGwq
IG1fc2hlbGw7CiB9OwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEwMDY0MCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDEwICs5NywxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzZXRMb2dBY2NlCiAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVl
OwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0
ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCitib29sIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKIHsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNh
dGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCit2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB7
CiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2lt
cG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgpAQCAtMzUsMTEgKzM2LDE0IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXcuaD4KIAog
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKKyAgICA6
IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcigwKQogewogfQogCiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIHsKKyAgICAvLyBUaGUgbm90aWZp
Y2F0aW9uIGhhbmRsZXIgc2hvdWxkIGJlIG5pbCBiZWNhdXNlIHJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhlIHRlc3QuCisgICAgQVNTRVJU
KCFtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpOwogfQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkp
CkBAIC04MSwxMCArODUsMjYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9n
QWNjZQogewogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRp
b25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYpCitib29sIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5j
dGlvbkNhbGxiYWNrKQogeworICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworIAorICAgIC8vIE1hYyBwcm9ncmFtbWVycyBzaG91bGQgbm90IGJlIGFkZGlu
ZyBtb3JlIHRoYW4gb25lIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIuCisgICAgLy8gT3Ro
ZXIgcGxhdGZvcm1zIG1heSBiZSBkaWZmZXJlbnQuCisgICAgaWYgKG1fZ2xvYmFsTm90aWZpY2F0
aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZ2xvYmFsTm90aWZpY2F0
aW9uSGFuZGxlciA9IFtbQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgYWxsb2NdIGlu
aXRBbmRMaXN0ZW5Ub0FsbEVsZW1lbnRzXTsKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5k
bGVyIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKFBs
YXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCit2b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiB7CisgICAgLy8gTWFjIHBy
b2dyYW1tZXJzIHNob3VsZCBub3QgYmUgdHJ5aW5nIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQn
cyBhbHJlYWR5IHJlbW92ZWQuCisgICAgQVNTRVJUKG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxl
cik7CisKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIG1f
Z2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IG5pbDsKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyX2gKKyNkZWZpbmUgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaAorCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKworQGludGVyZmFjZSBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0IHsKKyAgICBpZCBtX3BsYXRm
b3JtRWxlbWVudDsKKyAgICBKU09iamVjdFJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2s7Cit9CisKKy0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1l
bnQ7CistIChpZClpbml0QW5kTGlzdGVuVG9BbGxFbGVtZW50czsKKy0gKHZvaWQpc2V0Q2FsbGJh
Y2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrOworLSAodm9pZClfc3RhcnRPYnNlcnZpbmc7CistICh2
b2lkKV9ub3RpZmljYXRpb25SZWNlaXZlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247
CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyX2gK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEdW1w
UmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
aCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBZGRpdGlvbnMpCisrICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmlj
YXRpb25zOihCT09MKXJlcG9zdDsKK0BlbmQKKworQGludGVyZmFjZSBOU1N0cmluZyAoSlNTdHJp
bmdSZWZBZGRpdGlvbnMpCistIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZjsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFkZGl0aW9ucykKKworLSAo
SlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWYKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNlbGYpOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgorCistIChpZClpbml0V2l0
aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1FbGVtZW50Cit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsKKyAgICBb
c2VsZiBfc3RhcnRPYnNlcnZpbmddOworICAgIHJldHVybiBzZWxmOworfQorCistIChpZClpbml0
QW5kTGlzdGVuVG9BbGxFbGVtZW50cworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
bV9wbGF0Zm9ybUVsZW1lbnQgPSBuaWw7CisgICAgW3NlbGYgX3N0YXJ0T2JzZXJ2aW5nXTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBKU1Zh
bHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gMDsK
KyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpT
T2JqZWN0UmVmKWNhbGxiYWNrCit7CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworIAorICAgIC8vIFJlbGVhc2UgdGhlIG9sZCBjYWxsYmFjay4KKyAgICBpZiAobV9ub3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrKSAKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOworICAg
IAorICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIEpT
VmFsdWVQcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7Cit9CisKKy0gKHZvaWQpX3N0YXJ0T2JzZXJ2aW5nCit7CisgICAgLy8g
T25jZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBk
dXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKyAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNl
IGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJ
bnN0ZWFkCisgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGlnbm9y
ZSBldmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgorICAgIFtOU0NsYXNzRnJvbVN0cmluZyhA
IldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIikgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJl
cG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRp
b25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbF07Cit9CisK
Ky0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24g
dXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKKyAgICBpZiAoIW5v
dGlmaWNhdGlvbk5hbWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9wbGF0Zm9ybUVsZW1l
bnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24o
QWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7CisgICAgSlNWYWx1
ZVJlZiBub3RpZmljYXRpb25OYW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAgaWYgKG1fcGxh
dGZvcm1FbGVtZW50KQorICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVzdCBn
ZXRzIG9uZSBhcmd1bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1lLgorICAgICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9u
RnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJm5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVyIGdldHMgdGhlIGVsZW1lbnQg
YW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMuCisgICAgICAgIEpTVmFsdWVS
ZWYgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0gPSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFttYWluRnJhbWUgZ2xvYmFsQ29u
dGV4dF0sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoW25vdGlmaWNhdGlvbiBvYmplY3RdKSk7Cisg
ICAgICAgIGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKKyAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50cywgMCk7CisgICAgfQorfQor
CitAZW5kCisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5o
IgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogCiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTYwLDcgKzYxLDYgQEAgdHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3Np
YmlsaXR5QWRkaXRpb25zKQogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0
ZVZhbHVlczooTlNTdHJpbmcgKilhdHRyaWJ1dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4
Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQ7Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91
bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKIC0gKE5TVUludGVnZXIpYWNjZXNz
aWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxp
dHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKIEBlbmQKQEAgLTg4
LDY2ICs4OCw2IEBAIC0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5nUmVmCiAKIEBlbmQKIAot
QGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0Ci17
Ci0gICAgaWQgbV9wbGF0Zm9ybUVsZW1lbnQ7Ci0gICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgotCi0tIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVu
dDooaWQpcGxhdGZvcm1FbGVtZW50Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLQotICAg
IG1fcGxhdGZvcm1FbGVtZW50ID0gcGxhdGZvcm1FbGVtZW50OwotICAgIAotICAgIC8vIE9uY2Ug
YW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KLSAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSBy
YWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2Zm
LiBJbnN0ZWFkCi0gICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGp1
c3QgbGlzdGVuIHdoZW4gdGhleSB3YW50IHRvLgotICAgIFttX3BsYXRmb3JtRWxlbWVudCBhY2Nl
c3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOwotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9u
IiBvYmplY3Q6bmlsXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotIAotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjpzZWxmXTsKLSAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrID0gMDsKLSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKLSAgICBpZiAoIW5vdGlm
aWNhdGlvbk5hbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpT
U3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJmFyZ3VtZW50LCAwKTsKLX0KLQotLSAodm9p
ZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2sKLXsKLSAgICBpZiAoIWNhbGxiYWNr
KQotICAgICAgICByZXR1cm47Ci0gCi0gICAgLy8gUmVsZWFzZSB0aGUgb2xkIGNhbGxiYWNrLgot
ICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spIAotICAgICAgICBKU1ZhbHVl
VW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rp
b25DYWxsYmFjayk7Ci0gICAgCi0gICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0g
Y2FsbGJhY2s7Ci0gICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwg
bV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLX0KLQotQGVuZAotCiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fbm90aWZpY2F0aW9uSGFu
ZGxlcigwKQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMDA2NDApCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsNiArMjgxLDE1IEBAIHN0YXRpYyBDT01QdHI8SUFjY2Vzc2libGVDb21w
YXJhYmxlPiBjb20KICAgICByZXR1cm4gY29tcGFyYWJsZTsKIH0KIAorYm9vbCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rp
b25DYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KKwogdm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNo
TWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3Rp
ZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMu
ZW5kKCk7ICsraXQpIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDg5MSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTIxICBE
b21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25z
IG9uIGFsbCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyODY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRp
b24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0
aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9Ta2lwcGVkOgorCiAyMDExLTExLTIxICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtRdF0gV2ViU29ja2V0IGNsb3NlIHRlc3RzIGFyZSBmYWlsaW5nCklu
ZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1s
aXN0ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVs
ZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFs
IG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLiIpOwor
CisgICAgICAgIHdpbmRvdy5zZWxlY3ROb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgICAgIHdp
bmRvdy5zbGlkZXJOb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgICAgIHdpbmRvdy5nbG9iYWxO
b3RpZmljYXRpb25Db3VudCA9IDA7CisKKyAgICAgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVj
dCIpLmZvY3VzKCk7CisgICAgICAgICAgICB3aW5kb3cuc2VsZWN0ID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgICAgICBzZWxlY3QuYWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoZnVuY3Rpb24obm90aWZpY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0Tm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiU0VMRUNUICIg
KyBub3RpZmljYXRpb24gKyAiPGJyPiIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbGlkZXIiKS5mb2N1cygpOworICAgICAgICAgICAg
d2luZG93LnNsaWRlciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
ICAgICAgICAgICAgc2xpZGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9uKG5vdGlm
aWNhdGlvbikgeworICAgICAgICAgICAgICAgIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgZGVidWcoIlNMSURFUiAiICsgbm90aWZpY2F0aW9uICsgIjxicj4iKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5h
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihmdW5jdGlvbihlbGVtZW50LCBub3RpZmljYXRpb24pIHsK
KyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pc0VxdWFsKHNsaWRlcikgfHwgZWxlbWVudC5p
c0VxdWFsKHNlbGVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTm90aWZpY2F0aW9u
Q291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdMT0JBTCAiICsgbm90aWZpY2F0
aW9uICsgIiBvbiBlbGVtZW50IHdpdGggcm9sZSAiICsgZWxlbWVudC5yb2xlICsgIjxicj4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFRoaXMgc2hvdWxkIHRyaWdnZXIgYSAiaW52YWxpZCBzdGF0dXMgY2hhbmdlZCIgbm90aWZp
Y2F0aW9uIG9uIHRoZSBzZWxlY3QuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
ZWxlY3QiKS5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsICJ0cnVlIik7CisKKyAgICAgICAg
Ly8gVGhpcyBzaG91bGQgdHJpZ2dlciBhICJ2YWx1ZSBjaGFuZ2VkIiBub3RpZmljYXRpb24gb24g
dGhlIHNsaWRlci4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpLnNl
dEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsICI2Iik7CisKKyAgICAgICAgd2luZG93LnNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzaG91bGRCZSgic2VsZWN0Tm90aWZpY2F0
aW9uQ291bnQiLCAiMSIpOworICAgICAgICAgICAgc2hvdWxkQmUoInNsaWRlck5vdGlmaWNhdGlv
bkNvdW50IiwgIjEiKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJnbG9iYWxOb3RpZmljYXRpb25D
b3VudCIsICIyIik7CisKKyAgICAgICAgICAgIGRlYnVnKCI8YnIgLz48c3BhbiBjbGFzcz0ncGFz
cyc+VEVTVCBDT01QTEVURTwvc3Bhbj4iKTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2xpZGVy
LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCAxMCk7CisgICAgfQor
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0VGlt
ZW91dChydW5UZXN0LCAxMCk7CisgICAgICAgIH0sIGZhbHNlKTsKKyAgICB9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorCis8c2VsZWN0IGlkPSJzZWxlY3QiIHZhbHVlPSJTZWxlY3QiPjxv
cHRpb24+QTxvcHRpb24+Qjwvc2VsZWN0PgorCis8ZGl2IGlkPSJzbGlkZXIiIHRhYmluZGV4PSIw
IiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVub3c9IjUiPlNsaWRlcjwvZGl2PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5
L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3Rl
bmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisKK1NsaWRlcgorVGhpcyB0ZXN0cyB0aGF0
IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRo
YXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBs
aXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworU0VMRUNUIEludmFsaWRTdGF0dXNDaGFuZ2VkCisKK0dMT0JBTCBJbnZhbGlkU3RhdHVz
Q2hhbmdlZCBvbiBlbGVtZW50IHdpdGggcm9sZSBBWFJvbGU6IEFYUG9wVXBCdXR0b24KKworU0xJ
REVSIFZhbHVlQ2hhbmdlZAorCitHTE9CQUwgVmFsdWVDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCBy
b2xlIEFYUm9sZTogQVhTbGlkZXIKKworUEFTUyBzZWxlY3ROb3RpZmljYXRpb25Db3VudCBpcyAx
CitQQVNTIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1MgZ2xvYmFsTm90aWZpY2F0
aW9uQ291bnQgaXMgMgorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCShyZXZpc2lvbiAxMDA2NDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIGFjY2Vzc2liaWxpdHkvbGFu
Z3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwKIGFjY2Vzc2li
aWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9sb2FkaW5nLWlmcmFtZS11cGRhdGVzLWF4
dHJlZS5odG1sCithY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAogYWNj
ZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xk
ZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9wbHVnaW4uaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
bm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorCitTbGlkZXIKK1Ro
aXMgdGVzdHMgdGhhdCBhIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBvbiBhbiBlbGVtZW50IG9ubHkg
bGlzdGVucyB0byB0aGF0IG9uZSBlbGVtZW50LCBhbmQgdGhhdCBhIGdsb2JhbCBub3RpZmljYXRp
b24gbGlzdGVuZXIgbGlzdGVucyB0byBhbGwgbm90aWZpY2F0aW9ucy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1NFTEVDVCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkCisKK0dMT0JB
TCBBWEludmFsaWRTdGF0dXNDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhQ
b3BVcEJ1dHRvbgorCitTTElERVIgQVhWYWx1ZUNoYW5nZWQKKworR0xPQkFMIEFYVmFsdWVDaGFu
Z2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhTbGlkZXIKKworUEFTUyBzZWxlY3RO
b3RpZmljYXRpb25Db3VudCBpcyAxCitQQVNTIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50IGlzIDEK
K1BBU1MgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQgaXMgMgorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiAxMDA2NDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDYgKzU4MCw3
IEBAIGFjY2Vzc2liaWxpdHkvbWVkaWEtZWxlbWVudC5odG1sCiBhY2Nlc3NpYmlsaXR5L25vY2hp
bGRyZW4tZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tZGF0YS10YWJsZS1jZWxsLXRp
dGxlLXVpLWVsZW1lbnQuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tbmF0aXZlLWltYWdlLWNyYXNo
Lmh0bWwKK2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCiBhY2Nlc3Np
YmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbAogYWNjZXNzaWJpbGl0eS9hcmlhLW9wdGlvbi1y
b2xlLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117363</attachid>
            <date>2011-12-01 00:22:01 -0800</date>
            <delta_ts>2011-12-08 10:31:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72866-20111201002159.patch</filename>
            <type>text/plain</type>
            <size>71887</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTYyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTMwICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTExLTMwICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4K
IAogICAgICAgICBVcHN0cmVhbSBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya1N0
YXRlTm90aWZpZXJCbGFja0JlcnJ5LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlci5oCShyZXZpc2lvbiAxMDEzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBAIEBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIKIC0g
KGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdCopYXhPYmplY3Q7CiAtICh2b2lkKWRldGFjaDsKIC0gKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3Q7CisrICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRT
aG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKIAogLy8gVXNlZCB0byBpbmZv
cm0gYW4gZWxlbWVudCB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIHBvc3RlZCBmb3IgaXQuIFVzZWQg
YnkgRFJULgogLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmlu
ZyAqKW5vdGlmaWNhdGlvbk5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5tbQkocmV2aXNpb24gMTAxMzI5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMx
NzcsNyArMzE3Nyw3IEBAIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGUK
IAogLy8gVGhpcyBpcyBzZXQgYnkgRFJUIHdoZW4gaXQgd2FudHMgdG8gbGlzdGVuIGZvciBub3Rp
ZmljYXRpb25zLgogc3RhdGljIEJPT0wgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNh
dGlvbnM7Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25z
OihCT09MKXJlcG9zdAorKyAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczooQk9PTClyZXBvc3QKIHsKICAgICBhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90
aWZpY2F0aW9ucyA9IHJlcG9zdDsKIH0KQEAgLTMxODYsNyArMzE4Niw3IEBAIC0gKHZvaWQpYWNj
ZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjoKIHsKICAgICBpZiAoYWNjZXNzaWJpbGl0eVNo
b3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgTlNEaWN0aW9uYXJ5KiB1c2VySW5m
byA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpub3RpZmljYXRp
b25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCBuaWxdOwotICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOkAiQVhEUlROb3Rp
ZmljYXRpb24iIG9iamVjdDpuaWwgdXNlckluZm86dXNlckluZm9dOworICAgICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOkAiQVhE
UlROb3RpZmljYXRpb24iIG9iamVjdDpzZWxmIHVzZXJJbmZvOnVzZXJJbmZvXTsKICAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEwMTYyNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDg1IEBACisyMDExLTExLTMwICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29n
bGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHk6IEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
IHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFsbCBlbGVtZW50
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyODY2
CisKKyAgICAgICAgQWRkcyBhZGROb3RpZmljYXRpb25MaXN0ZW5lciBhbmQgcmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXIgbWV0aG9kcworICAgICAgICB0byBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ciwgdG8gbGlzdGVuIHRvIG5vdGlmaWNhdGlvbnMgb24gYW55IGVsZW1lbnQKKyAgICAgICAgcmF0
aGVyIHRoYW4gYSBzcGVjaWZpYyBlbGVtZW50LiBNYWMgKERSVCBhbmQgV0tUUikgYW5kIENocm9t
aXVtIChEUlQpCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBhcmUgYWxsIGNvbnRhaW5lZCBpbiB0
aGlzIGNoYW5nZS4KKworICAgICAgICBPbiBNYWMsIHJlZmFjdG9ycyBBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBpbnRvIGl0cyBvd24KKyAgICAgICAgc291cmNlIGZpbGUgdGhhdCBj
YW4gYmUgdXNlZCBieSBib3RoIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGFuZAorICAgICAgICBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LiAoQm90aCBEUlQgYW5kIFdLVFIuKQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoYWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayk6CisgICAgICAgIChyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNr
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRp
b25SZWNlaXZlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOiBBZGRlZC4K
KyAgICAgICAgKC1bTlNTdHJpbmcgY3JlYXRlSlNTdHJpbmdSZWZdKToKKyAgICAgICAgKC1bQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgaW5pdF0pOgorICAgICAgICAoLVtBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzZXRQbGF0Zm9ybUVsZW1lbnQ6XSk6CisgICAgICAg
ICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6XSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIHN0YXJ0T2JzZXJ2aW5nXSk6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRp
b25SZWNlaXZlZDpdKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAobm90aWZpY2F0aW9uTGlzdGVuZXJQ
cm9jKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25M
aXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5v
dGlmaWNhdGlvblJlY2VpdmVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3
aW5BZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2lu
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIp
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHMpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZS5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5t
bTogQWRkZWQuCisgICAgICAgICgtW05TU3RyaW5nIGNyZWF0ZUpTU3RyaW5nUmVmXSk6CisgICAg
ICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGluaXRdKToKKyAgICAgICAg
KC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0UGxhdGZvcm1FbGVtZW50Ol0p
OgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBkZWFsbG9jXSk6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIHNldENhbGxiYWNr
Ol0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzdGFydE9i
c2VydmluZ10pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBf
bm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDExLTExLTMwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9p
c2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjaHJvbWl1bTogSSdk
IGxpa2UgdG8gYWRkIGEgc2NyaXB0IGZvciBydW5uaW5nIHBlcmYgdGVzdHMgZm9yIFdlYkluc3Bl
Y3Rvci4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDEwMTMyOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMjQg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxlbWVudEF0UG9pbnRDYWxsYgogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnRl
eHQsIGNvbnRyb2xsZXItPmVsZW1lbnRBdFBvaW50KHgsIHkpKTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBmYWxzZSk7CisgICAgCisgICAgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNPYmplY3RS
ZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pOworICAgIGJvb2wgc3VjY2VlZGVkID0gY29udHJvbGxlci0+YWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIoY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4
dCwgc3VjY2VlZGVkKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29u
dHJvbGxlci0+cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmdldEpTQ2xhc3MoKQogewogICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY0Z1bmN0aW9uc1tdID0gewpAQCAtMTA1LDYgKzEyMyw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmdldEoKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVu
dHMiLCBsb2dTY3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAiZWxlbWVudEF0UG9pbnQiLCBnZXRFbGVtZW50QXRQb2ludENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lciIsIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwogCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMTMy
OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpOwogCi0gICAgdm9pZCBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihQ
bGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgdm9p
ZCBub3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCwgY29uc3Qgc3RkOjpzdHJp
bmcmIGV2ZW50TmFtZSk7CisgICAgLy8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciwgY2Fw
dHVyZXMgbm90aWZpY2F0aW9ucyBvbiBhbnkgb2JqZWN0LgorICAgIGJvb2wgYWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjayk7CisgICAgdm9pZCByZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEhl
bHBlciBtZXRob2RzIHNvIHRoaXMgY2xhc3MgY2FuIGFkZCB0aGUgbGlzdGVuZXJzIG9uIGJlaGFs
ZiBvZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LgorICAgIHZvaWQgd2luQWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIoUGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2sp
OworICAgIHZvaWQgd2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBldmVudE5hbWUpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwpAQCAtNjksNiArNzYsMTAgQEAgcHJpdmF0ZToK
ICAgICBIV0lORVZFTlRIT09LIG1fbm90aWZpY2F0aW9uc0V2ZW50SG9vazsKICAgICBIYXNoTWFw
PFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj4gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnM7
CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8Tm90aWZpY2F0aW9u
SGFuZGxlcj4gbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyOworI2VuZGlmCiB9OwogCiAjZW5k
aWYgLy8gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxMDEzMjkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2
ICs3Nyw4IEBACiAJCTVEQjlBQzlGMEY3MjJDMzYwMDY4NDY0MSAvKiBXZWJLaXRXZWlnaHRXYXRj
aGVyODAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzc1RjA5NzgwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4
MDAudHRmICovOyB9OwogCQk1REI5QUNBMDBGNzIyQzM2MDA2ODQ2NDEgLyogV2ViS2l0V2VpZ2h0
V2F0Y2hlcjkwMC50dGYgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3NUYwOTc5MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRj
aGVyOTAwLnR0ZiAqLzsgfTsKIAkJNURFOEFFNDQxM0EyQzE1OTAwRDZBMzdEIC8qIGxpYldlYkNv
cmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVERThBRTQzMTNBMkMxNTgwMEQ2QTM3RCAvKiBsaWJXZWJDb3JlVGVzdFN1
cHBvcnQuZHlsaWIgKi87IH07CisJCTgwMDQ1QUVEMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODAwNDVBRUIxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi87IH07CisJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBB
OCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMDQ1QUVDMTQ3NzE4RTcwMDgyOTBBOCAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJODQ2NUUyQzcw
RkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8q
IFBpeGVsRHVtcFN1cHBvcnQuY3BwICovOyB9OwogCQk5MzNCRjVBQjBGOTNGQTVDMDAwRjA0NDEg
LyogUGxhaW5UZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMzQkY1QTkwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENvbnRy
b2xsZXIuaCAqLzsgfTsKIAkJOTMzQkY1QUMwRjkzRkE1QzAwMEYwNDQxIC8qIFBsYWluVGV4dENv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzNCRjVBQTBGOTNGQTVDMDAwRjA0NDEgLyogUGxhaW5UZXh0Q29udHJvbGxlci5tbSAqLzsg
fTsKQEAgLTI1OCw2ICsyNjAsOCBAQAogCQk1M0NCQjgzMDEzNEU0MkYzMDAxQ0U2QTQgLyogQ3lj
bGljUmVkdW5kYW5jeUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEN5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzQ0JCODMxMTM0RTQyRjMwMDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVERThBRTQzMTNBMkMxNTgwMEQ2QTM3RCAv
KiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgcGF0aCA9IGxp
YldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJODAwNDVBRUIxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODAwNDVBRUMx
NDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIubW07IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjVFMkM2MEZGQThERjIw
MDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQaXhlbER1bXBTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMzNTQzNUYwM0Q3NTUwMjAwODYzNUNFIC8qIFdlYktpdC5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgcGF0aCA9IFdlYktpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTkzM0JGNUE5MEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYWluVGV4dENvbnRy
b2xsZXIuaDsgcGF0aCA9IG1hYy9QbGFpblRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00MzgsNiArNDQyLDggQEAKIAkJMTQyMkEyNjkwQUY2RjQ1MjAwRTFB
ODgzIC8qIENvbnRyb2xsZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIuaCAqLywKKwkJCQk4MDA0NUFFQzE0NzcxOEU3MDA4MjkwQTggLyogQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi8sCiAJCQkJQkNEMDhCMzkwRTEwNTdF
RjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0QwOEE1
ODBFMTA0OTZCMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCAqLywKIAkJCQlC
Q0QwOEI3MDBFMTA1OUQyMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0g
Ki8sCkBAIC02NzksNiArNjg1LDcgQEAKIAkJCQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAgLyog
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTNBNTYyNkNDMTMx
Q0EwMzYwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MTdEQUExRDEzN0IzRTI0MDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk4MDA0NUFFRDE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtODc5LDYgKzg4Niw3IEBA
CiAJCQkJMjlDRkJBMTExMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNBNTYyNkNCMTMx
Q0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxMDEzMjkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDbwogewogCiAgICAgYmluZE1ldGhvZCgi
bG9nQWNjZXNzaWJpbGl0eUV2ZW50cyIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bG9nQWNj
ZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhZGROb3RpZmljYXRp
b25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlz
dGVuZXJDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
Q2FsbGJhY2spOwogCiAgICAgYmluZFByb3BlcnR5KCJmb2N1c2VkRWxlbWVudCIsICZBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayk7CiAgICAgYmlu
ZFByb3BlcnR5KCJyb290RWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVs
ZW1lbnRHZXR0ZXJDYWxsYmFjayk7CkBAIC05Myw4ICs5NSwxOSBAQCBib29sIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpzaG91bGRMb2dBCiAKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
Om5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1lKQogeworICAgIC8vIENhbGwg
bm90aWZpY2F0aW9uIGxpc3RlbmVycyBvbiB0aGUgZWxlbWVudC4KICAgICBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50cy5nZXRPckNyZWF0ZSh0YXJnZXQpOwogICAg
IGVsZW1lbnQtPm5vdGlmaWNhdGlvblJlY2VpdmVkKG5vdGlmaWNhdGlvbk5hbWUpOworCisgICAg
Ly8gQ2FsbCBnbG9iYWwgbm90aWZpY2F0aW9uIGxpc3RlbmVycy4KKyAgICBzaXplX3QgY2FsbGJh
Y2tDb3VudCA9IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNhbGxiYWNrQ291bnQ7IGkrKykgeworICAgICAgICBDcHBWYXJpYW50IGFy
Z3VtZW50c1syXTsKKyAgICAgICAgYXJndW1lbnRzWzBdLnNldCgqZWxlbWVudC0+Z2V0QXNDcHBW
YXJpYW50KCkpOworICAgICAgICBhcmd1bWVudHNbMV0uc2V0KG5vdGlmaWNhdGlvbk5hbWUpOwor
ICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKKyAgICAgICAgbV9ub3RpZmljYXRpb25D
YWxsYmFja3NbaV0uaW52b2tlRGVmYXVsdChhcmd1bWVudHMsIDIsIGludm9rZVJlc3VsdCk7Cisg
ICAgfQogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQpAQCAtMTAzLDYgKzExNiwyMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpsb2dB
Y2Nlc3NpCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7CisgICAgICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9ub3RpZmlj
YXRpb25DYWxsYmFja3MucHVzaF9iYWNrKGFyZ3VtZW50c1swXSk7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1l
bnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0LT5zZXQo
KihnZXRGb2N1c2VkRWxlbWVudCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAxMDEzMjkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4
IEBAIHByaXZhdGU6CiAgICAgLy8gQm91bmQgbWV0aG9kcyBhbmQgcHJvcGVydGllcwogICAgIHZv
aWQgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAogICAgIHZvaWQgZm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7CiAgICAgdm9pZCByb290RWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKQEAgLTczLDYgKzc1LDggQEAgcHJpdmF0ZToKIAogICAgIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRMaXN0IG1fZWxlbWVudHM7CiAKKyAgICBzdGQ6OnZlY3RvcjxDcHBWYXJpYW50PiBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrczsKKwogICAgIFRlc3RTaGVsbCogbV9zaGVsbDsKIH07CiAKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMTAxMzI5KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTcsMTAgKzk3LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2UK
ICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IHRydWU7CiB9CiAKLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKFBsYXRmb3JtVUlFbGVt
ZW50LCBKU09iamVjdFJlZikKK2Jvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQogeworICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZv
cm1VSUVsZW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHsKIH0KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMu
bW0JKHJldmlzaW9uIDEwMTMyOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgiCiAKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNDb2xv
ci5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CkBAIC00MCw2ICs0MSw4IEBA
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q28KIAogQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCiB7CisgICAgLy8gVGhlIG5v
dGlmaWNhdGlvbiBoYW5kbGVyIHNob3VsZCBiZSBuaWwgYmVjYXVzZSByZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lcigpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSB0ZXN0LgorICAgIEFT
U0VSVCghbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGlu
dCB5KQpAQCAtODEsMTAgKzg0LDI1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNl
dExvZ0FjY2UKIHsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIoUGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmKQotewotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9y
bVVJRWxlbWVudCwgY29uc3Qgc3RkOjpzdHJpbmcmKQorYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFj
aykKIHsKKyAgICBpZiAoIWZ1bmN0aW9uQ2FsbGJhY2spCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAKKyAgICAvLyBNYWMgcHJvZ3JhbW1lcnMgc2hvdWxkIG5vdCBiZSBhZGRpbmcgbW9yZSB0aGFu
IG9uZSBnbG9iYWwgbm90aWZpY2F0aW9uIGxpc3RlbmVyLgorICAgIC8vIE90aGVyIHBsYXRmb3Jt
cyBtYXkgYmUgZGlmZmVyZW50LgorICAgIGlmIChtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIg
PSBbW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGFsbG9jXSBpbml0XTsKKyAgICBb
bV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLmdldCgpIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2Fs
bGJhY2tdOworICAgIFttX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIuZ2V0KCkgc3RhcnRPYnNl
cnZpbmddOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKKyAgICAvLyBNYWMgcHJvZ3Jh
bW1lcnMgc2hvdWxkIG5vdCBiZSB0cnlpbmcgdG8gcmVtb3ZlIGEgbGlzdGVuZXIgdGhhdCdzIGFs
cmVhZHkgcmVtb3ZlZC4KKyAgICBBU1NFUlQobV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKTsK
KyAgICBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIuY2xlYXIoKTsKIH0KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyX2gKKyNkZWZp
bmUgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaAorCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU09iamVjdFJlZi5oPgorCitAaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyIDogTlNPYmplY3QgeworICAgIGlkIG1fcGxhdGZvcm1FbGVtZW50OworICAg
IEpTT2JqZWN0UmVmIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjazsKK30KKworLSAoaWQp
aW5pdDsKKy0gKHZvaWQpc2V0UGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1lbnQ7Cist
ICh2b2lkKXNldENhbGxiYWNrOihKU09iamVjdFJlZiljYWxsYmFjazsKKy0gKHZvaWQpc3RhcnRP
YnNlcnZpbmc7CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlzaW9uIDApCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
bW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJUeXBlc0lu
dGVybmFsLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbnRlcmZhY2UgTlNPYmpl
Y3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQWRkaXRpb25zKQorKyAodm9pZClhY2Nl
c3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3Q7CitAZW5k
CisKK0BpbnRlcmZhY2UgTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQorLSAoSlNTdHJp
bmdSZWYpY3JlYXRlSlNTdHJpbmdSZWY7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0cmlu
ZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCisKKy0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5n
UmVmCit7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1Jl
ZilzZWxmKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIKKworLSAoaWQpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9wbGF0Zm9ybUVsZW1lbnQgPSBu
aWw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0UGxhdGZvcm1FbGVtZW50Oihp
ZClwbGF0Zm9ybUVsZW1lbnQKK3sKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxl
bWVudDsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBKU1ZhbHVlVW5wcm90
ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjayk7CisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gMDsKKyAgICAKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0UmVm
KWNhbGxiYWNrCit7CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworIAorICAg
IGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spIAorICAgICAgICBKU1ZhbHVlVW5w
cm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjayk7CisgICAgCisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2Fs
bGJhY2s7CisgICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9u
b3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKK30KKworLSAodm9pZClzdGFydE9ic2Vydmlu
ZworeworICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVzdGluZyBub3RpZmljYXRpb25zLCBpdCdz
IG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dyYW0uCisgICAgLy8gVGhpcyBpcyB0byBh
dm9pZCBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGVzdHMgdHVybmluZyB0aGlzIGZsYWcg
b24gYW5kIG9mZi4gSW5zdGVhZAorICAgIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyIGNhbiBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3QgY2FyZSBhYm91dC4KKyAgICBpZCB3ZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOworICAgIEFTU0VSVCh3ZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckNsYXNzKTsKKyAgICBbd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJD
bGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90
aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKK30KKworLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2
ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgTlNTdHJpbmcgKm5vdGlm
aWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90
aWZpY2F0aW9uTmFtZSJdOworICAgIGlmICghbm90aWZpY2F0aW9uTmFtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCAmJiBtX3BsYXRmb3JtRWxlbWVudCAhPSBb
bm90aWZpY2F0aW9uIG9iamVjdF0pCisgICAgICAgIHJldHVybjsKKworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3Jl
YXRlSlNTdHJpbmdSZWZdKTsKKyAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVu
dCA9IEpTVmFsdWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZp
Y2F0aW9uLmdldCgpKTsKKyAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKKyAgICAgICAgLy8g
TGlzdGVuZXIgZm9yIG9uZSBlbGVtZW50IGp1c3QgZ2V0cyBvbmUgYXJndW1lbnQsIHRoZSBub3Rp
ZmljYXRpb24gbmFtZS4KKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1l
IGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDEsICZu
b3RpZmljYXRpb25OYW1lQXJndW1lbnQsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEEg
Z2xvYmFsIGxpc3RlbmVyIGdldHMgdGhlIGVsZW1lbnQgYW5kIHRoZSBub3RpZmljYXRpb24gbmFt
ZSBhcyBhcmd1bWVudHMuCisgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdOworICAgICAg
ICBhcmd1bWVudHNbMF0gPSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoW25vdGlmaWNhdGlvbiBvYmplY3RdKSk7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9IG5v
dGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihb
bWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ss
IDAsIDIsIGFyZ3VtZW50cywgMCk7CisgICAgfQorfQorCitAZW5kCisKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CShyZXZpc2lvbiAxMDEzMjkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIgogCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTYw
LDcgKzYxLDYgQEAgdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYgogCiBA
aW50ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQogLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczooTlNTdHJpbmcgKilhdHRy
aWJ1dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291
bnQ7Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihC
T09MKXJlcG9zdDsKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQp
Y2hpbGQ7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihO
U1N0cmluZyAqKWF0dHJpYnV0ZTsKIEBlbmQKQEAgLTg4LDY2ICs4OCw2IEBAIC0gKEpTU3RyaW5n
UmVmKWNyZWF0ZUpTU3RyaW5nUmVmCiAKIEBlbmQKIAotQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0Ci17Ci0gICAgaWQgbV9wbGF0Zm9ybUVsZW1l
bnQ7Ci0gICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrOwotfQot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
cgotCi0tIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1FbGVtZW50Ci17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLQotICAgIG1fcGxhdGZvcm1FbGVtZW50ID0gcGxh
dGZvcm1FbGVtZW50OwotICAgIAotICAgIC8vIE9uY2UgYW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0
aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3Jh
bS4KLSAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0
ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCi0gICAgLy8gQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGp1c3QgbGlzdGVuIHdoZW4gdGhleSB3YW50
IHRvLgotICAgIFttX3BsYXRmb3JtRWxlbWVudCBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uczpZRVNdOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJl
Y2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotIAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICBKU1ZhbHVl
VW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rp
b25DYWxsYmFjayk7Ci0gICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gMDsKLSAg
ICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2Vp
dmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIE5TU3RyaW5nICpub3Rp
ZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIm5v
dGlmaWNhdGlvbk5hbWUiXTsKLSAgICBpZiAoIW5vdGlmaWNhdGlvbk5hbWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24o
QWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1
ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFtt
YWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaywg
MCwgMSwgJmFyZ3VtZW50LCAwKTsKLX0KLQotLSAodm9pZClzZXRDYWxsYmFjazooSlNPYmplY3RS
ZWYpY2FsbGJhY2sKLXsKLSAgICBpZiAoIWNhbGxiYWNrKQotICAgICAgICByZXR1cm47Ci0gCi0g
ICAgLy8gUmVsZWFzZSB0aGUgb2xkIGNhbGxiYWNrLgotICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1
bmN0aW9uQ2FsbGJhY2spIAotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xv
YmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgCi0gICAg
bV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgSlNWYWx1ZVBy
b3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrKTsKLX0KLQotQGVuZAotCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKICAgICAsIG1fbm90aWZpY2F0aW9uSGFuZGxlcigwKQpAQCAtMTIyOSw4ICsxMTY5
LDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2EKICAgICAvLyBP
dGhlciBwbGF0Zm9ybXMgbWF5IGJlIGRpZmZlcmVudC4KICAgICBpZiAobV9ub3RpZmljYXRpb25I
YW5kbGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub3RpZmljYXRpb25IYW5kbGVy
ID0gW1tBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBhbGxvY10gaW5pdFdpdGhQbGF0
Zm9ybUVsZW1lbnQ6cGxhdGZvcm1VSUVsZW1lbnQoKV07CisgICAgbV9ub3RpZmljYXRpb25IYW5k
bGVyID0gW1tBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBhbGxvY10gaW5pdF07Cisg
ICAgW21fbm90aWZpY2F0aW9uSGFuZGxlciBzZXRQbGF0Zm9ybUVsZW1lbnQ6cGxhdGZvcm1VSUVs
ZW1lbnQoKV07CiAgICAgW21fbm90aWZpY2F0aW9uSGFuZGxlciBzZXRDYWxsYmFjazpmdW5jdGlv
bkNhbGxiYWNrXTsKKyAgICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHN0YXJ0T2JzZXJ2aW5nXTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMDEz
MjkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgQ0FM
TEJBQ0sgbm90aWZpY2F0aW9uTGlzdGVuZQogCiAgICAgQ09NUHRyPElBY2Nlc3NpYmxlPiBjaGls
ZEFjY2Vzc2libGUoUXVlcnksIGNoaWxkRGlzcGF0Y2gpOwogCi0gICAgc2hhcmVkRnJhbWVMb2Fk
RGVsZWdhdGUtPmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm5vdGlmaWNhdGlvblJlY2VpdmVk
KGNoaWxkQWNjZXNzaWJsZSwgc3RyaW5nRXZlbnQoZXZlbnQpKTsKKyAgICBzaGFyZWRGcmFtZUxv
YWREZWxlZ2F0ZS0+YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+d2luTm90aWZpY2F0aW9uUmVj
ZWl2ZWQoY2hpbGRBY2Nlc3NpYmxlLCBzdHJpbmdFdmVudChldmVudCkpOwogCiAgICAgVmFyaWFu
dENsZWFyKCZ2Q2hpbGQpOwogfQpAQCAtMjgxLDcgKzI4MSwxNiBAQCBzdGF0aWMgQ09NUHRyPElB
Y2Nlc3NpYmxlQ29tcGFyYWJsZT4gY29tCiAgICAgcmV0dXJuIGNvbXBhcmFibGU7CiB9CiAKLXZv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQsIGNvbnN0IHN0cmluZyYgZXZlbnROYW1lKQorYm9vbCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVu
Y3Rpb25DYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9y
IChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0g
bV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0
ZW5lcnMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRo
aXNTZXJ2aWNlUHJvdmlkZXIoUXVlcnksIGl0LT5maXJzdCk7CkBAIC0zMTEsNyArMzIwLDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aQogICAgIH0KIH0KIAotdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCwgSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKK3ZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndpbkFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCiB7CiAg
ICAgaWYgKCFtX25vdGlmaWNhdGlvbnNFdmVudEhvb2spCiAgICAgICAgIG1fbm90aWZpY2F0aW9u
c0V2ZW50SG9vayA9IFNldFdpbkV2ZW50SG9vayhFVkVOVF9NSU4sIEVWRU5UX01BWCwgR2V0TW9k
dWxlSGFuZGxlKDApLCBub3RpZmljYXRpb25MaXN0ZW5lclByb2MsIEdldEN1cnJlbnRQcm9jZXNz
SWQoKSwgMCwgV0lORVZFTlRfSU5DT05URVhUKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAJKHJldmlzaW9u
IDEwMTMyOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2EKICAgICBpZiAoIWZ1bmN0aW9uQ2FsbGJhY2sp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNoYXJlZEZyYW1lTG9hZERlbGVnYXRlLT5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihtX2VsZW1l
bnQsIGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIHNoYXJlZEZyYW1lTG9hZERlbGVnYXRlLT5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcigpLT53aW5BZGROb3RpZmljYXRpb25MaXN0ZW5lcihtX2VsZW1l
bnQsIGZ1bmN0aW9uQ2FsbGJhY2spOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAxMzg2KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDEyIEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXMKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
dWlFbGVtZW50ID0gcm9vdEVsZW1lbnQoKTsKICAgICByZXR1cm4gdWlFbGVtZW50LT5lbGVtZW50
QXRQb2ludCh4LCB5KTsKIH0KKworLy8gVW5zdXBwb3J0ZWQgbWV0aG9kcyBvbiB2YXJpb3VzIHBs
YXRmb3Jtcy4gQXMgdGhleSdyZSBpbXBsZW1lbnRlZCBvbiBvdGhlciBwbGF0Zm9ybXMgdGhpcyBs
aXN0IHNob3VsZCBiZSBtb2RpZmllZC4KKyNpZiAhUExBVEZPUk0oTUFDKQorYm9vbCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNWYWx1ZVJlZikgeyBy
ZXR1cm4gZmFsc2U7IH0KK2Jvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlm
aWNhdGlvbkxpc3RlbmVyKCkgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogICAgIAogfSAvLyBu
YW1lc3BhY2UgV1RSCiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDEwMTM4NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTggKzQ5LDIzIEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGZvY3VzZWRF
bGVtZW50KCk7CiAgICAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBlbGVtZW50
QXRQb2ludChpbnQgeCwgaW50IHkpOwogCisgICAgYm9vbCBhZGROb3RpZmljYXRpb25MaXN0ZW5l
cihKU1ZhbHVlUmVmIGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIGJvb2wgcmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIoKTsKKwogICAgIC8vIEhlcmUgZm9yIGNvbnNpc3RlbmN5IHdpdGggRFJULiBO
b3QgaW1wbGVtZW50ZWQgYmVjYXVzZSB0aGV5IGRvbid0IGRvIGFueXRoaW5nIG9uIHRoZSBNYWMu
CiAgICAgdm9pZCBsb2dGb2N1c0V2ZW50cygpIHsgfQogICAgIHZvaWQgbG9nVmFsdWVDaGFuZ2VF
dmVudHMoKSB7IH0KICAgICB2b2lkIGxvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKCkgeyB9CiAgICAg
dm9pZCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKCkgeyB9Ci0gICAgdm9pZCBhZGROb3RpZmljYXRp
b25MaXN0ZW5lcihBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiwgSlNWYWx1ZVJlZiBmdW5jdGlvbkNh
bGxiYWNrKSB7IH0KLSAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqLCBKU1N0cmluZ1JlZiBldmVudE5hbWUpIHsgfQogICAgIAogICAgIHZvaWQgcmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZSgpIHsgfQogCiBwcml2YXRlOgogICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPE5vdGlmaWNh
dGlvbkhhbmRsZXI+IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcjsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cAkocmV2aXNpb24gMTAxMzg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDggQEAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OkFjY2Vzc2liaWxpdHlUZQogfQogCiBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29uc3QgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXImIG1hcmtlcikKLSAgICA6IG1fdGV4dE1hcmtlcihtYXJrZXIu
cGxhdGZvcm1UZXh0TWFya2VyKCkpCisgICAgOiBKU1dyYXBwYWJsZSgpCisgICAgLCBtX3RleHRN
YXJrZXIobWFya2VyLnBsYXRmb3JtVGV4dE1hcmtlcigpKQogewogfQogCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHAJKHJldmlzaW9uIDEwMTM4NikKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZTo6QWNjZXNzaWJpbAogfQogCiBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnN0IEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UmIG1hcmtlclJhbmdlKQotICAgIDogbV90ZXh0TWFya2VyUmFuZ2Uo
bWFya2VyUmFuZ2UucGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKSkKKyAgICA6IEpTV3JhcHBhYmxl
KCkKKyAgICAsIG1fdGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlLnBsYXRmb3JtVGV4dE1hcmtl
clJhbmdlKCkpCiB7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuaWRsCShyZXZpc2lvbiAxMDEzODYpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQCBtb2R1bGUgV1RSIHsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgZm9jdXNlZEVsZW1lbnQ7
CiAgICAgICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgZWxlbWVudEF0UG9pbnQoaW4gaW50IHgs
IGluIGludCB5KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXIoaW4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBlbGVtZW50LCBpbiBvYmplY3QgZnVuY3Rpb25D
YWxsYmFjayk7Ci0gICAgICAgIHZvaWQgbm90aWZpY2F0aW9uUmVjZWl2ZWQoaW4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBlbGVtZW50LCBpbiBET01TdHJpbmcgZXZlbnROYW1lKTsKKyAgICAgICAg
Ym9vbGVhbiBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihpbiBvYmplY3QgZnVuY3Rpb25DYWxsYmFj
ayk7CisgICAgICAgIGJvb2xlYW4gcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKIAogICAg
ICAgICB2b2lkIGxvZ0ZvY3VzRXZlbnRzKCk7CiAgICAgICAgIHZvaWQgbG9nVmFsdWVDaGFuZ2VF
dmVudHMoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFj
Lm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgorCitu
YW1lc3BhY2UgV1RSIHsKKworYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIoSlNWYWx1ZVJlZiBmdW5jdGlvbkNhbGxiYWNrKSB7CisgICAgaWYgKCFm
dW5jdGlvbkNhbGxiYWNrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBNYWMgcHJv
Z3JhbW1lcnMgc2hvdWxkIG5vdCBiZSBhZGRpbmcgbW9yZSB0aGFuIG9uZSBnbG9iYWwgbm90aWZp
Y2F0aW9uIGxpc3RlbmVyLgorICAgIC8vIE90aGVyIHBsYXRmb3JtcyBtYXkgYmUgZGlmZmVyZW50
LgorICAgIGlmIChtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyIGFsbG9jXSBpbml0XTsKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRp
b25IYW5kbGVyLmdldCgpIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworICAgIFttX2ds
b2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIuZ2V0KCkgc3RhcnRPYnNlcnZpbmddOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlm
aWNhdGlvbkxpc3RlbmVyKCkgeworICAgIC8vIE1hYyBwcm9ncmFtbWVycyBzaG91bGQgbm90IGJl
IHRyeWluZyB0byByZW1vdmUgYSBsaXN0ZW5lciB0aGF0J3MgYWxyZWFkeSByZW1vdmVkLgorICAg
IEFTU0VSVChtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpOworICAgIG1fZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlci5jbGVhcigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcl9oCisK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisKK0BpbnRlcmZhY2UgQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgOiBOU09iamVjdCB7CisgICAgaWQgbV9wbGF0
Zm9ybUVsZW1lbnQ7CisgICAgSlNWYWx1ZVJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2s7Cit9CisKKy0gKGlkKWluaXQ7CistICh2b2lkKXNldFBsYXRmb3JtRWxlbWVudDooaWQpcGxh
dGZvcm1FbGVtZW50OworLSAodm9pZClzZXRDYWxsYmFjazooSlNWYWx1ZVJlZiljYWxsYmFjazsK
Ky0gKHZvaWQpc3RhcnRPYnNlcnZpbmc7CisKK0BlbmQKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyX2gKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgorI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQ
YWdlLmgiCisjaW1wb3J0ICJKU1dyYXBwZXIuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWZDRi5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0J1bmRsZUZyYW1lLmg+CisjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQWRkaXRpb25zKQorKyAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3Q7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNTdHJpbmcg
KEpTU3RyaW5nUmVmQWRkaXRpb25zKQorLSAoSlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWY7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMp
CisKKy0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5nUmVmCit7CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilzZWxmKTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIKKworLSAoaWQp
aW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgbV9wbGF0Zm9ybUVsZW1lbnQgPSBuaWw7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2V0UGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1lbnQKK3sKKyAg
ICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjpzZWxmXTsKKworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworCisgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0
LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOworICAgIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayA9IDA7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
c2V0Q2FsbGJhY2s6KEpTVmFsdWVSZWYpY2FsbGJhY2sKK3sKKyAgICBpZiAoIWNhbGxiYWNrKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKworICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0
aW9uQ2FsbGJhY2spCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgbV9ub3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKKworICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayk7Cit9CisKKy0gKHZvaWQpc3RhcnRPYnNlcnZpbmcKK3sKKyAg
ICAvLyBPbmNlIHdlIHN0YXJ0IHJlcXVlc3Rpbmcgbm90aWZpY2F0aW9ucywgaXQncyBvbiBmb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgorICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55
IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBv
ZmYuIEluc3RlYWQKKyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4g
aWdub3JlIGV2ZW50cyBpdCBkb2Vzbid0IGNhcmUgYWJvdXQuCisgICAgaWQgd2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIiKTsKKyAgICBBU1NFUlQod2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJDbGFzcyk7CisgICAgW3dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MgYWNj
ZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKKyAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlv
biIgb2JqZWN0Om5pbF07Cit9CisKKy0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25O
YW1lID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlv
bk5hbWUiXTsKKyAgICBpZiAoIW5vdGlmaWNhdGlvbk5hbWUpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNh
dGlvbiBvYmplY3RdKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKKworICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUg
Y3JlYXRlSlNTdHJpbmdSZWZdKTsKKyAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1
bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZpY2F0aW9uLmdldCgpKTsK
KyAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKKyAgICAgICAgLy8gTGlzdGVuZXIgZm9yIG9u
ZSBlbGVtZW50IGp1c3QgZ2V0cyBvbmUgYXJndW1lbnQsIHRoZSBub3RpZmljYXRpb24gbmFtZS4K
KyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2Jq
ZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spLCAwLCAxLCAmbm90aWZpY2F0
aW9uTmFtZUFyZ3VtZW50LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBIGdsb2JhbCBs
aXN0ZW5lciBnZXRzIHRoZSBlbGVtZW50IGFuZCB0aGUgbm90aWZpY2F0aW9uIG5hbWUgYXMgYXJn
dW1lbnRzLgorICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXTsKKyAgICAgICAgYXJndW1l
bnRzWzBdID0gdG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNyZWF0ZShbbm90aWZpY2F0aW9uIG9iamVjdF0pKSk7CisgICAgICAgIGFyZ3VtZW50
c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1
bmN0aW9uQ2FsbGJhY2spLCAwLCAyLCBhcmd1bWVudHMsIDApOworICAgIH0KK30KKworQGVuZAor
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlz
aW9uIDEwMTM4NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmgi
CiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdl
LmgiCkBAIC02MCw3ICs2MSw2IEBAIHR5cGVkZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9u
Q2FsbGIKIAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0eUFkZGl0aW9u
cykKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6KE5TU3Ry
aW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRlZ2VyKWluZGV4IG1heENvdW50OihOU1VJbnRl
Z2VyKW1heENvdW50OwotLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczooQk9PTClyZXBvc3Q7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9m
Q2hpbGQ6KGlkKWNoaWxkOwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1
dGVDb3VudDooTlNTdHJpbmcgKilhdHRyaWJ1dGU7CiBAZW5kCkBAIC04OCw3NiArODgsNiBAQCAt
IChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZgogCiBAZW5kCiAKLUBpbnRlcmZhY2UgQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgOiBOU09iamVjdAotewotICAgIGlkIG1fcGxh
dGZvcm1FbGVtZW50OwotICAgIEpTVmFsdWVSZWYgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlcgotCi0tIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVudDooaWQpcGxhdGZvcm1F
bGVtZW50Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLQotICAgIG1fcGxhdGZvcm1FbGVt
ZW50ID0gcGxhdGZvcm1FbGVtZW50OwotICAgIAotICAgIC8vIE9uY2UgYW4gb2JqZWN0IHN0YXJ0
cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0
aGUgcHJvZ3JhbS4KLSAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMg
YmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCi0gICAg
Ly8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGp1c3QgbGlzdGVuIHdoZW4g
dGhleSB3YW50IHRvLgotICAgIFttX3BsYXRmb3JtRWxlbWVudCBhY2Nlc3NpYmlsaXR5U2V0U2hv
dWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlm
aWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotIAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLQot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0Nv
bnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUpOwotICAgIAotICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrKTsKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sg
PSAwOwotICAgIAotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClfbm90aWZpY2F0
aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgTlNTdHJp
bmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9y
S2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwotICAgIGlmICghbm90aWZpY2F0aW9uTmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmlu
Z1JlZl0pOwotICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250
ZXh0LCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihj
b250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2Fs
bGJhY2spLCAwLCAxLCAmYXJndW1lbnQsIDApOwotfQotCi0tICh2b2lkKXNldENhbGxiYWNrOihK
U1ZhbHVlUmVmKWNhbGxiYWNrCi17Ci0gICAgaWYgKCFjYWxsYmFjaykKLSAgICAgICAgcmV0dXJu
OwotIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgb2xkIGNhbGxiYWNrLgotICAgIGlm
IChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spIAotICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgCi0gICAg
bV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgSlNWYWx1ZVBy
b3RlY3QoY29udGV4dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLX0KLQotQGVu
ZAotCiBuYW1lc3BhY2UgV1RSIHsKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQpAQCAtMTY5LDcgKzk5LDgg
QEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRQogfQogCiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKKyAg
ICA6IEpTV3JhcHBhYmxlKCkKKyAgICAsIG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCiAgICAg
LCBtX25vdGlmaWNhdGlvbkhhbmRsZXIoMCkKIHsKICAgICBbbV9lbGVtZW50IHJldGFpbl07CkBA
IC0xMTQ4LDYgKzEwNzksOCBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFj
Y2VzCiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV0pOwogICAgIEVORF9B
WF9PQkpDX0VYQ0VQVElPTlMgICAgICAgIAorCisgICAgcmV0dXJuIDA7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5n
ZSgpCkBAIC0xMjQ0LDggKzExNzcsMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
ZGROb3RpZmljYQogICAgIC8vIE90aGVyIHBsYXRmb3JtcyBtYXkgYmUgZGlmZmVyZW50LgogICAg
IGlmIChtX25vdGlmaWNhdGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X25vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
IGFsbG9jXSBpbml0V2l0aFBsYXRmb3JtRWxlbWVudDpwbGF0Zm9ybVVJRWxlbWVudCgpXTsKKyAg
ICBtX25vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyIGFsbG9jXSBpbml0XTsKKyAgICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHNldFBsYXRmb3Jt
RWxlbWVudDpwbGF0Zm9ybVVJRWxlbWVudCgpXTsKICAgICBbbV9ub3RpZmljYXRpb25IYW5kbGVy
IHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworICAgIFttX25vdGlmaWNhdGlvbkhhbmRs
ZXIgc3RhcnRPYnNlcnZpbmddOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTAxMzg2KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKIAkJNjUxMEE3OEIxMUVDNjQzODAwNDEw
ODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4MDExRUM2NDM4MDA0MTA4NjcgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJCTY1MTBBNzhDMTFFQzY0MzgwMDQxMDg2
NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODExMUVDNjQzODAwNDEwODY3IC8qIFdlYktp
dFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk2NUVCODVBMDExRUM2N0NDMDAzNEQzMDAg
LyogQWN0aXZhdGVGb250cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzLm1tICov
OyB9OworCQk4MDM0QzY2MjE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0g
Ki87IH07CisJCTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJQTY2NEJDNzYxM0E1RjNBOTAwOUE3QjI1IC8qIGxpYldl
YkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVz
dFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCUJDMTRFNERCMTIwRTAyRDAwMDgyNkMwQyAvKiBHQ0Nv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5jcHAgKi87IH07CiAJ
CUJDMTRFNEVBMTIwRTAzRDgwMDgyNkMwQyAvKiBKU0dDQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0RTRFODEyMEUwM0Q4MDA4
MjZDMEMgLyogSlNHQ0NvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtMTQ1LDYgKzE0Nyw5IEBACiAJ
CTY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5h
bWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdo
dFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RDEx
RUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBY3RpdmF0ZUZvbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWN0aXZhdGVGb250cy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODAzNEM2NjExNDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgwOTcz
Mzg4MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgwOTczMzg5MTQ4NzRBNUEwMDgxNTZE
OSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
Lm1tOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogV2Vi
S2l0VGVzdFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBw
YXRoID0gV2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJQkMxNEU0RDgxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgyLDYgKzI4Nyw5IEBACiAJCTI5QThG
Q0UwMTQ1RjAzNUQwMDkwNDVBNiAvKiBBY2Nlc3NpYmlsaXR5ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyog
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8sCisJCQkJODA5NzMzODgxNDg3NEE1QTAw
ODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8sCisJCQkJODA5
NzMzODkxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
Lm1tICovLAogCQkJCTI5MjEwRUEyMTQ0Q0FBQTUwMDgzNUJCNSAvKiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5jcHAgKi8sCiAJCQkJMjkyMTBFQTMxNDRDQUFBNTAwODM1QkI1IC8qIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmggKi8sCiAJCQkJMjkyMTBFQTkxNDRDQUNCMjAwODM1QkI1IC8qIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwICovLApAQCAtNTg4LDYgKzU5Niw4IEBACiAJCQkJMjlB
OEZDREQxNDVGMDMzNzAwOTA0NUE2IC8qIEpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUE4RkNFMjE0NUYwMzdCMDA5MDQ1QTYgLyogQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUE4RkNFNTE0
NUYwNDY0MDA5MDQ1QTYgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZU1hYy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTgwMzRDNjYyMTQ4NzYz
NjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNjI1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMTEtMzAgIERvbWluaWMgTWF6em9u
aSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eTogQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIgc2hvdWxkIHN1cHBvcnQgbGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlv
bnMgb24gYWxsIGVsZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzI4NjYKKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgTWFjIGltcGxlbWVu
dGF0aW9uIG9mIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIK
KyAgICAgICAgaW5jb3JyZWN0bHkgdHJpZ2dlcmVkIG9uIG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwg
ZWxlbWVudHMuIE5vdyBpdCBvbmx5IHRyaWdnZXJzIG9uCisgICAgICAgIG5vdGlmaWNhdGlvbnMg
ZnJvbSB0aGUgY29ycmVjdCBlbGVtZW50LCBhbmQgYSBuZXcgYWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXIgbWV0aG9kCisgICAgICAgIGluIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGNhbiBiZSB1c2Vk
IHRvIHRyaWdnZXIgb24gbm90aWZpY2F0aW9ucyBmcm9tIGFsbCBlbGVtZW50cy4KKworICAgICAg
ICBVcGRhdGVzIDIgdGVzdHMgdGhhdCBkZXBlbmRlZCBvbiB0aGUgb2xkIGluY29ycmVjdCBiZWhh
dmlvci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5l
cnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWV4cGFuZGVkLW5vdGlm
aWNhdGlvbnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlh
LWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTEtMTEtMzAgIEhh
eWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIENo
cm9taXVtIHJlYmFzZWxpbmVzIGZvciBzdmcgdGVzdHMuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVy
cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAg
ICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0
aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRv
IHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5l
ciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLiIpOworCisgICAgICAgIHdpbmRvdy5zZWxl
Y3ROb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgICAgIHdpbmRvdy5zbGlkZXJOb3RpZmljYXRp
b25Db3VudCA9IDA7CisgICAgICAgIHdpbmRvdy5nbG9iYWxOb3RpZmljYXRpb25Db3VudCA9IDA7
CisKKyAgICAgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVjdCIpLmZvY3VzKCk7CisgICAgICAg
ICAgICB3aW5kb3cuc2VsZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1l
bnQ7CisgICAgICAgICAgICBzZWxlY3QuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoZnVuY3Rpb24o
bm90aWZpY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0Tm90aWZpY2F0aW9uQ291bnQr
KzsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiU0VMRUNUICIgKyBub3RpZmljYXRpb24gKyAiPGJy
PiIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzbGlkZXIiKS5mb2N1cygpOworICAgICAgICAgICAgd2luZG93LnNsaWRlciA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICAgICAgc2xpZGVyLmFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9uKG5vdGlmaWNhdGlvbikgeworICAgICAgICAg
ICAgICAgIHNsaWRlck5vdGlmaWNhdGlvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgZGVidWco
IlNMSURFUiAiICsgbm90aWZpY2F0aW9uICsgIjxicj4iKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hZGROb3RpZmljYXRpb25MaXN0ZW5l
cihmdW5jdGlvbihlbGVtZW50LCBub3RpZmljYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudC5pc0VxdWFsKHNsaWRlcikgfHwgZWxlbWVudC5pc0VxdWFsKHNlbGVjdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgZGVidWcoIkdMT0JBTCAiICsgbm90aWZpY2F0aW9uICsgIiBvbiBlbGVtZW50IHdp
dGggcm9sZSAiICsgZWxlbWVudC5yb2xlICsgIjxicj4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIHRyaWdn
ZXIgYSAiaW52YWxpZCBzdGF0dXMgY2hhbmdlZCIgbm90aWZpY2F0aW9uIG9uIHRoZSBzZWxlY3Qu
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxlY3QiKS5zZXRBdHRyaWJ1dGUo
ImFyaWEtaW52YWxpZCIsICJ0cnVlIik7CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgdHJpZ2dl
ciBhICJ2YWx1ZSBjaGFuZ2VkIiBub3RpZmljYXRpb24gb24gdGhlIHNsaWRlci4KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1
ZW5vdyIsICI2Iik7CisKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBzaG91bGRCZSgic2VsZWN0Tm90aWZpY2F0aW9uQ291bnQiLCAiMSIpOworICAg
ICAgICAgICAgc2hvdWxkQmUoInNsaWRlck5vdGlmaWNhdGlvbkNvdW50IiwgIjEiKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlKCJnbG9iYWxOb3RpZmljYXRpb25Db3VudCIsICIyIik7CisKKyAgICAg
ICAgICAgIGRlYnVnKCI8YnIgLz48c3BhbiBjbGFzcz0ncGFzcyc+VEVTVCBDT01QTEVURTwvc3Bh
bj4iKTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikg
eworICAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0LnJlbW92ZU5vdGlmaWNhdGlv
bkxpc3RlbmVyKCk7CisgICAgICAgICAgICAgICAgc2xpZGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9LCAxMCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0VGltZW91dChydW5UZXN0LCAxMCk7Cisg
ICAgICAgIH0sIGZhbHNlKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8
c2VsZWN0IGlkPSJzZWxlY3QiIHZhbHVlPSJTZWxlY3QiPjxvcHRpb24+QTxvcHRpb24+Qjwvc2Vs
ZWN0PgorCis8ZGl2IGlkPSJzbGlkZXIiIHRhYmluZGV4PSIwIiByb2xlPSJzbGlkZXIiIGFyaWEt
dmFsdWVub3c9IjUiPlNsaWRlcjwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5l
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2FjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5
L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIxIEBACisKK1NsaWRlcgorVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxpc3Rl
bmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0
aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3RpZmlj
YXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU0VMRUNUIEludmFsaWRT
dGF0dXNDaGFuZ2VkCisKK0dMT0JBTCBJbnZhbGlkU3RhdHVzQ2hhbmdlZCBvbiBlbGVtZW50IHdp
dGggcm9sZSBBWFJvbGU6IEFYUG9wVXBCdXR0b24KKworU0xJREVSIFZhbHVlQ2hhbmdlZAorCitH
TE9CQUwgVmFsdWVDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhTbGlkZXIK
KworUEFTUyBzZWxlY3ROb3RpZmljYXRpb25Db3VudCBpcyAxCitQQVNTIHNsaWRlck5vdGlmaWNh
dGlvbkNvdW50IGlzIDEKK1BBU1MgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQgaXMgMgorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiAxMDEz
MjkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpA
QCAtNDE0LDYgKzQxNCw3IEBAIGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwK
IGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAogYWNj
ZXNzaWJpbGl0eS9sb2FkaW5nLWlmcmFtZS11cGRhdGVzLWF4dHJlZS5odG1sCithY2Nlc3NpYmls
aXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMuaHRtbAogYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhh
bmRsZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAogYWNjZXNzaWJpbGl0
eS9wbHVnaW4uaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJpYS1leHBhbmRlZC1ub3RpZmljYXRpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1leHBhbmRlZC1ub3RpZmljYXRp
b25zLmh0bWwJKHJldmlzaW9uIDEwMTMyOSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtZXhwYW5kZWQtbm90aWZpY2F0aW9ucy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMSArMjksMTEgQEAKICAgICB2YXIgbm90aWZ5Q291bnQgPSAwOwogICAgIHZh
ciBub3RpZnlOYW1lID0gMDsKICAgICAvLyBUaGUgb3JkZXIgb2Ygbm90aWZpY2F0aW9ucyBzaG91
bGQgYmUgUm93IENvdW50LCBSb3cgQ29sbGFwc2VkLCBSb3cgQ291bnQsIFJvdyBFeHBhbmRlZAot
ICAgIGZ1bmN0aW9uIG5vdGlmeUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgeyAgCisgICAgZnVuY3Rp
b24gbm90aWZ5Q2FsbGJhY2soZWxlbWVudCwgbm90aWZpY2F0aW9uKSB7ICAKICAgICAgICAgbm90
aWZ5TmFtZSA9IG5vdGlmaWNhdGlvbjsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im5vdGlmaWNhdGlvbnMiKS5pbm5lckhUTUwgKz0gIk5vdGlmaWNhdGlvbjogIiArIG5vdGlmeU5h
bWUgKyAiPGJyPiI7CiAgICAgICAgIGlmIChub3RpZnlDb3VudCA9PSAzKSB7Ci0gICAgICAgICAg
ICBheFRyZWUucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgIGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgICAg
ICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgICAgICB9
CiAgICAgICAgIG5vdGlmeUNvdW50Kys7CkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgICAgICAgYXhU
cmVlID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogCi0g
ICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGF4VHJlZS5hZGROb3RpZmljYXRpb25MaXN0
ZW5lcihub3RpZnlDYWxsYmFjayk7CisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmeUNhbGxi
YWNrKTsKICAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKIAog
ICAgICAgICAvLyB0aGUgZmlyc3QgYXJpYS1leHBhbmRlZCBzaG91bGQgZ2VuZXJhdGUgcm93IGNv
dW50LCByb3cgY29sbGFwc2VkLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0
Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwJKHJldmlzaW9uIDEwMTMyOSkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGlzdGJveC1zZWxlY3Rl
ZGNoaWxkcmVuLWNoYW5nZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMyArMjAsMTMgQEAK
IAogICAgIHZhciBsaXN0Ym94ID0gMDsKICAgICB2YXIgbm90aWZpY2F0aW9uQ291bnQgPSAwOwot
ICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAgICBmdW5jdGlvbiBh
cmlhQ2FsbGJhY2soZWxlbWVudCwgbm90aWZpY2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmlj
YXRpb24gPT0gIkFYU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQiKSB7CiAgICAgICAgICAgICBub3Rp
ZmljYXRpb25Db3VudCsrOwogCiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgZ2V0IGEgdG90YWwg
b2YgNCBsaXZlIHJlZ2lvbiBjaGFuZ2VzLgogICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbkNv
dW50ID09IDIpIHsKLSAgICAgICAgICAgICAgIGxpc3Rib3gucmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXIoKTsKKyAgICAgICAgICAgICAgIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5y
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOwogICAgICAgICAgICAgICAgd2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzgsNyArMzgsNyBAQAogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGlzdGJv
eCIpLmZvY3VzKCk7CiAgICAgICAgIGxpc3Rib3ggPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuZm9jdXNlZEVsZW1lbnQ7CiAKLSAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0aW9uID0g
bGlzdGJveC5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOworICAgICAgICB2
YXIgYWRkZWROb3RpZmljYXRpb24gPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKICAgICAgICAgc2hvdWxkQmUoImFk
ZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKIAogICAgICAgICAvLyBUaGVzZSBzaG91bGQgZWFj
aCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhlIHNlbGVjdGVkIGNoaWxkcmVuIGNoYW5n
ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmlj
YXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIxIEBACisKK1NsaWRlcgorVGhpcyB0ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxp
c3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRvIHRoYXQgb25lIGVsZW1lbnQsIGFu
ZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3Rp
ZmljYXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworU0VMRUNUIEFYSW52
YWxpZFN0YXR1c0NoYW5nZWQKKworR0xPQkFMIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQgb24gZWxl
bWVudCB3aXRoIHJvbGUgQVhSb2xlOiBBWFBvcFVwQnV0dG9uCisKK1NMSURFUiBBWFZhbHVlQ2hh
bmdlZAorCitHTE9CQUwgQVhWYWx1ZUNoYW5nZWQgb24gZWxlbWVudCB3aXRoIHJvbGUgQVhSb2xl
OiBBWFNsaWRlcgorCitQQVNTIHNlbGVjdE5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1Mgc2xp
ZGVyTm90aWZpY2F0aW9uQ291bnQgaXMgMQorUEFTUyBnbG9iYWxOb3RpZmljYXRpb25Db3VudCBp
cyAyCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJl
dmlzaW9uIDEwMTMyOSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODAsNiArNTgwLDcgQEAgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50
Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9jaGlsZHJlbi1lbGVtZW50cy5odG1sCiBhY2Nlc3NpYmls
aXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sCiBhY2Nlc3NpYmls
aXR5L25vbi1uYXRpdmUtaW1hZ2UtY3Jhc2guaHRtbAorYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRp
b24tbGlzdGVuZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvb25jbGljay1oYW5kbGVycy5odG1sCiBh
Y2Nlc3NpYmlsaXR5L2FyaWEtb3B0aW9uLXJvbGUuaHRtbAogYWNjZXNzaWJpbGl0eS9wbGFjZWhv
bGRlci5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118417</attachid>
            <date>2011-12-08 10:31:43 -0800</date>
            <delta_ts>2011-12-08 13:27:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-72866-20111208103139.patch</filename>
            <type>text/plain</type>
            <size>69580</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjMxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTA4ICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3RpZmljYXRpb25zIG9uIGFs
bCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyODY2CisKKyAgICAgICAgQ2hhbmdlcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9ucyBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICBpbnRvIGEgY2xh
c3MgbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBub3RpZmljYXRpb24g
bGlzdGVuZXJzLAorICAgICAgICBub3QganVzdCBmb3IgbGlzdGVuZXJzIG9uIGEgcGFydGljdWxh
ciBvYmplY3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCisKKyAgICAg
ICAgVGVzdDogYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOl0p
OgorCiAyMDExLTEyLTA3ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZWZhY3RvciBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oCShyZXZpc2lvbiAxMDIzMTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIEBpbnRlcmZhY2UgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIKIC0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDoo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3Q7CiAtICh2b2lkKWRldGFjaDsK
IC0gKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3Q7Cisr
ICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJl
cG9zdDsKIAogLy8gVXNlZCB0byBpbmZvcm0gYW4gZWxlbWVudCB3aGVuIGEgbm90aWZpY2F0aW9u
IGlzIHBvc3RlZCBmb3IgaXQuIFVzZWQgYnkgRFJULgogLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9z
dGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gMTAyMzEzKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNzcsNyArMzE3Nyw3IEBAIC0gKE5TQXJyYXkgKilhY2Nl
c3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGUKIAogLy8gVGhpcyBpcyBzZXQgYnkgRFJUIHdoZW4gaXQg
d2FudHMgdG8gbGlzdGVuIGZvciBub3RpZmljYXRpb25zLgogc3RhdGljIEJPT0wgYWNjZXNzaWJp
bGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM7Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRT
aG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdAorKyAodm9pZClhY2Nlc3NpYmls
aXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3QKIHsKICAgICBhY2Nl
c3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucyA9IHJlcG9zdDsKIH0KQEAgLTMxODYs
NyArMzE4Niw3IEBAIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjoKIHsK
ICAgICBpZiAoYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMpIHsKICAgICAg
ICAgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3RzQW5kS2V5czpub3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCBuaWxd
OwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3Rp
ZmljYXRpb25OYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWwgdXNlckluZm86dXNl
ckluZm9dOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBv
c3ROb3RpZmljYXRpb25OYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpzZWxmIHVzZXJJ
bmZvOnVzZXJJbmZvXTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDExLTEyLTA4ICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFjY2Vzc2liaWxpdHk6
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIHNob3VsZCBzdXBwb3J0IGxpc3RlbmluZyB0byBub3Rp
ZmljYXRpb25zIG9uIGFsbCBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyODY2CisKKyAgICAgICAgQWRkcyBhZGROb3RpZmljYXRpb25M
aXN0ZW5lciBhbmQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIgbWV0aG9kcworICAgICAgICB0
byBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciwgdG8gbGlzdGVuIHRvIG5vdGlmaWNhdGlvbnMgb24g
YW55IGVsZW1lbnQKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBzcGVjaWZpYyBlbGVtZW50LiBNYWMg
KERSVCBhbmQgV0tUUikgYW5kIENocm9taXVtIChEUlQpCisgICAgICAgIGltcGxlbWVudGF0aW9u
cyBhcmUgYWxsIGNvbnRhaW5lZCBpbiB0aGlzIGNoYW5nZS4KKworICAgICAgICBPbiBNYWMsIHJl
ZmFjdG9ycyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBpbnRvIGl0cyBvd24KKyAg
ICAgICAgc291cmNlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSBib3RoIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyIGFuZAorICAgICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LiAoQm90aCBEUlQg
YW5kIFdLVFIuKQorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChyZW1vdmVOb3Rp
ZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxs
YmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDog
QWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTlNTdHJpbmcgY3JlYXRlSlNTdHJp
bmdSZWZdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgaW5p
dF0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzZXRQbGF0
Zm9ybUVsZW1lbnQ6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIgc2V0Q2FsbGJhY2s6XSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyIHN0YXJ0T2JzZXJ2aW5nXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAg
ICAobm90aWZpY2F0aW9uTGlzdGVuZXJQcm9jKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2VpdmVkKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5BZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHMp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHA6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tOiBBZGRl
ZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTogQWRkZWQuCisgICAgICAgICgtW05TU3RyaW5nIGNy
ZWF0ZUpTU3RyaW5nUmVmXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyIGluaXRdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIgc2V0UGxhdGZvcm1FbGVtZW50Ol0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyIHNldENhbGxiYWNrOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBzdGFydE9ic2VydmluZ10pOgorICAgICAgICAoLVtBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudE1hYy5tbToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
V2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDExLTEyLTA3
ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmluZ0J1
aWxkZXJUZXN0LkFwcGVuZCBhbmQgU3RyaW5nQnVpbGRlclRlc3QuVG9TdHJpbmdQcmVzZXJ2ZUNh
cGFjaXR5IGFyZSBmYWlsaW5nLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAyMzEzKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw2ICs5NywyNCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRFbGVtZW50QXRQb2ludENhbGxi
CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1ha2VKU0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQoY29udGV4dCwgY29udHJvbGxlci0+ZWxlbWVudEF0UG9pbnQoeCwgeSkpOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAxKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAK
KyAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBjb250cm9sbGVyLT5h
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihjYWxsYmFjayk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCBzdWNjZWVkZWQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiByZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogSlNDbGFzc1JlZiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCiB7CiAgICAgc3RhdGljIEpTU3Rh
dGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CkBAIC0xMDUsNiArMTIzLDggQEAgSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SgogICAgICAgICB7ICJsb2dTY3Jv
bGxpbmdTdGFydEV2ZW50cyIsIGxvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAibG9nQWNjZXNzaWJpbGl0eUV2ZW50cyIsIGxvZ0FjY2Vzc2liaWxpdHlF
dmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJlbGVtZW50QXRQb2ludCIsIGdldEVs
ZW1lbnRBdFBvaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiYWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIiLCBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgcmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTAyMzEzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsMTUgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKLSAgICB2b2lkIGFkZE5vdGlmaWNh
dGlvbkxpc3RlbmVyKFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxi
YWNrKTsKLSAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBj
b25zdCBzdGQ6OnN0cmluZyYgZXZlbnROYW1lKTsKKyAgICAvLyBHbG9iYWwgbm90aWZpY2F0aW9u
IGxpc3RlbmVyLCBjYXB0dXJlcyBub3RpZmljYXRpb25zIG9uIGFueSBvYmplY3QuCisgICAgYm9v
bCBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKTsK
KyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisKKyNpZiBQTEFURk9STShX
SU4pCisgICAgLy8gSGVscGVyIG1ldGhvZHMgc28gdGhpcyBjbGFzcyBjYW4gYWRkIHRoZSBsaXN0
ZW5lcnMgb24gYmVoYWxmIG9mIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuCisgICAgdm9pZCB3aW5B
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb25DYWxsYmFjayk7CisgICAgdm9pZCB3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9y
bVVJRWxlbWVudCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV2ZW50TmFtZSk7CisjZW5kaWYKIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7CkBAIC02OSw2ICs3Niwx
MCBAQCBwcml2YXRlOgogICAgIEhXSU5FVkVOVEhPT0sgbV9ub3RpZmljYXRpb25zRXZlbnRIb29r
OwogICAgIEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPiBtX25vdGlmaWNh
dGlvbkxpc3RlbmVyczsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0
cjxOb3RpZmljYXRpb25IYW5kbGVyPiBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXI7CisjZW5k
aWYKIH07CiAKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcl9oCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDYgKzc3LDggQEAKIAkJNURCOUFDOUYwRjcyMkMzNjAwNjg0NjQxIC8qIFdl
YktpdFdlaWdodFdhdGNoZXI4MDAudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVGMDk3ODBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0
V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJCTVEQjlBQ0EwMEY3MjJDMzYwMDY4NDY0MSAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1RjA5NzkwREFDM0NCNjAwQzhCNEU1IC8qIFdl
YktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk1REU4QUU0NDEzQTJDMTU5MDBENkEz
N0QgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURFOEFFNDMxM0EyQzE1ODAwRDZBMzdEIC8qIGxp
YldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKKwkJODAwNDVBRUQxNDc3MThFNzAwODI5
MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTgg
LyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLzsgfTsKKwkJODAwNDVBRUUx
NDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODAwNDVBRUMxNDc3
MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovOyB9
OwogCQk4NDY1RTJDNzBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY1RTJDNjBGRkE4
REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTkzM0JGNUFCMEY5
M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNCRjVBOTBGOTNGQTVDMDAwRjA0NDEgLyog
UGxhaW5UZXh0Q29udHJvbGxlci5oICovOyB9OwogCQk5MzNCRjVBQzBGOTNGQTVDMDAwRjA0NDEg
LyogUGxhaW5UZXh0Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzM0JGNUFBMEY5M0ZBNUMwMDBGMDQ0MSAvKiBQbGFpblRleHRDb250
cm9sbGVyLm1tICovOyB9OwpAQCAtMjU4LDYgKzI2MCw4IEBACiAJCTUzQ0JCODMwMTM0RTQyRjMw
MDFDRTZBNCAvKiBDeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTNDQkI4MzExMzRFNDJGMzAwMUNFNkE0IC8qIEN5Y2xpY1JlZHVu
ZGFuY3lDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDeWNsaWNSZWR1
bmRhbmN5Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURFOEFFNDMxM0Ey
QzE1ODAwRDZBMzdEIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHls
aWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQk4MDA0NUFFQjE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4MDA0NUFFQzE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2
NUUyQzYwRkZBOERGMjAwM0I4MzQyIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsRHVtcFN1cHBvcnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTMzQkY1QTkwRjkzRkE1QzAwMEYwNDQxIC8q
IFBsYWluVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UGxhaW5UZXh0Q29udHJvbGxlci5oOyBwYXRoID0gbWFjL1BsYWluVGV4dENvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQzOCw2ICs0NDIsOCBAQAogCQkxNDIyQTI2
OTBBRjZGNDUyMDBFMUE4ODMgLyogQ29udHJvbGxlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTgwMDQ1QUVCMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovLAorCQkJCTgwMDQ1QUVDMTQ3NzE4RTcw
MDgyOTBBOCAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLywKIAkJCQlC
Q0QwOEIzOTBFMTA1N0VGMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwICov
LAogCQkJCUJDRDA4QTU4MEUxMDQ5NkIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oICovLAogCQkJCUJDRDA4QjcwMEUxMDU5RDIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlck1hYy5tbSAqLywKQEAgLTY3OSw2ICs2ODUsNyBAQAogCQkJCTI5Q0ZCQTEwMTIyNzM2
RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJM0E1NjI2Q0MxMzFDQTAzNjAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxN0RBQTFEMTM3QjNFMjQwMDdDNTdGQiAvKiBXZWJDb3JlVGVz
dFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTgwMDQ1QUVEMTQ3NzE4RTcwMDgyOTBBOCAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04
NzksNiArODg2LDcgQEAKIAkJCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRkJBMkUxMjI3M0ExMDAw
QkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJM0E1NjI2Q0IxMzFDQTAyQTAwMkJFNkQ5IC8qIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUubW0g
aW4gU291cmNlcyAqLywKKwkJCQk4MDA0NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsOCBAQCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvCiB7CiAKICAg
ICBiaW5kTWV0aG9kKCJsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzIiwgJkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2Qo
ImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGRO
b3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVOb3Rp
ZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7CiAKICAgICBiaW5kUHJvcGVydHkoImZvY3VzZWRFbGVt
ZW50IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNhbGxi
YWNrKTsKICAgICBiaW5kUHJvcGVydHkoInJvb3RFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyb290RWxlbWVudEdldHRlckNhbGxiYWNrKTsKQEAgLTkzLDggKzk1LDE5IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNob3VsZExvZ0EKIAogdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiB0YXJnZXQsIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpCiB7
CisgICAgLy8gQ2FsbCBub3RpZmljYXRpb24gbGlzdGVuZXJzIG9uIHRoZSBlbGVtZW50LgogICAg
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnRzLmdldE9yQ3JlYXRl
KHRhcmdldCk7CiAgICAgZWxlbWVudC0+bm90aWZpY2F0aW9uUmVjZWl2ZWQobm90aWZpY2F0aW9u
TmFtZSk7CisKKyAgICAvLyBDYWxsIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXJzLgorICAg
IHNpemVfdCBjYWxsYmFja0NvdW50ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAgICAg
IENwcFZhcmlhbnQgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0uc2V0KCplbGVt
ZW50LT5nZXRBc0NwcFZhcmlhbnQoKSk7CisgICAgICAgIGFyZ3VtZW50c1sxXS5zZXQobm90aWZp
Y2F0aW9uTmFtZSk7CisgICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OworICAgICAgICBt
X25vdGlmaWNhdGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgMiwgaW52
b2tlUmVzdWx0KTsKKyAgICB9CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Omxv
Z0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCkBAIC0xMDMsNiArMTE2LDIzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmxvZ0FjY2Vzc2kKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
Ojpmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAg
ICByZXN1bHQtPnNldCgqKGdldEZvY3VzZWRFbGVtZW50KCktPmdldEFzQ3BwVmFyaWFudCgpKSk7
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDYgKzY0LDggQEAgcHJpdmF0ZToKICAgICAvLyBCb3VuZCBtZXRob2RzIGFuZCBwcm9w
ZXJ0aWVzCiAgICAgdm9pZCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZmFsbGJhY2tDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGROb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgdm9pZCBmb2N1c2VkRWxlbWVudEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVyQ2Fs
bGJhY2soQ3BwVmFyaWFudCopOwpAQCAtNzMsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgbV9lbGVtZW50czsKIAorICAgIHN0ZDo6dmVjdG9yPENw
cFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzOworCiAgICAgVGVzdFNoZWxsKiBtX3No
ZWxsOwogfTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAxMDIzMTMpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NywxMCArOTcsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6c2V0TG9nQWNjZQogICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKIH0K
IAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmKQorYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCiB7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25S
ZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCwgY29uc3Qgc3RkOjpzdHJpbmcmKQordm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogewogfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTAyMzEzKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgogI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKICNpbXBvcnQg
PEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAg
LTQwLDYgKzQxLDggQEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDbwog
CiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIHsK
KyAgICAvLyBUaGUgbm90aWZpY2F0aW9uIGhhbmRsZXIgc2hvdWxkIGJlIG5pbCBiZWNhdXNlIHJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhl
IHRlc3QuCisgICAgQVNTRVJUKCFtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIpOwogfQogCiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpCkBAIC04MSwxMCArODQsMjUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6c2V0TG9nQWNjZQogewogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RS
ZWYpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNhdGlvblJl
Y2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25zdCBzdGQ6OnN0cmluZyYpCitib29sIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBm
dW5jdGlvbkNhbGxiYWNrKQogeworICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworIAorICAgIC8vIE1hYyBwcm9ncmFtbWVycyBzaG91bGQgbm90IGJlIGFk
ZGluZyBtb3JlIHRoYW4gb25lIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIuCisgICAgLy8g
T3RoZXIgcGxhdGZvcm1zIG1heSBiZSBkaWZmZXJlbnQuCisgICAgaWYgKG1fZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlciA9IFtbQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgYWxsb2Nd
IGluaXRdOworICAgIFttX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXIuZ2V0KCkgc2V0Q2FsbGJh
Y2s6ZnVuY3Rpb25DYWxsYmFja107CisgICAgW21fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci5n
ZXQoKSBzdGFydE9ic2VydmluZ107CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworICAg
IC8vIE1hYyBwcm9ncmFtbWVycyBzaG91bGQgbm90IGJlIHRyeWluZyB0byByZW1vdmUgYSBsaXN0
ZW5lciB0aGF0J3MgYWxyZWFkeSByZW1vdmVkLgorICAgIEFTU0VSVChtX2dsb2JhbE5vdGlmaWNh
dGlvbkhhbmRsZXIpOworICAgIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci5jbGVhcigpOwog
fQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcl9oCisKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisKK0BpbnRlcmZhY2UgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgOiBOU09iamVjdCB7CisgICAgaWQgbV9wbGF0Zm9y
bUVsZW1lbnQ7CisgICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
OworfQorCistIChpZClpbml0OworLSAodm9pZClzZXRQbGF0Zm9ybUVsZW1lbnQ6KGlkKXBsYXRm
b3JtRWxlbWVudDsKKy0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrOwor
LSAodm9pZClzdGFydE9ic2VydmluZzsKKworQGVuZAorCisjZW5kaWYgLy8gQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQkocmV2
aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oIgorCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYlR5cGVzSW50ZXJuYWwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGlu
dGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBZGRpdGlvbnMp
CisrICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09M
KXJlcG9zdDsKK0BlbmQKKworQGludGVyZmFjZSBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlv
bnMpCistIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZjsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFkZGl0aW9ucykKKworLSAoSlNTdHJpbmdSZWYp
Y3JlYXRlSlNTdHJpbmdSZWYKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoKENGU3RyaW5nUmVmKXNlbGYpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgorCistIChpZClpbml0Cit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBtX3BsYXRm
b3JtRWxlbWVudCA9IG5pbDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRQbGF0
Zm9ybUVsZW1lbnQ6KGlkKXBsYXRmb3JtRWxlbWVudAoreworICAgIG1fcGxhdGZvcm1FbGVtZW50
ID0gcGxhdGZvcm1FbGVtZW50OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworICAg
IEpTVmFsdWVVbnByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrKTsKKyAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sg
PSAwOworICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRDYWxsYmFj
azooSlNPYmplY3RSZWYpY2FsbGJhY2sKK3sKKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICBy
ZXR1cm47CisgCisgICAgaWYgKG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaykgCisgICAg
ICAgIEpTVmFsdWVVbnByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKKyAgICAKKyAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9u
Q2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBKU1ZhbHVlUHJvdGVjdChbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOworfQorCistICh2b2lk
KXN0YXJ0T2JzZXJ2aW5nCit7CisgICAgLy8gT25jZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlm
aWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKyAgICAv
LyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJu
aW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCisgICAgLy8gQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIgY2FuIGlnbm9yZSBldmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0
LgorICAgIGlkIHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MgPSBOU0NsYXNzRnJv
bVN0cmluZyhAIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIik7CisgICAgQVNTRVJUKHdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOworICAgIFt3ZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckNsYXNzIGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRp
b25zOllFU107CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBu
YW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWxdOworfQorCistICh2b2lkKV9ub3Rp
ZmljYXRpb25SZWNlaXZlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBO
U1N0cmluZyAqbm90aWZpY2F0aW9uTmFtZSA9IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmpl
Y3RGb3JLZXk6QCJub3RpZmljYXRpb25OYW1lIl07CisgICAgaWYgKCFub3RpZmljYXRpb25OYW1l
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50ICYmIG1fcGxhdGZv
cm1FbGVtZW50ICE9IFtub3RpZmljYXRpb24gb2JqZWN0XSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZp
Y2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pOworICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0
aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250
ZXh0XSwganNOb3RpZmljYXRpb24uZ2V0KCkpOworICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCkg
eworICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVzdCBnZXRzIG9uZSBhcmd1
bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1lLgorICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0
aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjaywgMCwgMSwgJm5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCBhbmQgdGhlIG5v
dGlmaWNhdGlvbiBuYW1lIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbMl07CisgICAgICAgIGFyZ3VtZW50c1swXSA9IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1h
a2VKU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChbbm90aWZpY2F0aW9uIG9iamVjdF0pKTsKKyAgICAgICAgYXJn
dW1lbnRzWzFdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjaywgMCwgMiwgYXJndW1lbnRzLCAwKTsKKyAgICB9Cit9CisKK0BlbmQKKwpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0JKHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUu
aCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgpAQCAtNjAsNyArNjEsNiBAQCB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNh
dGlvbkNhbGxiCiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRp
dGlvbnMpCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOihO
U1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDooTlNVSW50ZWdlcilpbmRleCBtYXhDb3VudDooTlNV
SW50ZWdlciltYXhDb3VudDsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5v
dGlmaWNhdGlvbnM6KEJPT0wpcmVwb3N0OwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5SW5k
ZXhPZkNoaWxkOihpZCljaGlsZDsKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFycmF5QXR0
cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmlidXRlOwogQGVuZApAQCAtODgsNjYgKzg4LDYg
QEAgLSAoSlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWYKIAogQGVuZAogCi1AaW50ZXJmYWNl
IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIDogTlNPYmplY3QKLXsKLSAgICBpZCBt
X3BsYXRmb3JtRWxlbWVudDsKLSAgICBKU09iamVjdFJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9u
Q2FsbGJhY2s7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIEFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyCi0KLS0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0
Zm9ybUVsZW1lbnQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotCi0gICAgbV9wbGF0Zm9y
bUVsZW1lbnQgPSBwbGF0Zm9ybUVsZW1lbnQ7Ci0gICAgCi0gICAgLy8gT25jZSBhbiBvYmplY3Qg
c3RhcnRzIHJlcXVlc3Rpbmcgbm90aWZpY2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9u
IG9mIHRoZSBwcm9ncmFtLgotICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0
aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQK
LSAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4ganVzdCBsaXN0ZW4g
d2hlbiB0aGV5IHdhbnQgdG8uCi0gICAgW21fcGxhdGZvcm1FbGVtZW50IGFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllFU107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihf
bm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBuYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpu
aWxdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0gCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZd
OwotICAgIEpTVmFsdWVVbnByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3Rp
ZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2Fs
bGJhY2sgPSAwOwotICAgIAotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClfbm90
aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
TlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2Jq
ZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwotICAgIGlmICghbm90aWZpY2F0aW9uTmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBq
c05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZd
KTsKLSAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFt
ZSBnbG9iYWxDb250ZXh0XSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwotICAgIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5j
dGlvbkNhbGxiYWNrLCAwLCAxLCAmYXJndW1lbnQsIDApOwotfQotCi0tICh2b2lkKXNldENhbGxi
YWNrOihKU09iamVjdFJlZiljYWxsYmFjawotewotICAgIGlmICghY2FsbGJhY2spCi0gICAgICAg
IHJldHVybjsKLSAKLSAgICAvLyBSZWxlYXNlIHRoZSBvbGQgY2FsbGJhY2suCi0gICAgaWYgKG1f
bm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaykgCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
W21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
KTsKLSAgICAKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjazsK
LSAgICBKU1ZhbHVlUHJvdGVjdChbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNh
dGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwotfQotCi1AZW5kCi0KIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKICAg
ICA6IG1fZWxlbWVudChlbGVtZW50KQogICAgICwgbV9ub3RpZmljYXRpb25IYW5kbGVyKDApCkBA
IC0xMjI5LDggKzExNjksMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYQogICAgIC8vIE90aGVyIHBsYXRmb3JtcyBtYXkgYmUgZGlmZmVyZW50LgogICAgIGlmICht
X25vdGlmaWNhdGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX25vdGlm
aWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGFsbG9j
XSBpbml0V2l0aFBsYXRmb3JtRWxlbWVudDpwbGF0Zm9ybVVJRWxlbWVudCgpXTsKKyAgICBtX25v
dGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGFs
bG9jXSBpbml0XTsKKyAgICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHNldFBsYXRmb3JtRWxlbWVu
dDpwbGF0Zm9ybVVJRWxlbWVudCgpXTsKICAgICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHNldENh
bGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworICAgIFttX25vdGlmaWNhdGlvbkhhbmRsZXIgc3Rh
cnRPYnNlcnZpbmddOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAJ
KHJldmlzaW9uIDEwMjMxMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw3ICsyNjksNyBAQCBz
dGF0aWMgdm9pZCBDQUxMQkFDSyBub3RpZmljYXRpb25MaXN0ZW5lCiAKICAgICBDT01QdHI8SUFj
Y2Vzc2libGU+IGNoaWxkQWNjZXNzaWJsZShRdWVyeSwgY2hpbGREaXNwYXRjaCk7CiAKLSAgICBz
aGFyZWRGcmFtZUxvYWREZWxlZ2F0ZS0+YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bm90aWZp
Y2F0aW9uUmVjZWl2ZWQoY2hpbGRBY2Nlc3NpYmxlLCBzdHJpbmdFdmVudChldmVudCkpOworICAg
IHNoYXJlZEZyYW1lTG9hZERlbGVnYXRlLT5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT53aW5O
b3RpZmljYXRpb25SZWNlaXZlZChjaGlsZEFjY2Vzc2libGUsIHN0cmluZ0V2ZW50KGV2ZW50KSk7
CiAKICAgICBWYXJpYW50Q2xlYXIoJnZDaGlsZCk7CiB9CkBAIC0yODEsNyArMjgxLDE2IEBAIHN0
YXRpYyBDT01QdHI8SUFjY2Vzc2libGVDb21wYXJhYmxlPiBjb20KICAgICByZXR1cm4gY29tcGFy
YWJsZTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVj
ZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUp
Citib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihK
U09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIo
KQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25S
ZWNlaXZlZChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFt
ZSkKIHsKICAgICBmb3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6
aXRlcmF0b3IgaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25v
dGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewogICAgICAgICBDT01QdHI8SVNlcnZp
Y2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQtPmZpcnN0KTsKQEAgLTMx
MSw3ICszMjAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpCiAg
ICAgfQogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25M
aXN0ZW5lcihQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBKU09iamVjdFJlZiBmdW5jdGlvbkNh
bGxiYWNrKQordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luQWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgSlNPYmplY3RSZWYgZnVuY3Rpb25D
YWxsYmFjaykKIHsKICAgICBpZiAoIW1fbm90aWZpY2F0aW9uc0V2ZW50SG9vaykKICAgICAgICAg
bV9ub3RpZmljYXRpb25zRXZlbnRIb29rID0gU2V0V2luRXZlbnRIb29rKEVWRU5UX01JTiwgRVZF
TlRfTUFYLCBHZXRNb2R1bGVIYW5kbGUoMCksIG5vdGlmaWNhdGlvbkxpc3RlbmVyUHJvYywgR2V0
Q3VycmVudFByb2Nlc3NJZCgpLCAwLCBXSU5FVkVOVF9JTkNPTlRFWFQpOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2lu
LmNwcAkocmV2aXNpb24gMTAyMzEzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEzLDcg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYQogICAgIGlmICghZnVu
Y3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2hhcmVkRnJhbWVM
b2FkRGVsZWdhdGUtPmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKG1fZWxlbWVudCwgZnVuY3Rpb25DYWxsYmFjayk7CisgICAgc2hhcmVkRnJhbWVMb2Fk
RGVsZWdhdGUtPmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPndpbkFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKG1fZWxlbWVudCwgZnVuY3Rpb25DYWxsYmFjayk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDIz
MTMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTIgQEAgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2NlcwogICAgIFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiB1aUVsZW1lbnQgPSByb290RWxlbWVudCgpOwogICAgIHJldHVybiB1aUVs
ZW1lbnQtPmVsZW1lbnRBdFBvaW50KHgsIHkpOwogfQorCisvLyBVbnN1cHBvcnRlZCBtZXRob2Rz
IG9uIHZhcmlvdXMgcGxhdGZvcm1zLiBBcyB0aGV5J3JlIGltcGxlbWVudGVkIG9uIG90aGVyIHBs
YXRmb3JtcyB0aGlzIGxpc3Qgc2hvdWxkIGJlIG1vZGlmaWVkLgorI2lmICFQTEFURk9STShNQUMp
Citib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihK
U1ZhbHVlUmVmKSB7IHJldHVybiBmYWxzZTsgfQorYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlm
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXVFIKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMTAyMzEzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxOCArNDksMjMgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gZm9jdXNlZEVsZW1lbnQoKTsKICAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IGVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSk7CiAKKyAgICBib29sIGFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsYmFjayk7CisgICAgYm9vbCBy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworCiAgICAgLy8gSGVyZSBmb3IgY29uc2lzdGVu
Y3kgd2l0aCBEUlQuIE5vdCBpbXBsZW1lbnRlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgZG8gYW55dGhp
bmcgb24gdGhlIE1hYy4KICAgICB2b2lkIGxvZ0ZvY3VzRXZlbnRzKCkgeyB9CiAgICAgdm9pZCBs
b2dWYWx1ZUNoYW5nZUV2ZW50cygpIHsgfQogICAgIHZvaWQgbG9nU2Nyb2xsaW5nU3RhcnRFdmVu
dHMoKSB7IH0KICAgICB2b2lkIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHMoKSB7IH0KLSAgICB2b2lk
IGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqLCBKU1ZhbHVl
UmVmIGZ1bmN0aW9uQ2FsbGJhY2spIHsgfQotICAgIHZvaWQgbm90aWZpY2F0aW9uUmVjZWl2ZWQo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIEpTU3RyaW5nUmVmIGV2ZW50TmFtZSkgeyB9CiAgICAg
CiAgICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlKCkgeyB9CiAKIHByaXZhdGU6CiAgICAg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRh
aW5QdHI8Tm90aWZpY2F0aW9uSGFuZGxlcj4gbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaWRsCShyZXZpc2lvbiAxMDIzMTMpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQCBtb2R1bGUg
V1RSIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
Zm9jdXNlZEVsZW1lbnQ7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgZWxlbWVudEF0
UG9pbnQoaW4gaW50IHgsIGluIGludCB5KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgYWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIoaW4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBlbGVtZW50LCBpbiBv
YmplY3QgZnVuY3Rpb25DYWxsYmFjayk7Ci0gICAgICAgIHZvaWQgbm90aWZpY2F0aW9uUmVjZWl2
ZWQoaW4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBlbGVtZW50LCBpbiBET01TdHJpbmcgZXZlbnRO
YW1lKTsKKyAgICAgICAgYm9vbGVhbiBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihpbiBvYmplY3Qg
ZnVuY3Rpb25DYWxsYmFjayk7CisgICAgICAgIGJvb2xlYW4gcmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXIoKTsKIAogICAgICAgICB2b2lkIGxvZ0ZvY3VzRXZlbnRzKCk7CiAgICAgICAgIHZvaWQg
bG9nVmFsdWVDaGFuZ2VFdmVudHMoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgorCituYW1lc3BhY2UgV1RSIHsKKworYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNWYWx1ZVJlZiBmdW5jdGlvbkNhbGxiYWNr
KQoreworICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gTWFjIHByb2dyYW1tZXJzIHNob3VsZCBub3QgYmUgYWRkaW5nIG1vcmUgdGhhbiBv
bmUgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lci4KKyAgICAvLyBPdGhlciBwbGF0Zm9ybXMg
bWF5IGJlIGRpZmZlcmVudC4KKyAgICBpZiAobV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0g
W1tBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBhbGxvY10gaW5pdF07CisgICAgW21f
Z2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci5nZXQoKSBzZXRDYWxsYmFjazpmdW5jdGlvbkNhbGxi
YWNrXTsKKyAgICBbbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLmdldCgpIHN0YXJ0T2JzZXJ2
aW5nXTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7CisgICAgLy8gTWFjIHByb2dyYW1t
ZXJzIHNob3VsZCBub3QgYmUgdHJ5aW5nIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQncyBhbHJl
YWR5IHJlbW92ZWQuCisgICAgQVNTRVJUKG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcik7Cisg
ICAgbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLmNsZWFyKCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcl9oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyX2gKKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4K
KworQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0
IHsKKyAgICBpZCBtX3BsYXRmb3JtRWxlbWVudDsKKyAgICBKU1ZhbHVlUmVmIG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjazsKK30KKworLSAoaWQpaW5pdDsKKy0gKHZvaWQpc2V0UGxhdGZv
cm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1lbnQ7CistICh2b2lkKXNldENhbGxiYWNrOihKU1Zh
bHVlUmVmKWNhbGxiYWNrOworLSAodm9pZClzdGFydE9ic2VydmluZzsKKworQGVuZAorCisjZW5k
aWYgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJfaApJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0JKHJldmlzaW9u
IDApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCisjaW1wb3J0
ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKKyNpbXBvcnQgIkpTV3JhcHBlci5oIgorI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLQnVuZGxlRnJhbWUu
aD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBOU09iamVjdCAoV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBZGRpdGlvbnMpCisrICh2b2lkKWFjY2Vzc2liaWxp
dHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKK0BlbmQKKworQGlu
dGVyZmFjZSBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCistIChKU1N0cmluZ1JlZilj
cmVhdGVKU1N0cmluZ1JlZjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChKU1N0
cmluZ1JlZkFkZGl0aW9ucykKKworLSAoSlNTdHJpbmdSZWYpY3JlYXRlSlNTdHJpbmdSZWYKK3sK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNlbGYp
OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlcgorCistIChpZClpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClz
ZXRQbGF0Zm9ybUVsZW1lbnQ6KGlkKXBsYXRmb3JtRWxlbWVudAoreworICAgIG1fcGxhdGZvcm1F
bGVtZW50ID0gcGxhdGZvcm1FbGVtZW50OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZd
OworCisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KG1haW5GcmFtZSk7CisKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
ID0gMDsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRDYWxsYmFjazoo
SlNWYWx1ZVJlZiljYWxsYmFjaworeworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVy
bjsKKworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOworCisgICAgaWYgKG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaykK
KyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9u
Q2FsbGJhY2spOworCisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2FsbGJh
Y2s7CisgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrKTsKK30KKworLSAodm9pZClzdGFydE9ic2VydmluZworeworICAgIC8vIE9uY2Ugd2Ug
c3RhcnQgcmVxdWVzdGluZyBub3RpZmljYXRpb25zLCBpdCdzIG9uIGZvciB0aGUgZHVyYXRpb24g
b2YgdGhlIHByb2dyYW0uCisgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBhbnkgcmFjZSBjb25kaXRp
b25zIGJldHdlZW4gdGVzdHMgdHVybmluZyB0aGlzIGZsYWcgb24gYW5kIG9mZi4gSW5zdGVhZAor
ICAgIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGNhbiBpZ25vcmUgZXZlbnRz
IGl0IGRvZXNuJ3QgY2FyZSBhYm91dC4KKyAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckNsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciIpOworICAgIEFTU0VSVCh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKTsK
KyAgICBbd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcyBhY2Nlc3NpYmlsaXR5U2V0
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25v
dGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmls
XTsKK30KKworLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCit7CisgICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlm
aWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOworICAg
IGlmICghbm90aWZpY2F0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3BsYXRm
b3JtRWxlbWVudCAmJiBtX3BsYXRmb3JtRWxlbWVudCAhPSBbbm90aWZpY2F0aW9uIG9iamVjdF0p
CisgICAgICAgIHJldHVybjsKKworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmlu
Z1JlZl0pOworICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCwganNOb3RpZmljYXRpb24uZ2V0KCkpOworICAgIGlmIChtX3Bs
YXRmb3JtRWxlbWVudCkgeworICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQganVz
dCBnZXRzIG9uZSBhcmd1bWVudCwgdGhlIG5vdGlmaWNhdGlvbiBuYW1lLgorICAgICAgICBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90
aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayksIDAsIDEsICZub3RpZmljYXRpb25OYW1lQXJndW1l
bnQsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVyIGdldHMg
dGhlIGVsZW1lbnQgYW5kIHRoZSBub3RpZmljYXRpb24gbmFtZSBhcyBhcmd1bWVudHMuCisgICAg
ICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdOworICAgICAgICBhcmd1bWVudHNbMF0gPSB0b0pT
KGNvbnRleHQsIFdURjo6Z2V0UHRyKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRl
KFtub3RpZmljYXRpb24gb2JqZWN0XSkpKTsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gbm90aWZp
Y2F0aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRl
eHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFj
ayksIDAsIDIsIGFyZ3VtZW50cywgMCk7CisgICAgfQorfQorCitAZW5kCisKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gMTAyMzEzKQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAK
ICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKICNpbXBvcnQgIklu
amVjdGVkQnVuZGxlLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKQEAgLTYwLDcg
KzYxLDYgQEAgdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYgogCiBAaW50
ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQogLSAoTlNBcnJh
eSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZVZhbHVlczooTlNTdHJpbmcgKilhdHRyaWJ1
dGUgaW5kZXg6KE5TVUludGVnZXIpaW5kZXggbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQ7
Ci0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09M
KXJlcG9zdDsKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hp
bGQ7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0
cmluZyAqKWF0dHJpYnV0ZTsKIEBlbmQKQEAgLTg4LDc2ICs4OCw2IEBAIC0gKEpTU3RyaW5nUmVm
KWNyZWF0ZUpTU3RyaW5nUmVmCiAKIEBlbmQKIAotQGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0Ci17Ci0gICAgaWQgbV9wbGF0Zm9ybUVsZW1lbnQ7
Ci0gICAgSlNWYWx1ZVJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2s7Ci19Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyCi0K
LS0gKGlkKWluaXRXaXRoUGxhdGZvcm1FbGVtZW50OihpZClwbGF0Zm9ybUVsZW1lbnQKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotCi0gICAgbV9wbGF0Zm9ybUVsZW1lbnQgPSBwbGF0Zm9y
bUVsZW1lbnQ7Ci0gICAgCi0gICAgLy8gT25jZSBhbiBvYmplY3Qgc3RhcnRzIHJlcXVlc3Rpbmcg
bm90aWZpY2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgot
ICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3Rz
IHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKLSAgICAvLyBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4ganVzdCBsaXN0ZW4gd2hlbiB0aGV5IHdhbnQgdG8u
Ci0gICAgW21fcGxhdGZvcm1FbGVtZW50IGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3Rp
ZmljYXRpb25zOllFU107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2
ZWQ6KSBuYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWxdOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0gCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotCi0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAg
Ci0gICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2Fs
bGJhY2spOwotICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayA9IDA7Ci0gICAgCi0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKV9ub3RpZmljYXRpb25SZWNlaXZlZDoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBOU1N0cmluZyAqbm90aWZpY2F0
aW9uTmFtZSA9IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJub3RpZmlj
YXRpb25OYW1lIl07Ci0gICAgaWYgKCFub3RpZmljYXRpb25OYW1lKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmlj
YXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAg
SlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZp
Y2F0aW9uLmdldCgpKTsKLSAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0
X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayksIDAsIDEs
ICZhcmd1bWVudCwgMCk7Ci19Ci0KLS0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTVmFsdWVSZWYpY2Fs
bGJhY2sKLXsKLSAgICBpZiAoIWNhbGxiYWNrKQotICAgICAgICByZXR1cm47Ci0gCi0gICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBvbGQgY2FsbGJhY2suCi0gICAgaWYgKG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjaykgCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
bV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLSAgICAKLSAgICBtX25vdGlmaWNhdGlv
bkZ1bmN0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0
LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwotfQotCi1AZW5kCi0KIG5hbWVzcGFj
ZSBXVFIgewogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCkBAIC0xMjQ3LDggKzExNzcsMTAgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYQogICAgIC8vIE90aGVyIHBsYXRmb3Jt
cyBtYXkgYmUgZGlmZmVyZW50LgogICAgIGlmIChtX25vdGlmaWNhdGlvbkhhbmRsZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX25vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGFsbG9jXSBpbml0V2l0aFBsYXRmb3JtRWxlbWVudDpw
bGF0Zm9ybVVJRWxlbWVudCgpXTsKKyAgICBtX25vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGFsbG9jXSBpbml0XTsKKyAgICBbbV9ub3RpZmlj
YXRpb25IYW5kbGVyIHNldFBsYXRmb3JtRWxlbWVudDpwbGF0Zm9ybVVJRWxlbWVudCgpXTsKICAg
ICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOwor
ICAgIFttX25vdGlmaWNhdGlvbkhhbmRsZXIgc3RhcnRPYnNlcnZpbmddOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTAyMzEzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAK
IAkJNjUxMEE3OEIxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4
MDExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJ
CTY1MTBBNzhDMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODEx
MUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk2
NUVCODVBMDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMw
MCAvKiBBY3RpdmF0ZUZvbnRzLm1tICovOyB9OworCQk4MDM0QzY2MjE0ODc2MzY0MDBBQzMyRTkg
LyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi87IH07CisJCTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZE
OSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJQTY2NEJDNzYx
M0E1RjNBOTAwOUE3QjI1IC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYw
MEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCUJDMTRFNERC
MTIwRTAyRDAwMDgyNkMwQyAvKiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdD
Q29udHJvbGxlci5jcHAgKi87IH07CiAJCUJDMTRFNEVBMTIwRTAzRDgwMDgyNkMwQyAvKiBKU0dD
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzE0RTRFODEyMEUwM0Q4MDA4MjZDMEMgLyogSlNHQ0NvbnRyb2xsZXIuY3BwICovOyB9
OwpAQCAtMTQ1LDYgKzE0Nyw5IEBACiAJCTY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJL
aXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0Zjsg
cGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NUVCODU5RDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmF0ZUZvbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3Rp
dmF0ZUZvbnRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWN0
aXZhdGVGb250cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODAzNEM2NjExNDg3
NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMu
bW07IHBhdGggPSBtYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTgwOTczMzg4MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBwYXRoID0gbWFjL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZB
MTA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQkMxNEU0RDgxMjBFMDJEMDAwODI2QzBDIC8q
IEdDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNEU0RDkxMjBFMDJEMDAw
ODI2QzBDIC8qIEdDQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjgyLDYgKzI4Nyw5IEBACiAJCTI5QThGQ0UwMTQ1RjAzNUQwMDkwNDVBNiAvKiBBY2Nlc3NpYmls
aXR5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4MDM0
QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8s
CisJCQkJODA5NzMzODgxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLmggKi8sCisJCQkJODA5NzMzODkxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tICovLAogCQkJCTI5MjEwRUEyMTQ0Q0FBQTUwMDgz
NUJCNSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJMjkyMTBFQTMxNDRD
QUFBNTAwODM1QkI1IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggKi8sCiAJCQkJMjkyMTBF
QTkxNDRDQUNCMjAwODM1QkI1IC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwICovLApAQCAt
NTg4LDYgKzU5Niw4IEBACiAJCQkJMjlBOEZDREQxNDVGMDMzNzAwOTA0NUE2IC8qIEpTQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUE4RkNFMjE0
NUYwMzdCMDA5MDQ1QTYgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyOUE4RkNFNTE0NUYwNDY0MDA5MDQ1QTYgLyogQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTgwOTczMzhBMTQ4NzRBNUEw
MDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTgwMzRDNjYyMTQ4NzYzNjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyMzQzKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MTEtMTItMDggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eTogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgc2hvdWxkIHN1cHBvcnQg
bGlzdGVuaW5nIHRvIG5vdGlmaWNhdGlvbnMgb24gYWxsIGVsZW1lbnRzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NjYKKworICAgICAgICBQcmV2
aW91c2x5LCB0aGUgTWFjIGltcGxlbWVudGF0aW9uIG9mIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIKKyAgICAgICAgaW5jb3JyZWN0bHkgdHJpZ2dlcmVkIG9u
IG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwgZWxlbWVudHMuIE5vdyBpdCBvbmx5IHRyaWdnZXJzIG9u
CisgICAgICAgIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgY29ycmVjdCBlbGVtZW50LCBhbmQgYSBu
ZXcgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIgbWV0aG9kCisgICAgICAgIGluIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyIGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgb24gbm90aWZpY2F0aW9ucyBmcm9t
IGFsbCBlbGVtZW50cy4KKworICAgICAgICBVcGRhdGVzIDIgdGVzdHMgdGhhdCBkZXBlbmRlZCBv
biB0aGUgb2xkIGluY29ycmVjdCBiZWhhdmlvci4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJp
cyBGbGVpemFjaC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3Rl
bmVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmls
aXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9hcmlhLWV4cGFuZGVkLW5vdGlmaWNhdGlvbnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2Uu
aHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24t
bGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL1Nr
aXBwZWQ6CisKIDIwMTEtMTItMDggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2tpcHBpbmcgZmFpbGluZyB0ZXN0LgpJbmRleDog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVu
ZXJzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L25vdGlm
aWNhdGlvbi1saXN0ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKworPHNlbGVjdCBpZD0ic2VsZWN0IiB2YWx1ZT0iU2VsZWN0Ij48
b3B0aW9uPkE8b3B0aW9uPkI8L3NlbGVjdD4KKworPGRpdiBpZD0ic2xpZGVyIiB0YWJpbmRleD0i
MCIgcm9sZT0ic2xpZGVyIiBhcmlhLXZhbHVlbm93PSI1Ij5TbGlkZXI8L2Rpdj4KKworPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0
aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5zIHRv
IHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5l
ciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKworICAgIHdpbmRvdy5zZWxlY3ROb3RpZmljYXRpb25Db3VudCA9IDA7CisgICAg
d2luZG93LnNsaWRlck5vdGlmaWNhdGlvbkNvdW50ID0gMDsKKyAgICB3aW5kb3cuZ2xvYmFsTm90
aWZpY2F0aW9uQ291bnQgPSAwOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcikgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZWN0IikuZm9jdXMo
KTsKKyAgICAgICAgd2luZG93LnNlbGVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3Vz
ZWRFbGVtZW50OworICAgICAgICBzZWxlY3QuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoZnVuY3Rp
b24obm90aWZpY2F0aW9uKSB7CisgICAgICAgICAgICBzZWxlY3ROb3RpZmljYXRpb25Db3VudCsr
OworICAgICAgICAgICAgZGVidWcoIlNFTEVDVCAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpLmZvY3VzKCk7
CisgICAgICAgIHdpbmRvdy5zbGlkZXIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudDsKKyAgICAgICAgc2xpZGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9u
KG5vdGlmaWNhdGlvbikgeworICAgICAgICAgICAgc2xpZGVyTm90aWZpY2F0aW9uQ291bnQrKzsK
KyAgICAgICAgICAgIGRlYnVnKCJTTElERVIgIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgIH0p
OworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGZ1bmN0aW9uKGVsZW1lbnQsIG5vdGlmaWNhdGlvbikgeworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQuaXNFcXVhbChzbGlkZXIpIHx8IGVsZW1lbnQuaXNFcXVhbChzZWxlY3QpKSB7CisgICAg
ICAgICAgICAgICAgZ2xvYmFsTm90aWZpY2F0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICBk
ZWJ1ZygiR0xPQkFMICIgKyBub3RpZmljYXRpb24gKyAiIG9uIGVsZW1lbnQgd2l0aCByb2xlICIg
KyBlbGVtZW50LnJvbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIGEgImludmFsaWQgc3RhdHVzIGNoYW5nZWQiIG5vdGlm
aWNhdGlvbiBvbiB0aGUgc2VsZWN0LgorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxl
Y3QiKS5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsICJ0cnVlIik7CisKKyAgICAvLyBUaGlz
IHNob3VsZCB0cmlnZ2VyIGEgInZhbHVlIGNoYW5nZWQiIG5vdGlmaWNhdGlvbiBvbiB0aGUgc2xp
ZGVyLgorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbGlkZXIiKS5zZXRBdHRyaWJ1dGUo
ImFyaWEtdmFsdWVub3ciLCAiNiIpOworCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgIHNob3VsZEJlKCJzZWxlY3ROb3RpZmljYXRpb25Db3VudCIsICIxIik7Cisg
ICAgICAgIHNob3VsZEJlKCJzbGlkZXJOb3RpZmljYXRpb25Db3VudCIsICIxIik7CisgICAgICAg
IHNob3VsZEJlKCJnbG9iYWxOb3RpZmljYXRpb25Db3VudCIsICIyIik7CisKKyAgICAgICAgaWYg
KHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAgICAgYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAg
IHNlbGVjdC5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAgICAgICAgICAgc2xpZGVy
LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9LCAxMCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L25v
dGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVu
ZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorVGhpcyB0ZXN0
cyB0aGF0IGEgbm90aWZpY2F0aW9uIGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgb25seSBsaXN0ZW5z
IHRvIHRoYXQgb25lIGVsZW1lbnQsIGFuZCB0aGF0IGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0
ZW5lciBsaXN0ZW5zIHRvIGFsbCBub3RpZmljYXRpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworCitTbGlkZXIKK1NFTEVDVCBJbnZhbGlkU3RhdHVzQ2hhbmdlZAorR0xPQkFM
IEludmFsaWRTdGF0dXNDaGFuZ2VkIG9uIGVsZW1lbnQgd2l0aCByb2xlIEFYUm9sZTogQVhQb3BV
cEJ1dHRvbgorU0xJREVSIFZhbHVlQ2hhbmdlZAorR0xPQkFMIFZhbHVlQ2hhbmdlZCBvbiBlbGVt
ZW50IHdpdGggcm9sZSBBWFJvbGU6IEFYU2xpZGVyCitQQVNTIHNlbGVjdE5vdGlmaWNhdGlvbkNv
dW50IGlzIDEKK1BBU1Mgc2xpZGVyTm90aWZpY2F0aW9uQ291bnQgaXMgMQorUEFTUyBnbG9iYWxO
b3RpZmljYXRpb25Db3VudCBpcyAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9u
IDEwMjMxMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNv
cHkpCkBAIC00MjMsNiArNDIzLDcgQEAgYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUu
aHRtbAogYWNjZXNzaWJpbGl0eS9sZWdlbmQuaHRtbAogYWNjZXNzaWJpbGl0eS9saXN0cy5odG1s
CiBhY2Nlc3NpYmlsaXR5L2xvYWRpbmctaWZyYW1lLXVwZGF0ZXMtYXh0cmVlLmh0bWwKK2FjY2Vz
c2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy5odG1sCiBhY2Nlc3NpYmlsaXR5L29uY2xp
Y2staGFuZGxlcnMuaHRtbAogYWNjZXNzaWJpbGl0eS9wbGFjZWhvbGRlci5odG1sCiBhY2Nlc3Np
YmlsaXR5L3BsdWdpbi5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWV4cGFuZGVkLW5vdGlmaWNhdGlvbnMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWV4cGFuZGVkLW5vdGlm
aWNhdGlvbnMuaHRtbAkocmV2aXNpb24gMTAyMzQzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1leHBhbmRlZC1ub3RpZmljYXRpb25zLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogICAgIHZhciBub3RpZnlDb3VudCA9IDA7CiAg
ICAgdmFyIG5vdGlmeU5hbWUgPSAwOwogICAgIC8vIFRoZSBvcmRlciBvZiBub3RpZmljYXRpb25z
IHNob3VsZCBiZSBSb3cgQ291bnQsIFJvdyBDb2xsYXBzZWQsIFJvdyBDb3VudCwgUm93IEV4cGFu
ZGVkCi0gICAgZnVuY3Rpb24gbm90aWZ5Q2FsbGJhY2sobm90aWZpY2F0aW9uKSB7ICAKKyAgICBm
dW5jdGlvbiBub3RpZnlDYWxsYmFjayhlbGVtZW50LCBub3RpZmljYXRpb24pIHsgIAogICAgICAg
ICBub3RpZnlOYW1lID0gbm90aWZpY2F0aW9uOwogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibm90aWZpY2F0aW9ucyIpLmlubmVySFRNTCArPSAiTm90aWZpY2F0aW9uOiAiICsgbm90
aWZ5TmFtZSArICI8YnI+IjsKICAgICAgICAgaWYgKG5vdGlmeUNvdW50ID09IDMpIHsKLSAgICAg
ICAgICAgIGF4VHJlZS5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAgICAgICAgICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKICAg
ICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAg
ICAgIH0KICAgICAgICAgbm90aWZ5Q291bnQrKzsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogICAgICAg
ICBheFRyZWUgPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7
CiAKLSAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0aW9uID0gYXhUcmVlLmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKG5vdGlmeUNhbGxiYWNrKTsKKyAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0aW9u
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIobm90aWZ5
Q2FsbGJhY2spOwogICAgICAgICBzaG91bGRCZSgiYWRkZWROb3RpZmljYXRpb24iLCAidHJ1ZSIp
OwogCiAgICAgICAgIC8vIHRoZSBmaXJzdCBhcmlhLWV4cGFuZGVkIHNob3VsZCBnZW5lcmF0ZSBy
b3cgY291bnQsIHJvdyBjb2xsYXBzZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlh
LWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAkocmV2aXNpb24gMTAyMzQzKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNl
bGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEzICsyMCwx
MyBAQAogCiAgICAgdmFyIGxpc3Rib3ggPSAwOwogICAgIHZhciBub3RpZmljYXRpb25Db3VudCA9
IDA7Ci0gICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgeworICAgIGZ1bmN0
aW9uIGFyaWFDYWxsYmFjayhlbGVtZW50LCBub3RpZmljYXRpb24pIHsKICAgICAgICAgaWYgKG5v
dGlmaWNhdGlvbiA9PSAiQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCIpIHsKICAgICAgICAgICAg
IG5vdGlmaWNhdGlvbkNvdW50Kys7CiAKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBnZXQgYSB0
b3RhbCBvZiA0IGxpdmUgcmVnaW9uIGNoYW5nZXMuCiAgICAgICAgICAgICBpZiAobm90aWZpY2F0
aW9uQ291bnQgPT0gMikgewotICAgICAgICAgICAgICAgbGlzdGJveC5yZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lcigpOworICAgICAgICAgICAgICAgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgICAgICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
aXN0Ym94IikuZm9jdXMoKTsKICAgICAgICAgbGlzdGJveCA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKIAotICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRp
b24gPSBsaXN0Ym94LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFjayk7CisgICAg
ICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOwogICAgICAgICBzaG91bGRC
ZSgiYWRkZWROb3RpZmljYXRpb24iLCAidHJ1ZSIpOwogCiAgICAgICAgIC8vIFRoZXNlIHNob3Vs
ZCBlYWNoIHRyaWdnZXIgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc2VsZWN0ZWQgY2hpbGRyZW4g
Y2hhbmdlZC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L25v
dGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L25vdGlmaWNhdGlvbi1saXN0ZW5lcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvbm90aWZpY2F0aW9uLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgdGVzdHMgdGhhdCBhIG5vdGlmaWNhdGlvbiBsaXN0ZW5l
ciBvbiBhbiBlbGVtZW50IG9ubHkgbGlzdGVucyB0byB0aGF0IG9uZSBlbGVtZW50LCBhbmQgdGhh
dCBhIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIgbGlzdGVucyB0byBhbGwgbm90aWZpY2F0
aW9ucy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworU2xpZGVyCitTRUxFQ1Qg
QVhJbnZhbGlkU3RhdHVzQ2hhbmdlZAorR0xPQkFMIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQgb24g
ZWxlbWVudCB3aXRoIHJvbGUgQVhSb2xlOiBBWFBvcFVwQnV0dG9uCitTTElERVIgQVhWYWx1ZUNo
YW5nZWQKK0dMT0JBTCBBWFZhbHVlQ2hhbmdlZCBvbiBlbGVtZW50IHdpdGggcm9sZSBBWFJvbGU6
IEFYU2xpZGVyCitQQVNTIHNlbGVjdE5vdGlmaWNhdGlvbkNvdW50IGlzIDEKK1BBU1Mgc2xpZGVy
Tm90aWZpY2F0aW9uQ291bnQgaXMgMQorUEFTUyBnbG9iYWxOb3RpZmljYXRpb25Db3VudCBpcyAy
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDEwMjMxMykKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNiArNTgyLDcg
QEAgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9jaGls
ZHJlbi1lbGVtZW50cy5odG1sCiBhY2Nlc3NpYmlsaXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0
bGUtdWktZWxlbWVudC5odG1sCiBhY2Nlc3NpYmlsaXR5L25vbi1uYXRpdmUtaW1hZ2UtY3Jhc2gu
aHRtbAorYWNjZXNzaWJpbGl0eS9ub3RpZmljYXRpb24tbGlzdGVuZXJzLmh0bWwKIGFjY2Vzc2li
aWxpdHkvb25jbGljay1oYW5kbGVycy5odG1sCiBhY2Nlc3NpYmlsaXR5L2FyaWEtb3B0aW9uLXJv
bGUuaHRtbAogYWNjZXNzaWJpbGl0eS9wbGFjZWhvbGRlci5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>