<?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>127586</bug_id>
          
          <creation_ts>2014-01-24 14:33:02 -0800</creation_ts>
          <short_desc>Add support for ActionSheets in WK2 for iOS</short_desc>
          <delta_ts>2022-10-27 09:51:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>971759</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-24 14:33:02 -0800</bug_when>
    <thetext>This bug tracks the work required to support action sheets  in WebKit2 on iOS.

&lt;rdar://problem/15283667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973260</commentid>
    <comment_count>1</comment_count>
      <attachid>222545</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-28 19:13:34 -0800</bug_when>
    <thetext>Created attachment 222545
WebCore Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973263</commentid>
    <comment_count>2</comment_count>
      <attachid>222545</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-28 19:30:58 -0800</bug_when>
    <thetext>Comment on attachment 222545
WebCore Patch

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973268</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-28 20:06:16 -0800</bug_when>
    <thetext>Committed revision 162997.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974475</commentid>
    <comment_count>4</comment_count>
      <attachid>222850</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-31 14:30:08 -0800</bug_when>
    <thetext>Created attachment 222850
WebKit2 patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974477</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-31 14:31:04 -0800</bug_when>
    <thetext>Attachment 222850 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:34:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974493</commentid>
    <comment_count>6</comment_count>
      <attachid>222850</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-31 14:54:25 -0800</bug_when>
    <thetext>Comment on attachment 222850
WebKit2 patch

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

I am not a fan of having WKInteractionView be the delegate of the action sheet. I am afraid this goes in the general design issue of having a single object responding to everything.
Would it be possible to have a wrapper with nice encapsulation or does it has to know too much about the page?

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:41
&gt; +#import &lt;DataDetectorsUI/DDDetectionController.h&gt;
&gt; +#import &lt;SafariServices/SSReadingList.h&gt;
&gt; +#import &lt;TCC/TCC.h&gt;

Import order.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:58
&gt; +#import &lt;WebCore/WebCoreNSURLExtras.h&gt;
&gt; +#import &lt;WebCore/SoftLinking.h&gt;

Import order.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:190
&gt; +    NSArray* _elementActions;

Style for the *.
This should really be a RetainPtr.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:439
&gt; +// WKActionSheetDelegate

#pragma mark - Implementation of WKActionSheetDelegate

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:441
&gt; +- (UIView *)superviewForSheet

_superviewForSheet

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:450
&gt; +    UIView* currentView = self;

Space star.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:873
&gt; +

Extra blank line.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:879
&gt; +    m_interactionNode = 0;

= nullptr;

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:882
&gt; +void WebPage::performActionOnElement(const String&amp; action)

I would prefer a typed enum for the action.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:887
&gt; +    WebCore::HTMLElement* element = toHTMLElement(m_interactionNode.get());

Do you need the WebCore namespace prefix in Webpage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974547</commentid>
    <comment_count>7</comment_count>
      <attachid>222867</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-31 17:47:53 -0800</bug_when>
    <thetext>Created attachment 222867
Updated patch

I agree with Ben&apos;s suggestion. It is not a good idea to add a lot of code to WKInteractionView to handle the action sheet specific tasks.
The new patch has a controller class WKActionSheetAssistant that encapsulates lifetime management and delegates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974553</commentid>
    <comment_count>8</comment_count>
      <attachid>222869</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-31 18:57:48 -0800</bug_when>
    <thetext>Created attachment 222869
Patch3

I forgot to change the action from string to enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974554</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-31 18:58:53 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=222867&amp;action=review

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:454
&gt; +    void performActionOnElement(const String&amp;);

Shouldn&apos;t the actions be typed enum.

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:455
&gt; +    void saveImageToLibrary(const SharedMemory::Handle&amp; imageHandle, uint64_t imageSize);

Shouldn&apos;t this one be private since it is an incoming message?

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:56
&gt; +- (WKElementActionInfo *) initWithInfo:(NSURL *)url location:(CGPoint)location title:(NSString *)title rect:(CGRect)rect;

Shouldn&apos;t this be initWithURL:location: etc?
Extra space ater the first closing parenthesis.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:61
&gt; +@property (nonatomic, readonly) CGImageRef snapshot;

Let&apos;s remove snapshot for now and add it back when we have the feature.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:67
&gt; +typedef enum {

You could use typed enum here since it stays in WebKit2.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:78
&gt; +    NSString *_title;
&gt; +    WKElementActionHandlerInternal _actionHandler;
&gt; +    WKElementActionType _type;

Those could be moved to the class&apos;s implementation to make them private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974561</commentid>
    <comment_count>10</comment_count>
      <attachid>222869</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-31 19:42:16 -0800</bug_when>
    <thetext>Comment on attachment 222869
Patch3

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

LGTM.

I am a little concerned the sheet use _positionInformationDidChange to update is position. I guess since the sheet is modal, no other gesture would cause a requestPositionInformation()?

&gt; Source/WebKit2/Shared/ios/WKGestureTypes.h:70
&gt; +typedef enum {
&gt; +    WKSheetActionCopy,
&gt; +    WKSheetActionSaveImage
&gt; +} WKSheetActions;

enum class WKSheetAction {
    Copy,
    SaveImage
}

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.h:76
&gt; +    NSString *_title;

RetainPtr&lt;&gt;

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:39
&gt; +#import &quot;config.h&quot;
&gt; +#import &quot;WKActionSheet.h&quot;
&gt; +#import &quot;WKGestureTypes.h&quot;
&gt; +#import &quot;WKInteractionView.h&quot;
&gt; +
&gt; +#import &lt;SafariServices/SSReadingList.h&gt;
&gt; +
&gt; +#import &lt;UIKit/UIActionSheet_Private.h&gt;
&gt; +#import &lt;UIKit/UIView.h&gt;
&gt; +#import &lt;UIKit/UIWindow_Private.h&gt;
&gt; +
&gt; +#import &lt;WebCore/LocalizedStrings.h&gt;
&gt; +#import &lt;WebCore/SoftLinking.h&gt;
&gt; +#import &lt;wtf/text/WTFString.h&gt;

This should be config + WKActionSheet.h, then empty line, the all the other headers together.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:50
&gt; +    id &lt;WKActionSheetDelegate&gt; _sheetDelegate;
&gt; +    id &lt;UIActionSheetDelegate&gt; _delegateWhileRotating;

I think the style *may* be id&lt;protocol&gt; but I am not sure.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:53
&gt; +    WKInteractionView *_view;

I would move this above UIPopoverArrowDirection for packing but that&apos;s a detail.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:110
&gt; +                       inView:view
&gt; +                    direction:_arrowDirections
&gt; +    allowInteractionWithViews:nil
&gt; +              backgroundStyle:UIPopoverBackgroundStyleDefault
&gt; +                     animated:YES];

Uh, objective-C indentation, why you so cruel :)

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:124
&gt; +#pragma mark rotation handling code

#pragma mark - Rotation handling code

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:179
&gt; +    NSURL *_url;
&gt; +    NSString *_title;

RetainPtr&lt;&gt;

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:188
&gt; +    _url = url;
&gt; +    _interactionLocation = location;
&gt; +    _title = title;

I would take a copy of title. Maybe of URL too, not sure if that one is mutable.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:202
&gt; +    _title = [title retain];

Ditto.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:236
&gt; +    NSString *urlString = [targetURL absoluteString];
&gt; +    if (!title || [title length] == 0)
&gt; +        title = urlString;

if (![title length])
    title = [targetURL absoluteString];

(so that you don&apos;t need to do a URL serialization at all if there is no title.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:246
&gt; +        case WKElementActionTypeCopy:

Case Indent.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm:289
&gt; +

Extra blank line.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:45
&gt; +#import &quot;config.h&quot;
&gt; +#import &quot;WebPageProxy.h&quot;
&gt; +#import &quot;WKActionSheet.h&quot;
&gt; +#import &quot;WKActionSheetAssistant.h&quot;
&gt; +#import &quot;WKInteractionView.h&quot;
&gt; +
&gt; +#import &lt;TCC/TCC.h&gt;
&gt; +#import &lt;DataDetectorsUI/DDDetectionController.h&gt;
&gt; +#import &lt;SafariServices/SSReadingList.h&gt;
&gt; +
&gt; +#import &lt;UIKit/UIActionSheet_Private.h&gt;
&gt; +#import &lt;UIKit/UIView.h&gt;
&gt; +#import &lt;UIKit/UIViewController_Private.h&gt;
&gt; +#import &lt;UIKit/UIWindow_Private.h&gt;
&gt; +
&gt; +#import &lt;WebCore/LocalizedStrings.h&gt;
&gt; +#import &lt;WebCore/SoftLinking.h&gt;
&gt; +#import &lt;WebCore/WebCoreNSURLExtras.h&gt;
&gt; +#import &lt;wtf/text/WTFString.h&gt;
&gt; +

Header import style.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:64
&gt; +    RetainPtr&lt;WKActionSheet&gt; _interactionSheet;
&gt; +    RefPtr&lt;WebKit::WebPageProxy&gt; _page;
&gt; +    RetainPtr&lt;NSArray&gt; _elementActions;
&gt; +    WKInteractionView *_view;

It is easy to spot code you wrote from the RetainPtr instead of manual memory management :)

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:128
&gt; +

Extra blank line.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:190
&gt; +    BOOL isJavaScriptURL = [[targetURL scheme] length] &amp;&amp; [[targetURL scheme] caseInsensitiveCompare:@&quot;javascript&quot;] == NSOrderedSame;

Maybe store [targetURL scheme] in a temporary variable?

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:193
&gt; +    // The sheet is released in actionSheet:clickedButtonAtIndex:

You can probably remove this comment.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:220
&gt; +    // The element actions are released in actionSheet:clickedButtonAtIndex:

Same, it is low risk anyway with the RetainPtr.

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:261
&gt; +    NSMutableArray *actions = [NSMutableArray array];

maybe RetainPtr&lt;NSMutableArray&gt; actions = adoptNS([[NSMutableArray alloc] initWithCapacity:3]);

(I don&apos;t like the autorelease pool, too much trouble when debugging :))

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:298
&gt; +    NSMutableArray *elementActions = [NSMutableArray array];

Ditto if you want. With initialCapacity of [dataDetectorsActions count].

&gt; Source/WebKit2/UIProcess/API/ios/WKActionSheetAssistant.mm:299
&gt; +    for (NSUInteger actionNumber = 0; actionNumber &lt; [dataDetectorsActions count]; actionNumber++) {

[dataDetectorsActions count] could go in a temporary.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:448
&gt; +    else if (_positionInformation.clickableElementName == &quot;A&quot;) {

I wonder why upper case...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974671</commentid>
    <comment_count>11</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-01 17:57:54 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 222869 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222869&amp;action=review
&gt; 
&gt; LGTM.
&gt; 
&gt; I am a little concerned the sheet use _positionInformationDidChange to update is position. I guess since the sheet is modal, no other gesture would cause a requestPositionInformation()?
That is correct.
Thanks for the review! I&apos;ll address your comments before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1908751</commentid>
    <comment_count>12</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-10-27 09:51:12 -0700</bug_when>
    <thetext>This change landed in:

https://github.com/WebKit/WebKit/commit/9ab981b5dbf91cf0ed6a992800f21c73bb0f1d68

https://github.com/WebKit/WebKit/commit/b239158e18d0cd8dcda05c1830caab041653443a

and it seems didn&apos;t backed out.

Marking this as &quot;RESOLVED FIXED&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222545</attachid>
            <date>2014-01-28 19:13:34 -0800</date>
            <delta_ts>2014-01-28 19:30:58 -0800</delta_ts>
            <desc>WebCore Patch</desc>
            <filename>actionsheet-webcore.txt</filename>
            <type>text/plain</type>
            <size>13691</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTAxLTI4ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEFj
dGlvblNoZWV0cyBpbiBXSzIgZm9yIGlPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyODM2
Njc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBjb250YWlucyBzb21lIFdlYkNvcmUgY2hhbmdlcyByZXF1aXJlZCB0bworICAgICAg
ICBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQWN0aW9uU2hlZXRzLgorICAgICAgICBJdCBhZGRzIGNv
cHlVUkwgaW1wbGVtZW50YXRpb24gZm9yIGlPUyBpbiB0aGUgRWRpdG9yCisgICAgICAgIGNsYXNz
IGFuZCBmaXhlcyBzb21lIGJ1Z3MgaW4gdGhlIGlPUyBzcGVjaWZpYyBwYXN0ZWJvYXJkCisgICAg
ICAgIHdyaXRpbmcgY29kZS4KKyAgICAgICAgVGhlIGNoYW5nZXMgdG8gTG9jYWxpemFibGUuc3Ry
aW5ncyBhcmUgdGhlIHJlc3VsdCBvZgorICAgICAgICBydW5uaW5nIHVwZGF0ZS13ZWJraXQtbG9j
YWxpemVkc3RyaW5ncyBzY3JpcHQuCisKKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL0xvY2FsaXph
YmxlLnN0cmluZ3M6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZWRpdGlu
Zy9FZGl0b3IuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZUlt
YWdlVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1QYXN0ZWJvYXJkOjp3cml0ZSk6CisKIDIwMTQtMDEtMjggIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJFR1JFU1NJT04gKHIxNjI2NjMpOiBXZWJw
YWdlcyBoYXZlIHN0cmFuZ2UgYXJ0aWZhY3RzIG9yIGNvcnJ1cHRpb24gYXJvdW5kIHRpbGUgYm91
bmRhcmllcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYyLDYgKzEw
NjIsNyBAQCBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBhc3NSCiBfX1pON1dl
YkNvcmU1UmFuZ2VEMUV2CiBfX1pON1dlYkNvcmU2Q2hyb21lMTZzZXRTdGF0dXNiYXJUZXh0RVBO
U181RnJhbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2Q2hyb21lNXByaW50RVBOU181
RnJhbWVFCitfX1pON1dlYkNvcmU2RWRpdG9yN2NvcHlVUkxFUktOU18zVVJMRVJLTjNXVEY2U3Ry
aW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTVTdHlsZVByb3BlcnRp
ZXNFTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjEwZmluZFN0cmluZ0VSS04z
V1RGNlN0cmluZ0VqCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBpbnNlcnRUZXh0RVJLTjNXVEY2U3Ry
aW5nRVBOU181RXZlbnRFCkBAIC0xMDgwLDYgKzEwODEsNyBAQCBfX1pON1dlYkNvcmU2RWRpdG9y
MTljb3VudE1hdGNoZXNGb3JUZXh0CiBfX1pON1dlYkNvcmU2RWRpdG9yMTlkZWxldGVXaXRoRGly
ZWN0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWJiCiBf
X1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZF
ZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGlvbkVQTlNfMTVTdHlsZVByb3BlcnRpZXNFTlNfMTBF
ZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjIyd3JpdGVJbWFnZVRvUGFzdGVib2FyZEVS
TlNfMTBQYXN0ZWJvYXJkRVJOU183RWxlbWVudEVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkUxNldyaXRpbmdEaXJl
Y3Rpb24KIF9fWk43V2ViQ29yZTZFZGl0b3IyNGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZUVQTlNf
MTVTdHlsZVByb3BlcnRpZXNFTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0
aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsRXYKQEAgLTEwODcsNiArMTA4OSw3IEBAIF9fWk43V2Vi
Q29yZTZFZGl0b3IyNHJlcGxhY2VTZWxlY3Rpb25XaXQKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNnRvZ2dsZU92ZXJ3cml0
ZU1vZGVFbmFibGVkRXYKK19fWk43V2ViQ29yZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkRVJOU18xMFBhc3RlYm9hcmRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMjhyZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVu
dEVFRWJiYgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxF
dgpAQCAtMTM0MSw2ICsxMzQ0LDcgQEAgX19aTjdXZWJDb3JlOUhUTUxOYW1lczlvcHRpb25UYWdF
CiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOXNjcmlwdFRhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFt
ZXM5c2VsZWN0VGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzdHlsZUF0dHJFCitfX1pON1dl
YkNvcmU5SFRNTE5hbWVzOXRpdGxlQXR0ckUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM5dmFsdWVB
dHRyRQogX19aTjdXZWJDb3JlOUlubGluZUJveDE0YWRqdXN0UG9zaXRpb25FZmYKIF9fWk43V2Vi
Q29yZTlJbmxpbmVCb3gxNGRpcnR5TGluZUJveGVzRXYKQEAgLTEzOTAsNiArMTM5NCw3IEBAIF9f
Wk43V2ViQ29yZTlwYWdlQ2FjaGVFdgogX19aTjdXZWJDb3JlOXBsYWluVGV4dEVQS05TXzVSYW5n
ZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRWIKIF9fWk43V2ViQ29yZTl0b0VsZW1lbnRFTjNK
U0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTl1bmlvblJlY3RFUktOM1dURjZWZWN0b3JJTlNfOUZs
b2F0UmVjdEVMbTBFTlMwXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCitfX1pON1dlYkNvcmUxMFBhc3Rl
Ym9hcmQyMWNyZWF0ZUZvckNvcHlBbmRQYXN0ZUV2CiBfX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMx
M2ludGVyc2VjdFdpdGhFUEtTMF8KIF9fWk43V2ViQ29yZTEwVGltZVJhbmdlc0MxRWRkCiBfX1pO
SzNKU0M4QmluZGluZ3MxMFJvb3RPYmplY3QxMmdsb2JhbE9iamVjdEV2CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lv
biAxNjI5OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0
cmluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAKIC8qIHdpbmRvdyB0aXRsZSBm
b3IgYSBzdGFuZGFsb25lIGltYWdlICh1c2VzIG11bHRpcGxpY2F0aW9uIHN5bWJvbCwgbm90IHgp
ICovCiAiPGZpbGVuYW1lPiAlZMOXJWQgcGl4ZWxzIiA9ICI8ZmlsZW5hbWU+ICVkw5clZCBwaXhl
bHMiOwogCisvKiBUaXRsZSBmb3IgQWRkIHRvIFJlYWRpbmcgTGlzdCBhY3Rpb24gYnV0dG9uICov
CisiQWRkIHRvIFJlYWRpbmcgTGlzdCIgPSAiQWRkIHRvIFJlYWRpbmcgTGlzdCI7CisKIC8qIFVu
ZG8gYWN0aW9uIG5hbWUgKi8KICJBbGlnbiBMZWZ0IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiQWxp
Z24gTGVmdCI7CiAKQEAgLTg4LDYgKzkxLDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJC
b2xkIChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiQm9sZCI7CiAKKy8qIFRpdGxlIGZvciBDYW5jZWwg
YnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIgKi8KKyJDYW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1
dHRvbiBiYXIiID0gIkNhbmNlbCI7CisKIC8qIENhcGl0YWxpemUgY29udGV4dCBtZW51IGl0ZW0g
Ki8KICJDYXBpdGFsaXplIiA9ICJDYXBpdGFsaXplIjsKIApAQCAtMTEyLDExICsxMTgsMTEgQEAK
IC8qIHRpdGxlIGZvciBhIG11bHRpcGxlIGZpbGUgY2hvb3NlciBidXR0b24gdXNlZCBpbiBIVE1M
IGZvcm1zLiBUaGlzIHRpdGxlIHNob3VsZCBiZSBhcyBzaG9ydCBhcyBwb3NzaWJsZS4gKi8KICJD
aG9vc2UgRmlsZXMiID0gIkNob29zZSBGaWxlcyI7CiAKLS8qIFBMQVRGT1JNKElPUykgdGl0bGUg
Zm9yIGZpbGUgYnV0dG9uIHVzZWQgaW4gSFRNTCBmb3JtcyBmb3IgbWVkaWEgZmlsZXMgKi8KLSJD
aG9vc2UgTWVkaWEgKFNpbmdsZSkiID0gIkNob29zZSBQaG90byI7CisvKiBUaXRsZSBmb3IgZmls
ZSBidXR0b24gdXNlZCBpbiBIVE1MNSBmb3JtcyBmb3IgbXVsdGlwbGUgbWVkaWEgZmlsZXMgKi8K
KyJDaG9vc2UgTWVkaWEgKE11bHRpcGxlKSIgPSAiQ2hvb3NlIE1lZGlhIChNdWx0aXBsZSkiOwog
Ci0vKiBQTEFURk9STShJT1MpIHRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhUTUw1IGZv
cm1zIGZvciBtdWx0aXBsZSBtZWRpYSBmaWxlcyAqLwotIkNob29zZSBNZWRpYSAoTXVsdGlwbGUp
IiA9ICJDaG9vc2UgUGhvdG9zIjsKKy8qIFRpdGxlIGZvciBmaWxlIGJ1dHRvbiB1c2VkIGluIEhU
TUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzICovCisiQ2hvb3NlIE1lZGlhIChTaW5nbGUpIiA9ICJD
aG9vc2UgTWVkaWEgKFNpbmdsZSkiOwogCiAvKiBtZW51IGl0ZW0gaW4gUmVjZW50IFNlYXJjaGVz
IG1lbnUgdGhhdCBlbXB0aWVzIG1lbnUncyBjb250ZW50cyAqLwogIkNsZWFyIFJlY2VudCBTZWFy
Y2hlcyIgPSAiQ2xlYXIgUmVjZW50IFNlYXJjaGVzIjsKQEAgLTEzNiw2ICsxNDIsOSBAQAogLyog
Q29weSBjb250ZXh0IG1lbnUgaXRlbSAqLwogIkNvcHkiID0gIkNvcHkiOwogCisvKiBUaXRsZSBm
b3IgQ29weSBMaW5rIG9yIEltYWdlIGFjdGlvbiBidXR0b24gKi8KKyJDb3B5IEFjdGlvblNoZWV0
IExpbmsiID0gIkNvcHkiOworCiAvKiBDb3B5IEF1ZGlvIEFkZHJlc3MgTG9jYXRpb24gY29udGV4
dCBtZW51IGl0ZW0gKi8KICJDb3B5IEF1ZGlvIEFkZHJlc3MiID0gIkNvcHkgQXVkaW8gQWRkcmVz
cyI7CiAKQEAgLTE2MywxNSArMTcyLDE1IEBACiAvKiBEZWZhdWx0IHdyaXRpbmcgZGlyZWN0aW9u
IGNvbnRleHQgbWVudSBpdGVtICovCiAiRGVmYXVsdCIgPSAiRGVmYXVsdCI7CiAKLS8qIFBMQVRG
T1JNKElPUykgVW5kbyBhY3Rpb24gbmFtZSAqLworLyogVW5kbyBhY3Rpb24gbmFtZSAoVXNlZCBv
bmx5IGJ5IFBMQVRGT1JNKElPUykgY29kZSkgKi8KICJEZWxldGUgKFVuZG8gYWN0aW9uIG5hbWUp
IiA9ICJEZWxldGUiOwogCi0vKiBQTEFURk9STShJT1MpIFVuZG8gYWN0aW9uIG5hbWUgKi8KLSJE
aWN0YXRpb24gKFVuZG8gYWN0aW9uIG5hbWUpIiA9ICJEaWN0YXRpb24iOwotCiAvKiB0ZXh0IHRv
IGRpc3BsYXkgaW4gPGRldGFpbHM+IHRhZyB3aGVuIGl0IGhhcyBubyA8c3VtbWFyeT4gY2hpbGQg
Ki8KICJEZXRhaWxzIiA9ICJEZXRhaWxzIjsKIAorLyogVW5kbyBhY3Rpb24gbmFtZSAoVXNlZCBv
bmx5IGJ5IFBMQVRGT1JNKElPUykgY29kZSkgKi8KKyJEaWN0YXRpb24gKFVuZG8gYWN0aW9uIG5h
bWUpIiA9ICJEaWN0YXRpb24iOworCiAvKiBEb3dubG9hZCBBdWRpbyBUbyBEaXNrIGNvbnRleHQg
bWVudSBpdGVtICovCiAiRG93bmxvYWQgQXVkaW8iID0gIkRvd25sb2FkIEF1ZGlvIjsKIApAQCAt
MjQ3LDYgKzI1Niw5IEBACiAvKiBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSBkZXNjcmlwdGlv
biAqLwogIkphdmEgaXMgdW5hdmFpbGFibGUiID0gIkphdmEgaXMgdW5hdmFpbGFibGUiOwogCisv
KiBUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsgKi8KKyJKYXZhU2Ny
aXB0IEFjdGlvbiBTaGVldCBUaXRsZSIgPSAiSmF2YVNjcmlwdCI7CisKIC8qIFVuZG8gYWN0aW9u
IG5hbWUgKi8KICJKdXN0aWZ5IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiSnVzdGlmeSI7CiAKQEAg
LTMwNyw2ICszMTksOSBAQAogLyogTWVudSBpdGVtIGxhYmVsIGZvciB0aGUgdHJhY2sgdGhhdCBy
ZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMgKi8KICJPZmYiID0gIk9mZiI7CiAK
Ky8qIFRpdGxlIGZvciBPcGVuIExpbmsgYWN0aW9uIGJ1dHRvbiAqLworIk9wZW4gQWN0aW9uU2hl
ZXQgTGluayIgPSAiT3BlbiI7CisKIC8qIE9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyBjb250ZXh0
IG1lbnUgaXRlbSAqLwogIk9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyIgPSAiT3BlbiBBdWRpbyBp
biBOZXcgV2luZG93IjsKIApAQCAtMzkxLDYgKzQwNiw5IEBACiAvKiBSaWdodCB0byBMZWZ0IGNv
bnRleHQgbWVudSBpdGVtICovCiAiUmlnaHQgdG8gTGVmdCIgPSAiUmlnaHQgdG8gTGVmdCI7CiAK
Ky8qIFRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24gKi8KKyJTYXZlIEltYWdlIiA9
ICJTYXZlIEltYWdlIjsKKwogLyogU2VhcmNoIGluIFNwb3RsaWdodCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlNlYXJjaCBpbiBTcG90bGlnaHQiID0gIlNlYXJjaCBpbiBTcG90bGlnaHQiOwogCkBA
IC00MzMsNiArNDUxLDkgQEAKIC8qIG1lbnUgaXRlbSB0aXRsZSAqLwogIlNob3cgU3Vic3RpdHV0
aW9ucyIgPSAiU2hvdyBTdWJzdGl0dXRpb25zIjsKIAorLyogVGl0bGUgb2YgdGhlIGNvbnRleHQg
bWVudSBpdGVtIHRvIHNob3cgd2hlbiBQREZQbHVnaW4gd2FzIHVzZWQgaW5zdGVhZCBvZiBhIGJs
b2NrZWQgcGx1Z2luICovCisiU2hvdyBpbiBibG9ja2VkIHBsdWctaW4iID0gIlNob3cgaW4gYmxv
Y2tlZCBwbHVnLWluIjsKKwogLyogU21hcnQgQ29weS9QYXN0ZSBjb250ZXh0IG1lbnUgaXRlbSAq
LwogIlNtYXJ0IENvcHkvUGFzdGUiID0gIlNtYXJ0IENvcHkvUGFzdGUiOwogCkBAIC01NDQsNyAr
NTY1LDcgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJUdXJuIE9mZiBMaWdhdHVyZXMgKFVu
ZG8gYWN0aW9uIG5hbWUpIiA9ICJUdXJuIE9mZiBMaWdhdHVyZXMiOwogCi0vKiBVbmRvIGFjdGlv
biBuYW1lICovCisvKiBXZSBkb24ndCBjYXJlIGlmIHdlIGZpbmQgdGhpcyBzdHJpbmcsIGJ1dCBz
ZWFyY2hpbmcgZm9yIGl0IHdpbGwgbG9hZCB0aGUgcGxpc3QgYW5kIHNhdmUgdGhlIHJlc3VsdHMu
ICovCiAiVHlwaW5nIChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiVHlwaW5nIjsKIAogLyogVW5kZXJs
aW5lIGNvbnRleHQgbWVudSBpdGVtICovCkBAIC03OTMsMTUgKzgxNCwxNSBAQAogLyogdGV4dCB0
byBkaXNwbGF5IGluIGZpbGUgYnV0dG9uIHVzZWQgaW4gSFRNTCBmb3JtcyB3aGVuIG5vIGZpbGVz
IGFyZSBzZWxlY3RlZCBhbmQgdGhlIGJ1dHRvbiBhbGxvd3MgbXVsdGlwbGUgZmlsZXMgdG8gYmUg
c2VsZWN0ZWQgKi8KICJubyBmaWxlcyBzZWxlY3RlZCIgPSAibm8gZmlsZXMgc2VsZWN0ZWQiOwog
Ci0vKiBQTEFURk9STShJT1MpIHRleHQgdG8gZGlzcGxheSBpbiBmaWxlIGJ1dHRvbiB1c2VkIGlu
IEhUTUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzIHdoZW4gbm8gbWVkaWEgZmlsZSBpcyBzZWxlY3Rl
ZCAqLwotIm5vIG1lZGlhIHNlbGVjdGVkIChzaW5nbGUpIiA9ICJubyBwaG90byBzZWxlY3RlZCI7
Ci0KLS8qIFBMQVRGT1JNKElPUykgdGV4dCB0byBkaXNwbGF5IGluIGZpbGUgYnV0dG9uIHVzZWQg
aW4gSFRNTCBmb3JtcyBmb3IgbWVkaWEgZmlsZXMgd2hlbiBubyBtZWRpYSBmaWxlcyBhcmUgc2Vs
ZWN0ZWQgYW5kIHRoZSBidXR0b24gYWxsb3dzIG11bHRpcGxlIGZpbGVzIHRvIGJlIHNlbGVjdGVk
ICovCi0ibm8gbWVkaWEgc2VsZWN0ZWQgKG11bHRpcGxlKSIgPSAibm8gcGhvdG9zIHNlbGVjdGVk
IjsKLQogLyogSFRUUCByZXN1bHQgY29kZSBzdHJpbmcgKi8KICJubyBsb25nZXIgZXhpc3RzIiA9
ICJubyBsb25nZXIgZXhpc3RzIjsKIAorLyogVGV4dCB0byBkaXNwbGF5IGluIGZpbGUgYnV0dG9u
IHVzZWQgaW4gSFRNTCBmb3JtcyBmb3IgbWVkaWEgZmlsZXMgd2hlbiBubyBtZWRpYSBmaWxlcyBh
cmUgc2VsZWN0ZWQgYW5kIHRoZSBidXR0b24gYWxsb3dzIG11bHRpcGxlIGZpbGVzIHRvIGJlIHNl
bGVjdGVkICovCisibm8gbWVkaWEgc2VsZWN0ZWQgKG11bHRpcGxlKSIgPSAibm8gbWVkaWEgc2Vs
ZWN0ZWQgKG11bHRpcGxlKSI7CisKKy8qIFRleHQgdG8gZGlzcGxheSBpbiBmaWxlIGJ1dHRvbiB1
c2VkIGluIEhUTUwgZm9ybXMgZm9yIG1lZGlhIGZpbGVzIHdoZW4gbm8gbWVkaWEgZmlsZSBpcyBz
ZWxlY3RlZCAqLworIm5vIG1lZGlhIHNlbGVjdGVkIChzaW5nbGUpIiA9ICJubyBtZWRpYSBzZWxl
Y3RlZCAoc2luZ2xlKSI7CisKIC8qIEhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nICovCiAibm9uLWF1
dGhvcml0YXRpdmUgaW5mb3JtYXRpb24iID0gIm5vbi1hdXRob3JpdGF0aXZlIGluZm9ybWF0aW9u
IjsKIApAQCAtOTg1LDUgKzEwMDYsMyBAQAogLyogYWNjZXNzaWJpbGl0eSBsYWJlbCBmb3Igdmlk
ZW8gZWxlbWVudCBjb250cm9sbGVyICovCiAidmlkZW8gcGxheWJhY2siID0gInZpZGVvIHBsYXli
YWNrIjsKIAotLyogdGl0bGUgb2YgdGhlIGNvbnRleHQgbWVudSBpdGVtIHRvIHNob3cgd2hlbiBQ
REZQbHVnaW4gd2FzIHVzZWQgaW5zdGVhZCBvZiBhIGJsb2NrZWQgcGx1Z2luICovCi0iU2hvdyBp
biBibG9ja2VkIHBsdWctaW4iID0gIlNob3cgaW4gYmxvY2tlZCBwbHVnLWluIjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5MSw3ICsxMzkxLDYg
QEAgdm9pZCBFZGl0b3I6OnNpbXBsaWZ5TWFya3VwKE5vZGUqIHN0YXJ0TgogICAgIGFwcGx5Q29t
bWFuZChTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUs
IChlbmROb2RlKSA/IE5vZGVUcmF2ZXJzYWw6Om5leHQoZW5kTm9kZSkgOiAwKSk7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQogdm9pZCBFZGl0b3I6OmNvcHlVUkwoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgY29weVVSTCh1cmwsIHRpdGxlLCAqUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpOwpAQCAtMTQxMCw2ICsxNDA5LDcgQEAgdm9pZCBF
ZGl0b3I6OmNvcHlVUkwoY29uc3QgVVJMJiB1cmwsIGNvbgogICAgIHBhc3RlYm9hcmQud3JpdGUo
cGFzdGVib2FyZFVSTCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBFZGl0b3I6OmNv
cHlJbWFnZShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgRWxlbWVudCogZWxl
bWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZEVsZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhc3RlQXNQbGFpblRleHQoKTsKICAgICB2b2lkIHBlcmZvcm1EZWxldGUoKTsKIAotI2lm
ICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBjb3B5VVJMKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOwogICAgIHZvaWQgY29weVVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRp
dGxlLCBQYXN0ZWJvYXJkJik7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2b2lkIGNvcHlJbWFn
ZShjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBACiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAj
aW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAjaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC0zNzQsNiArMzc1LDcgQEAgdm9pZCBFZGl0b3I6Ondy
aXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdAogICAgIHBhc3RlYm9hcmRJbWFnZS51cmwudXJsID0g
aW1hZ2VFbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKGltYWdlRWxlbWVudC5pbWFnZVNvdXJjZVVSTCgpKSk7CiAgICAgcGFzdGVi
b2FyZEltYWdlLnVybC50aXRsZSA9IHRpdGxlOwogICAgIHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJj
ZU1JTUVUeXBlID0gcGFzdGVib2FyZC5yZXNvdXJjZU1JTUVUeXBlKGNhY2hlZEltYWdlLT5yZXNw
b25zZSgpLm1pbWVUeXBlKCkpOworICAgIHBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZURhdGEgPSBj
YWNoZWRJbWFnZS0+cmVzb3VyY2VCdWZmZXIoKS0+c2hhcmVkQnVmZmVyKCk7CiAKICAgICBwYXN0
ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkocmV2aXNpb24gMTYyOTk1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MCw2ICsxNTAsMTEgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25z
dCBTdAogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVUb1Bhc3RlYm9hcmQoa1VUVHlwZVRleHQsIHRleHQpOwogfQogCit2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwpCit7CisgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChr
VVRUeXBlVVJMLCBwYXN0ZWJvYXJkVVJMLnVybC5zdHJpbmcoKSk7Cit9CisKIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmKQogewogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tCShyZXZpc2lvbiAxNjI5OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
dGZvcm1QYXN0ZWJvYXJkSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAg
dm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhcwogewogICAgIFJldGFpblB0
cjxOU011dGFibGVEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogICAgIGlmICghcGFzdGVib2FyZEltYWdlLnJl
c291cmNlTUlNRVR5cGUuaXNOdWxsKCkpIHsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRP
YmplY3Q6cGFzdGVib2FyZEltYWdlLmltYWdlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpLmdldCgp
IGZvcktleTpwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZV07CisgICAgICAgIFtyZXBy
ZXNlbnRhdGlvbnMgc2V0T2JqZWN0OnBhc3RlYm9hcmRJbWFnZS5yZXNvdXJjZURhdGEtPmNyZWF0
ZU5TRGF0YSgpLmdldCgpIGZvcktleTpwYXN0ZWJvYXJkSW1hZ2UucmVzb3VyY2VNSU1FVHlwZV07
CiAgICAgICAgIFtyZXByZXNlbnRhdGlvbnMgc2V0T2JqZWN0OihOU1N0cmluZyAqKXBhc3RlYm9h
cmRJbWFnZS51cmwudXJsIGZvcktleTooTlNTdHJpbmcgKilrVVRUeXBlVVJMXTsKICAgICB9CiAg
ICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5nZXQoKV1dOwpAQCAt
MTc5LDkgKzE3OSwxMCBAQCB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgU3Ry
CiB7CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHRO
UyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAotICAgIGlmIChwYXN0ZWJv
YXJkVHlwZSA9PSBTdHJpbmcoa1VUVHlwZVVSTCkpCisgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09
IFN0cmluZyhrVVRUeXBlVVJMKSkgewogICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVl
OmFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dF0pLmdldCgpIGZvcktl
eTpwYXN0ZWJvYXJkVHlwZV07Ci0gICAgZWxzZSBpZiAoIXBhc3RlYm9hcmRUeXBlLmlzTnVsbCgp
KQorICAgICAgICBbcmVwcmVzZW50YXRpb25zIHNldFZhbHVlOnRleHQgZm9yS2V5OihOU1N0cmlu
ZyAqKWtVVFR5cGVUZXh0XTsKKyAgICB9IGVsc2UgaWYgKCFwYXN0ZWJvYXJkVHlwZS5pc051bGwo
KSkKICAgICAgICAgW3JlcHJlc2VudGF0aW9ucyBzZXRWYWx1ZTp0ZXh0IGZvcktleTpwYXN0ZWJv
YXJkVHlwZV07CiAgICAgW21fcGFzdGVib2FyZCBzZXRJdGVtczpAW3JlcHJlc2VudGF0aW9ucy5n
ZXQoKV1dOwogfQo=
</data>
<flag name="review"
          id="246541"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222850</attachid>
            <date>2014-01-31 14:30:08 -0800</date>
            <delta_ts>2014-01-31 17:47:53 -0800</delta_ts>
            <desc>WebKit2 patch</desc>
            <filename>actionsheets-webkit2.txt</filename>
            <type>text/plain</type>
            <size>58231</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzIwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAxLTMxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEFj
dGlvblNoZWV0cyBpbiBXSzIgZm9yIGlPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyODM2
Njc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlcyB0aGUgbG9jYWxpemFibGUgc3RyaW5ncyBmb3IgYWN0aW9uIHNoZWV0cy4KKworICAgICAg
ICAqIEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNC0wMS0yOSAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9zc2libGUg
dG8gaW1wbGVtZW50IEpTIGJ1aWx0aW5zIGluIEpTCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Fbmds
aXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lvbiAxNjMxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAKIC8qIHdpbmRvdyB0aXRsZSBmb3IgYSBzdGFuZGFs
b25lIGltYWdlICh1c2VzIG11bHRpcGxpY2F0aW9uIHN5bWJvbCwgbm90IHgpICovCiAiPGZpbGVu
YW1lPiAlZMOXJWQgcGl4ZWxzIiA9ICI8ZmlsZW5hbWU+ICVkw5clZCBwaXhlbHMiOwogCisvKiBU
aXRsZSBmb3IgQWRkIHRvIFJlYWRpbmcgTGlzdCBhY3Rpb24gYnV0dG9uICovCisiQWRkIHRvIFJl
YWRpbmcgTGlzdCIgPSAiQWRkIHRvIFJlYWRpbmcgTGlzdCI7CisKIC8qIFVuZG8gYWN0aW9uIG5h
bWUgKi8KICJBbGlnbiBMZWZ0IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiQWxpZ24gTGVmdCI7CiAK
QEAgLTg4LDYgKzkxLDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJCb2xkIChVbmRvIGFj
dGlvbiBuYW1lKSIgPSAiQm9sZCI7CiAKKy8qIFRpdGxlIGZvciBDYW5jZWwgYnV0dG9uIGxhYmVs
IGluIGJ1dHRvbiBiYXIgKi8KKyJDYW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiID0g
IkNhbmNlbCI7CisKIC8qIENhcGl0YWxpemUgY29udGV4dCBtZW51IGl0ZW0gKi8KICJDYXBpdGFs
aXplIiA9ICJDYXBpdGFsaXplIjsKIApAQCAtMTM2LDYgKzE0Miw5IEBACiAvKiBDb3B5IGNvbnRl
eHQgbWVudSBpdGVtICovCiAiQ29weSIgPSAiQ29weSI7CiAKKy8qIFRpdGxlIGZvciBDb3B5IExp
bmsgb3IgSW1hZ2UgYWN0aW9uIGJ1dHRvbiAqLworIkNvcHkgQWN0aW9uU2hlZXQgTGluayIgPSAi
Q29weSI7CisKIC8qIENvcHkgQXVkaW8gQWRkcmVzcyBMb2NhdGlvbiBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIkNvcHkgQXVkaW8gQWRkcmVzcyIgPSAiQ29weSBBdWRpbyBBZGRyZXNzIjsKIApAQCAt
MjQ3LDYgKzI1Niw5IEBACiAvKiBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSBkZXNjcmlwdGlv
biAqLwogIkphdmEgaXMgdW5hdmFpbGFibGUiID0gIkphdmEgaXMgdW5hdmFpbGFibGUiOwogCisv
KiBUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsgKi8KKyJKYXZhU2Ny
aXB0IEFjdGlvbiBTaGVldCBUaXRsZSIgPSAiSmF2YVNjcmlwdCI7CisKIC8qIFVuZG8gYWN0aW9u
IG5hbWUgKi8KICJKdXN0aWZ5IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiSnVzdGlmeSI7CiAKQEAg
LTMwNyw2ICszMTksOSBAQAogLyogTWVudSBpdGVtIGxhYmVsIGZvciB0aGUgdHJhY2sgdGhhdCBy
ZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMgKi8KICJPZmYiID0gIk9mZiI7CiAK
Ky8qIFRpdGxlIGZvciBPcGVuIExpbmsgYWN0aW9uIGJ1dHRvbiAqLworIk9wZW4gQWN0aW9uU2hl
ZXQgTGluayIgPSAiT3BlbiI7CisKIC8qIE9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyBjb250ZXh0
IG1lbnUgaXRlbSAqLwogIk9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyIgPSAiT3BlbiBBdWRpbyBp
biBOZXcgV2luZG93IjsKIApAQCAtMzkxLDYgKzQwNiw5IEBACiAvKiBSaWdodCB0byBMZWZ0IGNv
bnRleHQgbWVudSBpdGVtICovCiAiUmlnaHQgdG8gTGVmdCIgPSAiUmlnaHQgdG8gTGVmdCI7CiAK
Ky8qIFRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24gKi8KKyJTYXZlIEltYWdlIiA9
ICJTYXZlIEltYWdlIjsKKwogLyogU2VhcmNoIGluIFNwb3RsaWdodCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlNlYXJjaCBpbiBTcG90bGlnaHQiID0gIlNlYXJjaCBpbiBTcG90bGlnaHQiOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxOTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDIgQEAKKzIwMTQtMDEtMzEgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQWN0
aW9uU2hlZXRzIGluIFdLMiBmb3IgaU9TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTI4MzY2
Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGRlZmF1bHQgc3VwcG9ydCBmb3IgQWN0aW9uIFNoZWV0cworICAgICAg
ICBpbiBXSzIgZm9yIGlPUy4gV0tBY3Rpb25TaGVldCBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
dGhlCisgICAgICAgIHNoZWV0IGl0c2VsZiB0aGF0IGluaGVyaXRzIGZyb20gVUlBY3Rpb25TaGVl
dCBhbmQgaGFuZGxlcworICAgICAgICB0aGUgcmVwb3NpdGlvbmluZyBvZiB0aGUgc2hlZXQgYWZ0
ZXIgcm90YXRpb24gZm9yIGlQYWQuCisgICAgICAgIFdlIGhhdmUgMyBkaWZmZXJlbnQgdHlwZXMg
b2Ygc2hlZXRzOgorICAgICAgICAgICAtIGxpbmsgc2hlZXQsIGRpc3BsYXllZCB3aGVuIHRoZSB0
YXJnZXQgZWxlbWVudCBpcyBhIGxpbmsKKyAgICAgICAgICAgLSBpbWFnZSBzaGVldCwgd2hlbiB0
aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYW4gaW1hZ2UKKyAgICAgICAgICAgLSBkYXRhIGRldGVjdG9y
IHNoZWV0IHdoZW4gdGhlIHRhcmdldCBpcyBhbiBlbGVtZW50CisgICAgICAgICAgICAgcmVjb2du
aXplZCBieSB0aGUgZGF0YSBkZXRlY3RvcnMgbGlicmFyeS4KKyAgICAgICAgQm90aCBsaW5rIGFu
ZCBpbWFnZSBzaGVldCBoYXZlIGEgc2V0IG9mIGRlZmF1bHQgYnV0dG9ucywgd2hlcmVhcworICAg
ICAgICBkYXRhZGV0ZWN0b3Igc2hlZXQgaW4gb25seSBwb3B1bGF0ZWQgYnkgY3VzdG9tIGFjdGlv
bnMgcHJvdmlkZWQKKyAgICAgICAgYnkgZGF0YSBkZXRlY3RvcnMuCisgICAgICAgIFRoZSBsaW5r
IHNoZWV0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBhY3Rpb25zOgorICAgICAgICAg
ICAgLSBvcGVuLCBuYXZpZ2F0ZXMgdG8gdGhlIFVSTAorICAgICAgICAgICAgLSBjb3B5LCBjb3Bp
ZXMgdGhlIFVSTCB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICAgICAgLSBhZGQgdG8gcmVhZGlu
ZyBsaXN0CisgICAgICAgIFRoZSBpbWFnZSBzaGVldCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGFj
dGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICAgICAgdGhlIGltYWdlIGlzIGNvbnRhaW5l
ZCBpbnNpZGUgYW4gYW5jaG9yIGVsZW1lbnQgb3Igbm90LgorICAgICAgICBJZiB0aGUgaW1hZ2Ug
aXMgTk9UIGluc2lkZSBhIGxpbmsgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBwcm92aWRlZDoK
KyAgICAgICAgICAgIC0gY29weSwgY29waWVzIHRoZSBpbWFnZSB0byB0aGUgcGFzdGVib2FyZAor
ICAgICAgICAgICAgLSBzYXZlIGltYWdlLCBzYXZlcyB0aGUgaW1hZ2UgaW4gdGhlIHBob3RvIGxp
YnJhcnkKKyAgICAgICAgSW5zdGVhZCwgaWYgdGhlIGltYWdlIGlzIGluc2lkZSBhbiBsaW5rOgor
ICAgICAgICAgICAgLSBvcGVuLCBuYXZpZ2F0ZXMgdG8gdGhlIFVSTCBzcGNpZmllZCBieSB0aGUg
bGluaworICAgICAgICAgICAgLSBjb3B5LCBjb3BpZXMgdGhlIGxpbmsgVVJMIHRvIHRoZSBwYXN0
ZWJvYXJkCisgICAgICAgICAgICAtIHNhdmUgaW1hZ2UsIHNhdmVzIHRoZSBpbWFnZSBpbiB0aGUg
cGhvdG8gbGlicmFyeQorICAgICAgICAgICAgLSBhZGQgdG8gcmVhZGluZyBsaXN0LCBhZGRzIHRo
ZSBsaW5rIFVSTCB0byByZWFkaW5nIGxpc3QuCisKKyAgICAgICAgKiBTaGFyZWQvSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6SW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0lu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNh
dmVJbWFnZVRvTGlicmFyeSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25T
aGVldC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0
Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldCBpbml0V2l0aFZpZXc6XSk6Cisg
ICAgICAgICgtW1dLQWN0aW9uU2hlZXQgZGVhbGxvY10pOgorICAgICAgICAoLVtXS0FjdGlvblNo
ZWV0IHByZXNlbnRTaGVldF0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0IHByZXNlbnRTaGVl
dEZyb21SZWN0Ol0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0IGRvbmVXaXRoU2hlZXRdKToK
KyAgICAgICAgKC1bV0tBY3Rpb25TaGVldCB3aWxsUm90YXRlXSk6CisgICAgICAgICgtW1dLQWN0
aW9uU2hlZXQgdXBkYXRlU2hlZXRQb3NpdGlvbl0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0
IGRpZFJvdGF0ZV0pOgorICAgICAgICAoLVtXS0VsZW1lbnRBY3Rpb25JbmZvIGluaXRXaXRoSW5m
bzpsb2NhdGlvbjp0aXRsZTpyZWN0Ol0pOgorICAgICAgICAoLVtXS0VsZW1lbnRBY3Rpb24gaW5p
dFdpdGhUaXRsZTphY3Rpb25IYW5kbGVyOnR5cGU6XSk6CisgICAgICAgICgtW1dLRWxlbWVudEFj
dGlvbiBkZWFsbG9jXSk6CisgICAgICAgICgrW1dLRWxlbWVudEFjdGlvbiBjdXN0b21FbGVtZW50
QWN0aW9uV2l0aFRpdGxlOmFjdGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChjb3B5RWxlbWVudCk6
CisgICAgICAgIChzYXZlSW1hZ2UpOgorICAgICAgICAoYWRkVG9SZWFkaW5nTGlzdCk6CisgICAg
ICAgICgrW1dLRWxlbWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpjdXN0
b21UaXRsZTpdKToKKyAgICAgICAgKCtbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFj
dGlvbldpdGhUeXBlOl0pOgorICAgICAgICAoLVtXS0VsZW1lbnRBY3Rpb24gcnVuQWN0aW9uV2l0
aEVsZW1lbnRJbmZvOnZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRl
cmFjdGlvblZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9u
Vmlldy5tbToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgc3VwZXJ2aWV3Rm9yU2hlZXRd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVl
dEdpdmVuUG9pbnQ6aW5Ib3N0VmlldzpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
aG9zdFZpZXdGb3JTaGVldDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaW5pdGlh
bFByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQ6XSk6CisgICAgICAgICgtW1dLSW50
ZXJhY3Rpb25WaWV3IHByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQ6XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGFjdGlvblNoZWV0OmNsaWNrZWRCdXR0b25BdEluZGV4
Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfY2xlYW51cFNoZWV0XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9jcmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9uczpz
aG93TGlua1RpdGxlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfc2hvd0ltYWdl
U2hlZXRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dMaW5rU2hlZXRdKToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2FjdGlvbkZvckxvbmdQcmVzc10pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdXBkYXRlUG9zaXRpb25JbmZvcm1hdGlvbl0pOgor
ICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfbG9uZ1ByZXNzUmVjb2duaXplZDpdKToKKyAg
ICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6
XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9wZXJmb3JtQWN0aW9uOl0pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdXBkYXRlQWNjZXNzb3J5XSk6CisgICAgICAgICog
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdG9wSW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVJbWFnZVRvTGlicmFyeSk6CisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
OgorICAgICAgICAoV2ViS2l0Ojpjb250YWluaW5nTGlua0VsZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnN0b3BJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorCiAyMDE0LTAxLTI5ICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpbXBs
ZW1lbnQgSlMgYnVpbHRpbnMgaW4gSlMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcAkocmV2aXNp
b24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQCB2b2lkIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjplCiAgICAgZW5jb2RlciA8PCBub2RlQXRQ
b3NpdGlvbklzQXNzaXN0ZWROb2RlOwogICAgIGVuY29kZXIgPDwgY2xpY2thYmxlRWxlbWVudE5h
bWU7CiAgICAgZW5jb2RlciA8PCB1cmw7CisgICAgZW5jb2RlciA8PCB0aXRsZTsKICAgICBlbmNv
ZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVuY29kZXIgPDwgYm91bmRzOwogfQogCiBib29s
IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiByZXN1bHQp
CkBAIC01NSw5ICs1NywxNSBAQCBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3Rp
b25SZWN0cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmJvdW5kcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAkocmV2aXNpb24gMTYzMTc1KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDkgQEAgc3RydWN0IEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uIAogICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9k
ZTsKICAgICBTdHJpbmcgY2xpY2thYmxlRWxlbWVudE5hbWU7CiAgICAgU3RyaW5nIHVybDsKKyAg
ICBTdHJpbmcgdGl0bGU7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVj
dGlvblJlY3RzOworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzOwogCiAgICAgdm9pZCBlbmNv
ZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
SVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxNjMx
NzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDksNiArMjQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rp
b25EaWRDaGFuZ2UoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNhdmVJbWFn
ZVRvTGlicmFyeShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4pID0gMDsKICNlbmRp
ZgogCiAgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNiAr
NDQ5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVQb3NpdGlvbkluZm9ybWF0aW9u
KGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7CiAgICAgdm9pZCBnZXRQ
b3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKICAgICB2b2lkIHJlcXVlc3RQb3NpdGlvbkluZm9ybWF0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBzdGFydEludGVyYWN0aW9u
V2l0aEVsZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9p
ZCBzdG9wSW50ZXJhY3Rpb24oKTsKKyAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQoY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoY29uc3QgU2hhcmVkTWVt
b3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUpOwogI2VuZGlmCiAK
ICAgICBjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Vk
aXRvclN0YXRlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1
Nyw2ICsxNTcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIEF1dG9jb3JyZWN0
aW9uQ29udGV4dENhbGxiYWNrKFN0cmluZyBiZWZvcmVUZXh0LCBTdHJpbmcgbWFya2VkVGV4dCwg
U3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGFmdGVyVGV4dCwgdWludDY0X3QgbG9jYXRpb24s
IHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBJbnRlcnByZXRLZXlF
dmVudChXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAoYm9v
bCBoYW5kbGVkKQogICAgIERpZFJlY2VpdmVQb3NpdGlvbkluZm9ybWF0aW9uKFdlYktpdDo6SW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pCisgICAgU2F2ZUltYWdl
VG9MaWJyYXJ5KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBz
aXplKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFByaW50RmluaXNoZWRDYWxsYmFj
ayhXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCB1aW50NjRfdCBjYWxsYmFja0lEKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oCShyZXZpc2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTEx
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnko
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KTsKIAogICAgIC8vIEF1eGlsaWFyeSBD
bGllbnQgQ3JlYXRpb24KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5t
bQkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDExIEBACiAj
aW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51
UHJveHkuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKKyNpbXBvcnQgPFVJS2l0
L1VJSW1hZ2VQaWNrZXJDb250cm9sbGVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJV2Vi
VG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KIAogQGludGVyZmFjZSBVSVZpZXcgKElQSSkKIC0gKFVJ
U2Nyb2xsVmlldyAqKV9zY3JvbGxlcjsKQEAgLTIwNyw2ICsyMDksMTIgQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cG9zaXRpb25JbmZvcm1hdGlvbgogICAgIFttX3ZpZXcgX3Bvc2l0aW9uSW5mb3Jt
YXRpb25EaWRDaGFuZ2U6aW5mb107CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNhdmVJbWFn
ZVRvTGlicmFyeShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCit7CisgICAg
UmV0YWluUHRyPE5TRGF0YT4gaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmNyZWF0ZU5TRGF0YSgp
OworICAgIFVJSW1hZ2VEYXRhV3JpdGVUb1NhdmVkUGhvdG9zQWxidW0oaW1hZ2VEYXRhLmdldCgp
LCBuaWwsIE5VTEwsIE5VTEwpOworfQorCiBib29sIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2
ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rp
b25TaGVldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9p
b3MvV0tBY3Rpb25TaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8VUlLaXQvVUlBY3Rpb25TaGVldC5oPgorI2ltcG9ydCA8VUlLaXQv
VUlQb3BvdmVyQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0RlY2xhcmF0aW9uU3Bl
Y2lmaWVycy5oPgorCitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOworQGNsYXNzIFdL
SW50ZXJhY3Rpb25WaWV3OworCitAaW50ZXJmYWNlIFdLQWN0aW9uU2hlZXQgOiBVSUFjdGlvblNo
ZWV0Cit7CisgICAgaWQgPFdLQWN0aW9uU2hlZXREZWxlZ2F0ZT4gX3NoZWV0RGVsZWdhdGU7Cisg
ICAgaWQgPFVJQWN0aW9uU2hlZXREZWxlZ2F0ZT4gX2RlbGVnYXRlV2hpbGVSb3RhdGluZzsKKyAg
ICBVSVBvcG92ZXJBcnJvd0RpcmVjdGlvbiBfYXJyb3dEaXJlY3Rpb25zOworICAgIEJPT0wgX2lz
Um90YXRpbmc7CisgICAgV0tJbnRlcmFjdGlvblZpZXcgKl92aWV3OworfQorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBpZCA8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBzaGVldERlbGVn
YXRlOworQHByb3BlcnR5IChub25hdG9taWMpIFVJUG9wb3ZlckFycm93RGlyZWN0aW9uIGFycm93
RGlyZWN0aW9uczsKKy0gKGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3
OworLSAodm9pZClkb25lV2l0aFNoZWV0OworLSAoQk9PTClwcmVzZW50U2hlZXQ7CistIChCT09M
KXByZXNlbnRTaGVldEZyb21SZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdDsKKy0gKHZvaWQp
dXBkYXRlU2hlZXRQb3NpdGlvbjsKK0BlbmQKKworCitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERl
bGVnYXRlPFVJQWN0aW9uU2hlZXREZWxlZ2F0ZT4KK0ByZXF1aXJlZAorLSAoVUlWaWV3ICopaG9z
dFZpZXdGb3JTaGVldDooV0tBY3Rpb25TaGVldCAqKXNoZWV0OworLSAoQ0dSZWN0KWluaXRpYWxQ
cmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0OihXS0FjdGlvblNoZWV0ICopc2hlZXQ7
CistIChDR1JlY3QpcHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVldDooV0tBY3Rpb25T
aGVldCAqKXNoZWV0OworQGVuZAorCisvLyBFbGVtZW50cyB0byBkZXNjcmliZSBhY3Rpb24gc2hl
ZXQgY29udGVudC4KKworV0tfRVhQT1JUIEBpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uSW5mbyA6
IE5TT2JqZWN0IHsKKyAgICBDR1BvaW50IF9pbnRlcmFjdGlvbkxvY2F0aW9uOworICAgIE5TVVJM
ICpfdXJsOworICAgIE5TU3RyaW5nICpfdGl0bGU7CisgICAgQ0dSZWN0IF9ib3VuZGluZ1JlY3Q7
CisgICAgQ0dJbWFnZVJlZiBfc25hcHNob3Q7Cit9CistIChXS0VsZW1lbnRBY3Rpb25JbmZvICop
IGluaXRXaXRoSW5mbzooTlNVUkwgKil1cmwgbG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gdGl0
bGU6KE5TU3RyaW5nICopdGl0bGUgcmVjdDooQ0dSZWN0KXJlY3Q7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIENHUG9pbnQgaW50ZXJhY3Rpb25Mb2NhdGlvbjsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKnVybDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNTdHJpbmcgKnRpdGxlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBDR1JlY3QgYm91bmRpbmdSZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBD
R0ltYWdlUmVmIHNuYXBzaG90OworQGVuZAorCit0eXBlZGVmIHZvaWQgKF5XS0VsZW1lbnRBY3Rp
b25IYW5kbGVyKShXS0VsZW1lbnRBY3Rpb25JbmZvICopOwordHlwZWRlZiB2b2lkICheV0tFbGVt
ZW50QWN0aW9uSGFuZGxlckludGVybmFsKShXS0ludGVyYWN0aW9uVmlldyAqLCBXS0VsZW1lbnRB
Y3Rpb25JbmZvICopOworCit0eXBlZGVmIGVudW0geworICAgIFdLRWxlbWVudEFjdGlvblR5cGVD
dXN0b20gPSAwLAorICAgIFdLRWxlbWVudEFjdGlvblR5cGVPcGVuLAorICAgIFdLRWxlbWVudEFj
dGlvblR5cGVDb3B5LAorICAgIFdLRWxlbWVudEFjdGlvblR5cGVTYXZlSW1hZ2UsCisgICAgV0tF
bGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGluZ0xpc3QsCit9IFdLRWxlbWVudEFjdGlvblR5cGU7
CisKK1dLX0VYUE9SVCBAaW50ZXJmYWNlIFdLRWxlbWVudEFjdGlvbiA6IE5TT2JqZWN0IHsKKyAg
ICBOU1N0cmluZyAqX3RpdGxlOworICAgIFdLRWxlbWVudEFjdGlvbkhhbmRsZXJJbnRlcm5hbCBf
YWN0aW9uSGFuZGxlcjsKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlIF90eXBlOworfQorCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLRWxlbWVudEFjdGlvblR5cGUgdHlwZTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcqIHRpdGxlOworCisrIChXS0Vs
ZW1lbnRBY3Rpb24gKiljdXN0b21FbGVtZW50QWN0aW9uV2l0aFRpdGxlOihOU1N0cmluZyAqKXRp
dGxlIGFjdGlvbkhhbmRsZXI6KFdLRWxlbWVudEFjdGlvbkhhbmRsZXIpaGFuZGxlcjsKKysgKFdL
RWxlbWVudEFjdGlvbiAqKXN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOihXS0VsZW1lbnRB
Y3Rpb25UeXBlKXR5cGU7CisrIChXS0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1lbnRBY3Rp
b25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlIGN1c3RvbVRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlOworLSAodm9pZClydW5BY3Rpb25XaXRoRWxlbWVudEluZm86KFdLRWxlbWVudEFj
dGlvbkluZm8gKilpbmZvIHZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldzsKKworQGVuZApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNo
ZWV0Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tBY3Rpb25TaGVldC5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tBY3Rpb25TaGVldC5oIgorI2lt
cG9ydCAiV0tJbnRlcmFjdGlvblZpZXcuaCIKKworI2ltcG9ydCA8U2FmYXJpU2VydmljZXMvU1NS
ZWFkaW5nTGlzdC5oPgorCisjaW1wb3J0IDxVSUtpdC9VSUFjdGlvblNoZWV0X1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgorI2ltcG9ydCA8VUlLaXQvVUlXaW5kb3dfUHJpdmF0
ZS5oPgorCisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitT
T0ZUX0xJTktfRlJBTUVXT1JLKFNhZmFyaVNlcnZpY2VzKTsKK1NPRlRfTElOS19DTEFTUyhTYWZh
cmlTZXJ2aWNlcywgU1NSZWFkaW5nTGlzdCk7CisKK0BpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9u
KFByaXZhdGUpCistICh2b2lkKV9ydW5BY3Rpb25XaXRoRWxlbWVudDooTlNVUkwgKil0YXJnZXRV
UkwgZG9jdW1lbnRWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcgaW50ZXJhY3Rpb25Mb2Nh
dGlvbjooQ0dQb2ludClpbnRlcmFjdGlvbkxvY2F0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gV0tBY3Rpb25TaGVldAorCistIChpZClpbml0V2l0aFZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3
ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgX2Fycm93RGlyZWN0aW9ucyA9IFVJUG9wb3ZlckFycm93
RGlyZWN0aW9uQW55OworICAgIF92aWV3ID0gdmlldzsKKworICAgIGlmIChVSV9VU0VSX0lOVEVS
RkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpIHsKKyAgICAgICAgLy8g
T25seSBpUGFkcyBzdXBwb3J0IHBvcG92ZXJzIHRoYXQgcm90YXRlLiBVSUFjdGlvblNoZWV0cyBh
Y3R1YWxseSBibG9jayByb3RhdGlvbiBvbiBpUGhvbmUvaVBvZCBUb3VjaAorICAgICAgICBOU05v
dGlmaWNhdGlvbkNlbnRlciAqY2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKHdpbGxSb3RhdGUpIG5hbWU6VUlXaW5kb3dXaWxsUm90YXRlTm90aWZpY2F0aW9uIG9iamVj
dDpuaWxdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKGRpZFJvdGF0ZSkgbmFtZTpVSVdpbmRvd0RpZFJvdGF0ZU5vdGlmaWNhdGlvbiBvYmplY3Q6
bmlsXTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjpzZWxmXTsKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRo
VGFyZ2V0OnNlbGZdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsg
c2hlZXQgcHJlc2VudGF0aW9uIGNvZGUKKworLSAoQk9PTClwcmVzZW50U2hlZXQKK3sKKyAgICAv
LyBDYWxjdWxhdGUgdGhlIHByZXNlbnRhdGlvbiByZWN0IGp1c3QgYmVmb3JlIHNob3dpbmcuCisg
ICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBDR1JlY3RaZXJvOworICAgIGlmIChVSV9VU0VS
X0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpIHsKKyAgICAg
ICAgcHJlc2VudGF0aW9uUmVjdCA9IFtfc2hlZXREZWxlZ2F0ZSBpbml0aWFsUHJlc2VudGF0aW9u
UmVjdEluSG9zdFZpZXdGb3JTaGVldDpzZWxmXTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHko
cHJlc2VudGF0aW9uUmVjdCkpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAg
cmV0dXJuIFtzZWxmIHByZXNlbnRTaGVldEZyb21SZWN0OnByZXNlbnRhdGlvblJlY3RdOworfQor
CistIChCT09MKXByZXNlbnRTaGVldEZyb21SZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdAor
eworICAgIFVJVmlldyAqdmlldyA9IFtfc2hlZXREZWxlZ2F0ZSBob3N0Vmlld0ZvclNoZWV0OnNl
bGZdOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgaWYgKFVJX1VT
RVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRpb21QaG9uZSkgeworICAg
ICAgICBbc2VsZiBwcmVzZW50RnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdAorICAgICAgICAgICAg
ICAgICAgICAgICBpblZpZXc6dmlldworICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246X2Fy
cm93RGlyZWN0aW9ucworICAgIGFsbG93SW50ZXJhY3Rpb25XaXRoVmlld3M6bmlsCisgICAgICAg
ICAgICAgIGJhY2tncm91bmRTdHlsZTpVSVBvcG92ZXJCYWNrZ3JvdW5kU3R5bGVEZWZhdWx0Cisg
ICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDpZRVNdOworICAgIH0gZWxzZQorICAgICAgICBb
c2VsZiBzaG93SW5WaWV3OnZpZXddOyAKKworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQp
ZG9uZVdpdGhTaGVldAoreworICAgIF9kZWxlZ2F0ZVdoaWxlUm90YXRpbmcgPSBuaWw7CisKKyAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGRpZFJvdGF0ZSkgb2JqZWN0Om5pbF07Cit9CisKKyNwcmFnbWEg
bWFyayByb3RhdGlvbiBoYW5kbGluZyBjb2RlCisKKy0gKHZvaWQpd2lsbFJvdGF0ZQoreworICAg
IEFTU0VSVChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9t
UGhvbmUpOworCisgICAgaWYgKF9pc1JvdGF0aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDbGVhciB0aGUgZGVsZWdhdGUgc28gdGhhdCB0aGUgbWV0aG9kOgorICAgIC8vIC0gKHZvaWQp
YWN0aW9uU2hlZXQ6KFVJQWN0aW9uU2hlZXQgKilhY3Rpb25TaGVldCBkaWREaXNtaXNzV2l0aEJ1
dHRvbkluZGV4OihOU0ludGVnZXIpYnV0dG9uSW5kZXgKKyAgICAvLyBpcyBub3QgY2FsbGVkIHdo
ZW4gdGhlIEFjdGlvblNoZWV0IGlzIGRpc21pc3NlZCBiZWxvdy4gRGVsZWdhdGUgaXMgcmUtaW5z
dGF0ZWQgYWZ0ZXIgcm90YXRpb24uCisgICAgX2RlbGVnYXRlV2hpbGVSb3RhdGluZyA9IFtzZWxm
IGRlbGVnYXRlXTsKKyAgICBzZWxmLmRlbGVnYXRlID0gbmlsOworICAgIF9pc1JvdGF0aW5nID0g
WUVTOworCisgICAgW3NlbGYgZGlzbWlzc1dpdGhDbGlja2VkQnV0dG9uSW5kZXg6W3NlbGYgY2Fu
Y2VsQnV0dG9uSW5kZXhdIGFuaW1hdGVkOk5PXTsKK30KKworLSAodm9pZCl1cGRhdGVTaGVldFBv
c2l0aW9uCit7CisgICAgQVNTRVJUKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2Vy
SW50ZXJmYWNlSWRpb21QaG9uZSk7CisKKyAgICBpZiAoIV9pc1JvdGF0aW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfaXNSb3RhdGluZyA9IE5POworICAgIAorICAgIENHUmVjdCBwcmVzZW50
YXRpb25SZWN0ID0gW19zaGVldERlbGVnYXRlIHByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9y
U2hlZXQ6c2VsZl07CisgICAgaWYgKCFDR1JlY3RJc0VtcHR5KHByZXNlbnRhdGlvblJlY3QpKSB7
CisgICAgICAgIC8vIFJlLXByZXNlbnQgdGhlIHBvcG92ZXIgb25seSBpZiB3ZSBhcmUgc3RpbGwg
cG9pbnRpbmcgdG8gY29udGVudCBvbnNjcmVlbi4KKyAgICAgICAgQ0dSZWN0IGludGVyc2VjdGlv
biA9IENHUmVjdEludGVyc2VjdGlvbihbW19zaGVldERlbGVnYXRlIGhvc3RWaWV3Rm9yU2hlZXQ6
c2VsZl0gYm91bmRzXSwgcHJlc2VudGF0aW9uUmVjdCk7CisgICAgICAgIGlmICghQ0dSZWN0SXNF
bXB0eShpbnRlcnNlY3Rpb24pKSB7CisgICAgICAgICAgICBzZWxmLmRlbGVnYXRlID0gX2RlbGVn
YXRlV2hpbGVSb3RhdGluZzsKKyAgICAgICAgICAgIFtzZWxmIHByZXNlbnRTaGVldEZyb21SZWN0
OmludGVyc2VjdGlvbl07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gQ2FuY2VsIHRoZSBzaGVldCBhcyB0aGVyZSBpcyBlaXRoZXIgbm8gdmlldyBv
ciB0aGUgY29udGVudCBoYXMgbm93IG1vdmVkIG9mZiBzY3JlZW4uCisgICAgW19kZWxlZ2F0ZVdo
aWxlUm90YXRpbmcgYWN0aW9uU2hlZXQ6c2VsZiBjbGlja2VkQnV0dG9uQXRJbmRleDpbc2VsZiBj
YW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKWRpZFJvdGF0ZQoreworICAgIEFTU0VS
VChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUp
OworCisgICAgW192aWV3IF91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uXTsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV0tFbGVtZW50QWN0aW9uSW5mbworCistIChXS0VsZW1lbnRBY3Rp
b25JbmZvICopIGluaXRXaXRoSW5mbzooTlNVUkwgKil1cmwgbG9jYXRpb246KENHUG9pbnQpbG9j
YXRpb24gdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgcmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBf
dXJsID0gdXJsOworICAgIF9pbnRlcmFjdGlvbkxvY2F0aW9uID0gbG9jYXRpb247CisgICAgX3Rp
dGxlID0gdGl0bGU7CisgICAgX2JvdW5kaW5nUmVjdCA9IHJlY3Q7CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tFbGVtZW50QWN0aW9uCisKKy0gKGlk
KWluaXRXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgYWN0aW9uSGFuZGxlcjooV0tFbGVtZW50
QWN0aW9uSGFuZGxlckludGVybmFsKWhhbmRsZXIgdHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0
eXBlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgX3RpdGxlID0gW3RpdGxlIHJldGFpbl07CisgICAgX3R5cGUgPSB0eXBlOworICAg
IF9hY3Rpb25IYW5kbGVyID0gQmxvY2tfY29weShoYW5kbGVyKTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW190aXRsZSByZWxlYXNlXTsKKyAgICBbX2Fj
dGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisrIChXS0Vs
ZW1lbnRBY3Rpb24gKiljdXN0b21FbGVtZW50QWN0aW9uV2l0aFRpdGxlOihOU1N0cmluZyAqKXRp
dGxlIGFjdGlvbkhhbmRsZXI6KFdLRWxlbWVudEFjdGlvbkhhbmRsZXIpaGFuZGxlcgoreworICAg
IHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFRpdGxlOnRpdGxlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbkhhbmRsZXI6XihXS0ludGVyYWN0aW9uVmlldyAqdmlldywgV0tF
bGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgeyBoYW5kbGVyKGFjdGlvbkluZm8pOyB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6V0tFbGVtZW50QWN0aW9uVHlw
ZUN1c3RvbV0gYXV0b3JlbGVhc2VdOworfQorCitzdGF0aWMgdm9pZCBjb3B5RWxlbWVudChXS0lu
dGVyYWN0aW9uVmlldyAqdmlldykKK3sKKyAgICBbdmlldyBfcGVyZm9ybUFjdGlvbjpAImNvcHki
XTsKK30KKworc3RhdGljIHZvaWQgc2F2ZUltYWdlKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3KQor
eworICAgIFt2aWV3IF9wZXJmb3JtQWN0aW9uOkAic2F2ZSJdOworfQorCitzdGF0aWMgdm9pZCBh
ZGRUb1JlYWRpbmdMaXN0KE5TVVJMICp0YXJnZXRVUkwsIE5TU3RyaW5nICp0aXRsZSkKK3sKKyAg
ICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW3RhcmdldFVSTCBhYnNvbHV0ZVN0cmluZ107CisgICAg
aWYgKCF0aXRsZSB8fCBbdGl0bGUgbGVuZ3RoXSA9PSAwKQorICAgICAgICB0aXRsZSA9IHVybFN0
cmluZzsKKworICAgIFtbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgZGVmYXVsdFJlYWRpbmdMaXN0
XSBhZGRSZWFkaW5nTGlzdEl0ZW1XaXRoVVJMOnRhcmdldFVSTCB0aXRsZTp0aXRsZSBwcmV2aWV3
VGV4dDpuaWwgZXJyb3I6bmlsXTsKK30KKworKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRhcmRF
bGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZSBjdXN0b21UaXRs
ZTooTlNTdHJpbmcgKiljdXN0b21UaXRsZQoreworICAgIE5TU3RyaW5nICp0aXRsZTsKKyAgICBX
S0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwgaGFuZGxlcjsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBXS0VsZW1lbnRBY3Rpb25UeXBlQ29weToKKyAgICAgICAgICAgIHRp
dGxlID0gV0VCX1VJX1NUUklOR19LRVkoIkNvcHkiLCAiQ29weSBBY3Rpb25TaGVldCBMaW5rIiwg
IlRpdGxlIGZvciBDb3B5IExpbmsgb3IgSW1hZ2UgYWN0aW9uIGJ1dHRvbiIpOworICAgICAgICAg
ICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbklu
Zm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgICAgICBjb3B5RWxlbWVudCh2aWV3KTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0VsZW1lbnRB
Y3Rpb25UeXBlT3BlbjoKKyAgICAgICAgICAgIHRpdGxlID0gV0VCX1VJX1NUUklOR19LRVkoIk9w
ZW4iLCAiT3BlbiBBY3Rpb25TaGVldCBMaW5rIiwgIlRpdGxlIGZvciBPcGVuIExpbmsgYWN0aW9u
IGJ1dHRvbiIpOworICAgICAgICAgICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZp
ZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgICAgICBb
dmlldyBfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjphY3Rpb25JbmZvLmludGVyYWN0aW9uTG9jYXRp
b25dOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdL
RWxlbWVudEFjdGlvblR5cGVTYXZlSW1hZ2U6CisgICAgICAgICAgICB0aXRsZSA9IFdFQl9VSV9T
VFJJTkdfS0VZKCJTYXZlIEltYWdlIiwgIlNhdmUgSW1hZ2UiLCAiVGl0bGUgZm9yIFNhdmUgSW1h
Z2UgYWN0aW9uIGJ1dHRvbiIpOworICAgICAgICAgICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlv
blZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAg
ICAgICAgICBzYXZlSW1hZ2Uodmlldyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGluZ0xpc3Q6Cisg
ICAgICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkcoIkFkZCB0byBSZWFkaW5nIExpc3QiLCAi
VGl0bGUgZm9yIEFkZCB0byBSZWFkaW5nIExpc3QgYWN0aW9uIGJ1dHRvbiIpOworICAgICAgICAg
ICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbklu
Zm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgICAgICBhZGRUb1JlYWRpbmdMaXN0KGFjdGlv
bkluZm8udXJsLCBhY3Rpb25JbmZvLnRpdGxlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJUaGVyZSBpcyBubyBzdGFuZGFy
ZCB3ZWIgZWxlbWVudCBhY3Rpb24gb2YgdHlwZSAlZC4iLCB0eXBlXTsKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgfQorICAgIHJldHVybiBbW1tXS0VsZW1lbnRBY3Rpb24gYWxsb2NdIGlu
aXRXaXRoVGl0bGU6KGN1c3RvbVRpdGxlID8gY3VzdG9tVGl0bGUgOiB0aXRsZSkgYWN0aW9uSGFu
ZGxlcjpoYW5kbGVyIHR5cGU6dHlwZV0gYXV0b3JlbGVhc2VdOworfQorCisrIChXS0VsZW1lbnRB
Y3Rpb24gKilzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlw
ZSl0eXBlCit7CisgICAgcmV0dXJuIFtzZWxmIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBl
OnR5cGUgY3VzdG9tVGl0bGU6bmlsXTsKK30KKworLSAodm9pZClydW5BY3Rpb25XaXRoRWxlbWVu
dEluZm86KFdLRWxlbWVudEFjdGlvbkluZm8gKilpbmZvIHZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3
ICopdmlldworeworICAgIF9hY3Rpb25IYW5kbGVyKHZpZXcsIGluZm8pOworfQorCitAZW5kCisK
KwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0lu
dGVyYWN0aW9uVmlldy5oCShyZXZpc2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lt
cG9ydCAiV0tBY3Rpb25TaGVldC5oIgorCiAjaW1wb3J0IDxVSUtpdC9VSVdlYkZvcm1BY2Nlc3Nv
cnkuaD4KICNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJVmlldy5oPgpAQCAtNDcsNyArNDksNyBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb247CiAKIEBjbGFzcyBXZWJJT1NFdmVudDsKIAotQGludGVyZmFjZSBXS0lu
dGVyYWN0aW9uVmlldyA6IFVJVmlldzxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2Vi
VG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUs
IFVJV2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2w+
CitAaW50ZXJmYWNlIFdLSW50ZXJhY3Rpb25WaWV3IDogVUlWaWV3PFVJR2VzdHVyZVJlY29nbml6
ZXJEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJ
VGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJV0tJbnRlcmFj
dGlvblZpZXdQcm90b2NvbCwgV0tBY3Rpb25TaGVldERlbGVnYXRlPgogCiAtICh2b2lkKXNldFNj
cm9sbFZpZXc6KFVJV2ViU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXc7CiAtICh2b2lkKXNldFBhZ2U6
KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2U7CkBAIC01OSw0ICs2MSw3IEBA
IHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjsKIC0gKHZvaWQpX3NlbGVj
dGlvbkNoYW5nZWQ7CiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKil0
aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKIC0gKHZvaWQpX3Bvc2l0aW9u
SW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24mKWluZm87CistICh2b2lkKV9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOihDR1Bv
aW50KWxvY2F0aW9uOworLSAodm9pZClfcGVyZm9ybUFjdGlvbjooTlNTdHJpbmcgKilhY3Rpb247
CistICh2b2lkKV91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uOwogQGVuZApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcu
bW0JKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1dLSW50ZXJhY3Rpb25WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyOCArMjksNDcgQEAK
ICNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCiAjaW1wb3J0ICJO
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJUb3VjaEV2ZW50Lmgi
CisjaW1wb3J0ICJXS0FjdGlvblNoZWV0LmgiCiAjaW1wb3J0ICJXS0Jhc2UuaCIKICNpbXBvcnQg
IldLR2VzdHVyZVR5cGVzLmgiCiAjaW1wb3J0ICJXZWJFdmVudC5oIgogI2ltcG9ydCAiV2ViSU9T
RXZlbnRGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8U2FmYXJpU2VydmljZXMvU1NSZWFkaW5nTGlzdC5oPgorI2lt
cG9ydCA8VENDL1RDQy5oPgogI2ltcG9ydCA8VUlLaXQvVUlGb250X1ByaXZhdGUuaD4KICNpbXBv
cnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQv
VUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlUYXBHZXN0dXJlUmVjb2duaXplcl9Q
cml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnRlcmFjdGlvbkFzc2lzdGFudF9Qcml2
YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyX1ByaXZhdGUuaD4KICNpbXBv
cnQgPFVJS2l0L1VJV2ViRG9jdW1lbnRWaWV3Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVdlYlNjcm9s
bFZpZXcuaD4KICNpbXBvcnQgPFVJS2l0L19VSUhpZ2hsaWdodFZpZXcuaD4KICNpbXBvcnQgPFVJ
S2l0L19VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1VSTEV4dHJhcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJFdmVudC5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYlNlbGVjdGlvblJlY3QuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitTT0ZUX0xJTktfRlJBTUVX
T1JLKFNhZmFyaVNlcnZpY2VzKQorU09GVF9MSU5LX0NMQVNTKFNhZmFyaVNlcnZpY2VzLCBTU1Jl
YWRpbmdMaXN0KQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoVENDKQorU09GVF9MSU5L
KFRDQywgVENDQWNjZXNzUHJlZmxpZ2h0LCBUQ0NBY2Nlc3NQcmVmbGlnaHRSZXN1bHQsIChDRlN0
cmluZ1JlZiBzZXJ2aWNlLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyksIChzZXJ2aWNlLCBvcHRp
b25zKSkKK1NPRlRfTElOS19DT05TVEFOVChUQ0MsIGtUQ0NTZXJ2aWNlUGhvdG9zLCBDRlN0cmlu
Z1JlZikKKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKERhdGFEZXRlY3RvcnNVSSkKK1NP
RlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMTY3
LDYgKzE4Niw4IEBAIEBpbnRlcmZhY2UgV0tJbnRlcmFjdGlvblZpZXcgKFByaXZhdGUpCiAgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBfbWFya2VkVGV4dDsKICAgICBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbiBfcG9zaXRpb25JbmZvcm1hdGlvbjsKICAgICBCT09MIF9oYXNWYWxpZFBv
c2l0aW9uSW5mb3JtYXRpb247CisgICAgUmV0YWluUHRyPFdLQWN0aW9uU2hlZXQ+IF9pbnRlcmFj
dGlvblNoZWV0OworICAgIE5TQXJyYXkqIF9lbGVtZW50QWN0aW9uczsKIH0KIAogQHN5bnRoZXNp
emUgaW5wdXREZWxlZ2F0ZSA9IF9pbnB1dERlbGVnYXRlOwpAQCAtNDE1LDI0ICs0MzYsMjU4IEBA
IC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY28KICAgICByZXR1cm4gTk87
CiB9CiAKKy8vIFdLQWN0aW9uU2hlZXREZWxlZ2F0ZQorCistIChVSVZpZXcgKilzdXBlcnZpZXdG
b3JTaGVldAoreworICAgIFVJVmlldyAqdmlldyA9IFtzZWxmIHdpbmRvd107CisKKyAgICAvLyBG
SVhNRTogV2ViS2l0IGhhcyBhIGRlbGVnYXRlIHRvIHJldHJpZXZlIHRoZSBzdXBlcnZpZXcgZm9y
IHRoZSBpbWFnZSBzaGVldCAoc3VwZXJ2aWV3Rm9ySW1hZ2VTaGVldEZvcldlYlZpZXcpCisgICAg
Ly8gRG8gd2UgbmVlZCBpdCBpbiBXSzI/CisKKyAgICAvLyBGaW5kIHRoZSB0b3AgbW9zdCB2aWV3
IHdpdGggYSB2aWV3IGNvbnRyb2xsZXIKKyAgICBVSVZpZXdDb250cm9sbGVyICpjb250cm9sbGVy
ID0gbmlsOworICAgIFVJVmlldyogY3VycmVudFZpZXcgPSBzZWxmOworICAgIHdoaWxlIChjdXJy
ZW50VmlldykgeworICAgICAgICBVSVZpZXdDb250cm9sbGVyICphQ29udHJvbGxlciA9IFtVSVZp
ZXdDb250cm9sbGVyIHZpZXdDb250cm9sbGVyRm9yVmlldzpjdXJyZW50Vmlld107CisgICAgICAg
IGlmIChhQ29udHJvbGxlcikKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBhQ29udHJvbGxlcjsK
KworICAgICAgICBjdXJyZW50VmlldyA9IFtjdXJyZW50VmlldyBzdXBlcnZpZXddOworICAgIH0K
KyAgICBpZiAoY29udHJvbGxlcikKKyAgICAgICAgdmlldyA9IGNvbnRyb2xsZXIudmlldzsKKwor
ICAgIHJldHVybiB2aWV3OworfQorCistIChDR1JlY3QpX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVl
dEdpdmVuUG9pbnQ6KENHUG9pbnQpcG9pbnQgaW5Ib3N0VmlldzooVUlWaWV3ICopaG9zdFZpZXcK
K3sKKyAgICBDR1BvaW50IHByZXNlbnRhdGlvblBvaW50ID0gW2hvc3RWaWV3IGNvbnZlcnRQb2lu
dDpwb2ludCBmcm9tVmlldzpzZWxmXTsKKyAgICBDR1JlY3QgcHJlc2VudGF0aW9uUmVjdCA9IENH
UmVjdE1ha2UocHJlc2VudGF0aW9uUG9pbnQueCwgcHJlc2VudGF0aW9uUG9pbnQueSwgMS4wLCAx
LjApOworCisgICAgcmV0dXJuIENHUmVjdEluc2V0KHByZXNlbnRhdGlvblJlY3QsIC0yMi4wLCAt
MjIuMCk7Cit9CisKKy0gKFVJVmlldyAqKWhvc3RWaWV3Rm9yU2hlZXQ6KFdLQWN0aW9uU2hlZXQg
KilzaGVldAoreworICAgIHJldHVybiBbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF07Cit9CisKKy0g
KENHUmVjdClpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVldDooV0tBY3Rp
b25TaGVldCAqKXNoZWV0Cit7CisgICAgVUlWaWV3ICp2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3Rm9y
U2hlZXRdOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisKKyAg
ICByZXR1cm4gW3NlbGYgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6X3Bvc2l0
aW9uSW5mb3JtYXRpb24ucG9pbnQgaW5Ib3N0Vmlldzp2aWV3XTsKKworfQorCistIChDR1JlY3Qp
cHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVldDooV0tBY3Rpb25TaGVldCAqKXNoZWV0
Cit7CisgICAgVUlWaWV3ICp2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisKKyAgICBDR1JlY3QgYm91bmRp
bmdSZWN0ID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzOworICAgIENHUG9pbnQgZnJvbVBv
aW50ID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24ucG9pbnQ7CisKKyAgICAvLyBGSVhNRTogV2UgbXVz
dCBhZGp1c3Qgb3VyIHByZXNlbnRhdGlvbiBwb2ludCB0byB0YWtlIGludG8gYWNjb3VudCBhIGNo
YW5nZSBpbiBkb2N1bWVudCBzY2FsZS4KKworICAgIC8vIFRlc3QgdG8gc2VlIGlmIHdlIGFyZSBz
dGlsbCB3aXRoaW4gdGhlIHRhcmdldCBub2RlIGFzIGl0IG1heSBoYXZlIG1vdmVkIGFmdGVyIHJv
dGF0aW9uLgorICAgIGlmICghQ0dSZWN0Q29udGFpbnNQb2ludChib3VuZGluZ1JlY3QsIGZyb21Q
b2ludCkpCisgICAgICAgIGZyb21Qb2ludCA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoYm91
bmRpbmdSZWN0KSwgQ0dSZWN0R2V0TWlkWShib3VuZGluZ1JlY3QpKTsKKworICAgIHJldHVybiBb
c2VsZiBfcHJlc2VudGF0aW9uUmVjdEZvclNoZWV0R2l2ZW5Qb2ludDpmcm9tUG9pbnQgaW5Ib3N0
Vmlldzp2aWV3XTsKK30KKworLSAodm9pZClhY3Rpb25TaGVldDooVUlBY3Rpb25TaGVldCAqKWFj
dGlvblNoZWV0IGNsaWNrZWRCdXR0b25BdEluZGV4OihOU0ludGVnZXIpYnV0dG9uSW5kZXgKK3sK
KyAgICBBU1NFUlQoYWN0aW9uU2hlZXQgPT0gX2ludGVyYWN0aW9uU2hlZXQpOworICAgIGlmIChh
Y3Rpb25TaGVldCAhPSBfaW50ZXJhY3Rpb25TaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKF9lbGVtZW50QWN0aW9ucyAmJiBidXR0b25JbmRleCA8IChOU0ludGVnZXIpW19lbGVtZW50
QWN0aW9ucyBjb3VudF0pIHsKKyAgICAgICAgV0tFbGVtZW50QWN0aW9uSW5mbyogYWN0aW9uSW5m
byA9IFtbV0tFbGVtZW50QWN0aW9uSW5mbyBhbGxvY10gaW5pdFdpdGhJbmZvOltOU1VSTCBVUkxX
aXRoU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybF0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uOl9wb3NpdGlvbkluZm9ybWF0aW9uLnBvaW50CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aXRsZTpfcG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y3Q6X3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzXTsKKyAgICAgICAgW1tfZWxlbWVudEFjdGlv
bnMgb2JqZWN0QXRJbmRleDpidXR0b25JbmRleF0gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmFj
dGlvbkluZm8gdmlldzpzZWxmXTsKKyAgICAgICAgW2FjdGlvbkluZm8gcmVsZWFzZV07CisgICAg
fQorCisgICAgW3NlbGYgX2NsZWFudXBTaGVldF07Cit9CisKKy0gKHZvaWQpX2NsZWFudXBTaGVl
dAoreworICAgIF9wYWdlLT5zdG9wSW50ZXJhY3Rpb24oKTsKKworICAgIFtfaW50ZXJhY3Rpb25T
aGVldCBkb25lV2l0aFNoZWV0XTsKKyAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0U2hlZXREZWxl
Z2F0ZTpuaWxdOworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXREZWxlZ2F0ZTpuaWxdOworICAg
IF9pbnRlcmFjdGlvblNoZWV0ID0gbmlsOworCisgICAgW19lbGVtZW50QWN0aW9ucyByZWxlYXNl
XTsKKyAgICBfZWxlbWVudEFjdGlvbnMgPSBuaWw7Cit9CisKKy0gKHZvaWQpX2NyZWF0ZVNoZWV0
V2l0aEVsZW1lbnRBY3Rpb25zOihOU0FycmF5ICopYWN0aW9ucyBzaG93TGlua1RpdGxlOihCT09M
KXNob3dMaW5rVGl0bGUKK3sKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKKworICAg
IE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfcG9zaXRpb25JbmZvcm1h
dGlvbi51cmxdOworICAgIEJPT0wgaXNKYXZhU2NyaXB0VVJMID0gW1t0YXJnZXRVUkwgc2NoZW1l
XSBsZW5ndGhdICYmIFtbdGFyZ2V0VVJMIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
ImphdmFzY3JpcHQiXSA9PSBOU09yZGVyZWRTYW1lOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y2hlY2sgaWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcy4KKworICAg
IC8vIFRoZSBzaGVldCBpcyByZWxlYXNlZCBpbiBhY3Rpb25TaGVldDpjbGlja2VkQnV0dG9uQXRJ
bmRleDoKKyAgICBfaW50ZXJhY3Rpb25TaGVldCA9IGFkb3B0TlMoW1tXS0FjdGlvblNoZWV0IGFs
bG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOworICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLnNo
ZWV0RGVsZWdhdGUgPSBzZWxmOworICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmFjdGlvblNo
ZWV0U3R5bGUgPSBVSUFjdGlvblNoZWV0U3R5bGVBdXRvbWF0aWM7CisgICAgX2ludGVyYWN0aW9u
U2hlZXQuZ2V0KCkuZGVsZWdhdGUgPSBzZWxmOworCisgICAgTlNTdHJpbmcgKnRpdGxlU3RyaW5n
ID0gbmlsOworICAgIEJPT0wgdGl0bGVJc1VSTCA9IE5POworICAgIGlmIChzaG93TGlua1RpdGxl
KSB7CisgICAgICAgIGlmIChpc0phdmFTY3JpcHRVUkwpCisgICAgICAgICAgICB0aXRsZVN0cmlu
ZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJKYXZhU2NyaXB0IiwgIkphdmFTY3JpcHQgQWN0aW9uIFNo
ZWV0IFRpdGxlIiwgIlRpdGxlIGZvciBhY3Rpb24gc2hlZXQgZm9yIEphdmFTY3JpcHQgbGluayIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpdGxlU3RyaW5nID0gdXNlclZpc2libGVT
dHJpbmcodGFyZ2V0VVJMKTsKKyAgICAgICAgICAgIHRpdGxlSXNVUkwgPSBZRVM7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGl0bGVTdHJpbmcgPSBfcG9zaXRpb25JbmZvcm1hdGlv
bi50aXRsZTsKKworICAgIGlmIChbdGl0bGVTdHJpbmcgbGVuZ3RoXSkgeworICAgICAgICBbX2lu
dGVyYWN0aW9uU2hlZXQgc2V0VGl0bGU6dGl0bGVTdHJpbmddOworICAgICAgICBpZiAodGl0bGVJ
c1VSTCkgeworICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBfdGl0bGVMYWJlbF0gc2V0
TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ01pZGRsZV07CisgICAgICAgICAg
ICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0VGl0bGVNYXhMaW5lQ291bnQ6Ml07CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBfdGl0bGVMYWJlbF0gc2V0TGlu
ZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOworICAgIH0KKworICAgIC8v
IFRoZSBlbGVtZW50IGFjdGlvbnMgYXJlIHJlbGVhc2VkIGluIGFjdGlvblNoZWV0OmNsaWNrZWRC
dXR0b25BdEluZGV4OgorICAgIF9lbGVtZW50QWN0aW9ucyA9IFthY3Rpb25zIGNvcHldOworICAg
IGZvciAoV0tFbGVtZW50QWN0aW9uICphY3Rpb24gaW4gX2VsZW1lbnRBY3Rpb25zKQorICAgICAg
ICBbX2ludGVyYWN0aW9uU2hlZXQgYWRkQnV0dG9uV2l0aFRpdGxlOlthY3Rpb24gdGl0bGVdXTsK
KworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXRDYW5jZWxCdXR0b25JbmRleDpbX2ludGVyYWN0
aW9uU2hlZXQgYWRkQnV0dG9uV2l0aFRpdGxlOldFQl9VSV9TVFJJTkdfS0VZKCJDYW5jZWwiLCAi
Q2FuY2VsIGJ1dHRvbiBsYWJlbCBpbiBidXR0b24gYmFyIiwgIlRpdGxlIGZvciBDYW5jZWwgYnV0
dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiKV1dOworICAgIF9wYWdlLT5zdGFydEludGVyYWN0aW9u
V2l0aEVsZW1lbnRBdFBvc2l0aW9uKF9wb3NpdGlvbkluZm9ybWF0aW9uLnBvaW50KTsKK30KKwog
LSAodm9pZClfc2hvd0ltYWdlU2hlZXQKIHsKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0
KTsKKworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfcG9zaXRp
b25JbmZvcm1hdGlvbi51cmxdOworICAgIE5TTXV0YWJsZUFycmF5ICphY3Rpb25zID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKKyAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLnVybC5pc0Vt
cHR5KCkpCisgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5k
YXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVPcGVuXV07CisgICAg
aWYgKFtnZXRTU1JlYWRpbmdMaXN0Q2xhc3MoKSBzdXBwb3J0c1VSTDp0YXJnZXRVUkxdKQorICAg
ICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRB
Y3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlQWRkVG9SZWFkaW5nTGlzdF1dOworICAg
IGlmIChUQ0NBY2Nlc3NQcmVmbGlnaHQoZ2V0a1RDQ1NlcnZpY2VQaG90b3MoKSwgTlVMTCkgIT0g
a1RDQ0FjY2Vzc1ByZWZsaWdodERlbmllZCkKKyAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltX
S0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0
aW9uVHlwZVNhdmVJbWFnZV1dOworICAgIGlmICghW1t0YXJnZXRVUkwgc2NoZW1lXSBsZW5ndGhd
IHx8IFtbdGFyZ2V0VVJMIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImphdmFzY3Jp
cHQiXSAhPSBOU09yZGVyZWRTYW1lKQorICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxl
bWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25U
eXBlQ29weV1dOwogCisgICAgLy8gRklYTUU6IEFkZCBjYWxsIHRvIGRlbGVnYXRlIHRvIGFkZCBj
dXN0b20gYWN0aW9ucy4KKworICAgIFtzZWxmIF9jcmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9u
czphY3Rpb25zIHNob3dMaW5rVGl0bGU6WUVTXTsKKyAgICBpZiAoIV9pbnRlcmFjdGlvblNoZWV0
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtfaW50ZXJhY3Rpb25TaGVldCBwcmVzZW50
U2hlZXRdKQorICAgICAgICBbc2VsZiBhY3Rpb25TaGVldDpfaW50ZXJhY3Rpb25TaGVldC5nZXQo
KSBjbGlja2VkQnV0dG9uQXRJbmRleDpbX2ludGVyYWN0aW9uU2hlZXQgY2FuY2VsQnV0dG9uSW5k
ZXhdXTsKIH0KIAogLSAodm9pZClfc2hvd0xpbmtTaGVldAogeworICAgIEFTU0VSVCghX2ludGVy
YWN0aW9uU2hlZXQpOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpfcG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOworICAgIGlmICghdGFyZ2V0VVJMKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOU011dGFibGVBcnJheSAqYWN0aW9ucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CisgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRh
cmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZU9wZW5dXTsKKyAgICBp
ZiAoW2dldFNTUmVhZGluZ0xpc3RDbGFzcygpIHN1cHBvcnRzVVJMOnRhcmdldFVSTF0pCisgICAg
ICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFj
dGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0XV07CisgICAg
aWYgKCFbW3RhcmdldFVSTCBzY2hlbWVdIGxlbmd0aF0gfHwgW1t0YXJnZXRVUkwgc2NoZW1lXSBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiamF2YXNjcmlwdCJdICE9IE5TT3JkZXJlZFNhbWUpCisg
ICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVu
dEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVDb3B5XV07CisKKyAgICAvLyBGSVhN
RTogQWRkIGNhbGwgdG8gZGVsZWdhdGUgdG8gYWRkIGN1c3RvbSBhY3Rpb25zLgorCisgICAgW3Nl
bGYgX2NyZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOmFjdGlvbnMgc2hvd0xpbmtUaXRsZTpZ
RVNdOworICAgIGlmICghX2ludGVyYWN0aW9uU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghW19pbnRlcmFjdGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFj
dGlvblNoZWV0Ol9pbnRlcmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0b25BdEluZGV4Oltf
aW50ZXJhY3Rpb25TaGVldCBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKV9zaG93
RGF0YURldGVjdG9yc1NoZWV0Cit7CisgICAgQVNTRVJUKCFfaW50ZXJhY3Rpb25TaGVldCk7Cisg
ICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9wb3NpdGlvbkluZm9y
bWF0aW9uLnVybF07CisgICAgaWYgKCF0YXJnZXRVUkwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghW1tnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHRhcEFuZEhvbGRTY2hlbWVz
XSBjb250YWluc09iamVjdDpbdGFyZ2V0VVJMIHNjaGVtZV1dKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkLgorICAgIC8vIFdlIG5lZWQg
YSBkaWZmZXJlbnQgQVBJIGZvciBERERlY3RlY3Rpb25Db250cm9sbGVyIHRoYXQgZG9lc24ndCB0
YWtlIERPTU5vZGUgYW5kIFdlYkZyYW1lIG9iamVjdHMuCisgICAgLy8gTlNBcnJheSAqZGF0YURl
dGVjdG9yc0FjdGlvbnMgPSBbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgc2hhcmVk
Q29udHJvbGxlcl0gYWN0aW9uc0ZvckRPTU5vZGU6X2ludGVyYWN0aW9uLmVsZW1lbnQgZm9yRnJh
bWU6W193ZWJWaWV3IG1haW5GcmFtZV1dOworICAgIE5TQXJyYXkgKmRhdGFEZXRlY3RvcnNBY3Rp
b25zID0gbmlsOworCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIHdpbGwg
YWx3YXlzIGJlIHRydWUgZm9yIG5vdywgc2luY2UgdGhlcmUgYXJlIG5vIHZpYWJsZSBjYWxscyB0
byByZXRyaWV2ZQorICAgIC8vIGRhdGEgZGV0ZWN0b3IgYWN0aW9ucy4KKyAgICBpZiAoW2RhdGFE
ZXRlY3RvcnNBY3Rpb25zIGNvdW50XSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBOU011
dGFibGVBcnJheSAqZWxlbWVudEFjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAg
IGZvciAoTlNVSW50ZWdlciBhY3Rpb25OdW1iZXIgPSAwOyBhY3Rpb25OdW1iZXIgPCBbZGF0YURl
dGVjdG9yc0FjdGlvbnMgY291bnRdOyBhY3Rpb25OdW1iZXIrKykgeworICAgICAgICBEREFjdGlv
biAqYWN0aW9uID0gW2RhdGFEZXRlY3RvcnNBY3Rpb25zIG9iamVjdEF0SW5kZXg6YWN0aW9uTnVt
YmVyXTsKKyAgICAgICAgW2VsZW1lbnRBY3Rpb25zIGFkZE9iamVjdDpbVUlXZWJFbGVtZW50QWN0
aW9uIGN1c3RvbUVsZW1lbnRBY3Rpb25XaXRoVGl0bGU6W2FjdGlvbiBsb2NhbGl6ZWROYW1lXSBh
Y3Rpb25IYW5kbGVyOl4oVUlXZWJFbGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgeworICAg
ICAgICAgICAgVUlQb3BvdmVyQ29udHJvbGxlciAqcG9wb3ZlckNvbnRyb2xsZXIgPSBuaWw7Cisg
ICAgICAgICAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAhPSBVSVVzZXJJbnRlcmZh
Y2VJZGlvbVBob25lKSB7CisgICAgICAgICAgICAgICAgW19pbnRlcmFjdGlvblNoZWV0IHNldFVz
ZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOworICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS8xMTAxNTc1MT4gQWN0aW9uIHNoZWV0IGJlY29tZXMgYmxhY2sgaWYgYSBidXR0b24gaXMg
Y2xpY2tlZCB0d2ljZSBvbiBpUGFkCisgICAgICAgICAgICAgICAgLy8gcHJldmVudCBhbnkgZnVy
dGhlciB0YXAgb24gdGhlIHNoZWV0IHdoaWxlIEREIGlzIGxvYWRpbmcgaXRzIHZpZXcgY29udHJv
bGxlciwgb3RoZXJ3aXNlIFVJQWN0aW9uU2hlZXQgZ29lcyBhbW9rCiAKKyAgICAgICAgICAgICAg
ICBwb3BvdmVyQ29udHJvbGxlciA9IFtfaW50ZXJhY3Rpb25TaGVldCBfcmVsaW5xdWlzaFBvcG92
ZXJDb250cm9sbGVyXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgW1tnZXRERERldGVj
dGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdIHBlcmZvcm1BY3Rpb246YWN0
aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluVmlldzpbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFBvcG92ZXJDb250cm9sbGVyOnBv
cG92ZXJDb250cm9sbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ZXJhY3Rpb25EZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgfV1dOworICAgIH0K
KworICAgIFtzZWxmIF9jcmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9uczplbGVtZW50QWN0aW9u
cyBzaG93TGlua1RpdGxlOk5PXTsKKyAgICBpZiAoIV9pbnRlcmFjdGlvblNoZWV0KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBUaGUgaW1wbGljaXQgc2Vjb25kIGJ1dHRvbiBpcyAiY2FuY2Vs
Iiwgd2hpY2ggaXMgc3dhbGxvd2VkIGJ5IHRoZSBwb3BvdmVyIGF0IHByZXNlbnRhdGlvbiB0aW1l
LgorICAgIGlmIChfaW50ZXJhY3Rpb25TaGVldC5nZXQoKS5udW1iZXJPZkJ1dHRvbnMgPD0gMikK
KyAgICAgICAgX2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkuYXJyb3dEaXJlY3Rpb25zID0gVUlQb3Bv
dmVyQXJyb3dEaXJlY3Rpb25VcCB8IFVJUG9wb3ZlckFycm93RGlyZWN0aW9uRG93bjsKKworICAg
IGlmICghW19pbnRlcmFjdGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFj
dGlvblNoZWV0Ol9pbnRlcmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0b25BdEluZGV4Oltf
aW50ZXJhY3Rpb25TaGVldCBjYW5jZWxCdXR0b25JbmRleF1dOwogfQogCiAtIChTRUwpX2FjdGlv
bkZvckxvbmdQcmVzcwogewogICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVF
bGVtZW50TmFtZSA9PSAiSU1HIikKICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hvd0ltYWdl
U2hlZXQpOwotICAgIGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1l
bnROYW1lID09ICJBIikKKyAgICBlbHNlIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2Fi
bGVFbGVtZW50TmFtZSA9PSAiQSIpIHsKKyAgICAgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgICAgIGlmIChb
W2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5kSG9sZFNjaGVtZXNdIGNvbnRh
aW5zT2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCisgICAgICAgICAgICByZXR1cm4gQHNlbGVj
dG9yKF9zaG93RGF0YURldGVjdG9yc1NoZWV0KTsKICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihf
c2hvd0xpbmtTaGVldCk7Ci0gICAgLy8gRklYTUU6IEFkZCBjaGVjayBmb3IgbGlua3MgYW5kIGRh
dGFkZXRlY3RvcnMuCi0KKyAgICB9CiAgICAgcmV0dXJuIG5pbDsKIH0KIApAQCAtNDQ0LDYgKzY5
OSwxMiBAQCAtICh2b2lkKWVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9ECiAgICAgfQog
fQogCistICh2b2lkKV91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uCit7CisgICAgX2hhc1ZhbGlk
UG9zaXRpb25JbmZvcm1hdGlvbiA9IE5POworICAgIF9wYWdlLT5yZXF1ZXN0UG9zaXRpb25JbmZv
cm1hdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Cit9CisKIC0gKEJPT0wpZ2VzdHVy
ZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNv
Z25pemVyCiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFtnZXN0dXJlUmVjb2duaXplciBsb2NhdGlv
bkluVmlldzpzZWxmXTsKQEAgLTU3MiwxOCArODMzLDEwIEBAIC0gKHZvaWQpX2xvbmdQcmVzc1Jl
Y29nbml6ZWQ6KFVJTG9uZ1ByZXMKIHsKICAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0g
X2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKIAotICAgIHN3aXRjaCAoW2dlc3R1cmVSZWNv
Z25pemVyIHN0YXRlXSkgewotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW46
Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDoKLSAgICAgICAgLy8gRklYTUU6
IGFkZCBpbXBsZW1lbnRhdGlvbgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKLSAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBsZW1lbnRh
dGlvbgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBp
ZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVC
ZWdhbikgeworICAgICAgICBTRUwgYWN0aW9uID0gW3NlbGYgX2FjdGlvbkZvckxvbmdQcmVzc107
CisgICAgICAgIGlmIChhY3Rpb24pCisgICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6
YWN0aW9uXTsKICAgICB9CiB9CiAKQEAgLTY1NCw2ICs5MDcsOCBAQCAtICh2b2lkKV9wb3NpdGlv
bkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjCiB7CiAgICAgX3Bvc2l0aW9uSW5mb3JtYXRpb24gPSBp
bmZvOwogICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7CisgICAgaWYgKF9p
bnRlcmFjdGlvblNoZWV0KQorICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgdXBkYXRlU2hlZXRQ
b3NpdGlvbl07CiB9CiAKIC0gKFVJVmlldyAqKWlucHV0QWNjZXNzb3J5VmlldwpAQCAtODI4LDYg
KzEwODMsMTEgQEAgLSAodm9pZClzZWxlY3RBbGw6KGlkKXNlbmRlcgogICAgIF9wYWdlLT5leGVj
dXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJzZWxlY3RBbGwiKSk7CiB9CiAKKy0gKHZvaWQp
X3BlcmZvcm1BY3Rpb246KE5TU3RyaW5nICopYWN0aW9uCit7CisgICAgX3BhZ2UtPnBlcmZvcm1B
Y3Rpb25PbkVsZW1lbnQoYWN0aW9uKTsKK30KKwogLSAodm9pZCl0b2dnbGVCb2xkZmFjZTooaWQp
c2VuZGVyCiB7CiAgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSkKQEAgLTExOTEsNyArMTQ1MSw3IEBAIC0gKHZvaWQpYWNjZXNzb3J5Q2xlYXIKIAog
LSAodm9pZClfdXBkYXRlQWNjZXNzb3J5CiB7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW5pdGlh
bGl6ZSB3aXRoIHZhbHVzIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gaW5pdGlhbGl6ZSB3aXRoIHZhbHVlcyBmcm9tIHRoZSBXZWJQcm9jZXNzLgogICAgIF9h
Y2Nlc3NvcnkubmV4dEVuYWJsZWQgPSBZRVM7CiAgICAgX2FjY2Vzc29yeS5wcmV2aW91c0VuYWJs
ZWQgPSBZRVM7CiAgICAgCkBAIC0xNDI1LDggKzE2ODUsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVk
RE9NUmFuZ2U6KERPTVJhbmdlICopCiB7CiB9CiAKLS8qIE1vZGlmeSB0ZXh0IHdpdGhvdXQgc3Rh
cnRpbmcgYSBuZXcgdW5kbyBncm91cGluZy4KLSAqLworLy8gTW9kaWZ5IHRleHQgd2l0aG91dCBz
dGFydGluZyBhIG5ldyB1bmRvIGdyb3VwaW5nLgogLSAodm9pZClyZXBsYWNlUmFuZ2VXaXRoVGV4
dFdpdGhvdXRDbG9zaW5nVHlwaW5nOihVSVRleHRSYW5nZSAqKXJhbmdlIHJlcGxhY2VtZW50VGV4
dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMyMSw2ICszMjEsMjggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RQb3NpdGlvbklu
Zm9ybQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdFBvc2l0
aW9uSW5mb3JtYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7
Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzdG9wSW50ZXJhY3Rpb24oKQoreworICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcEludGVyYWN0aW9uKCksIG1fcGFnZUlE
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQoY29uc3Qg
U3RyaW5nJiBhY3Rpb24pCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpQZXJmb3JtQWN0aW9uT25FbGVtZW50KGFjdGlvbiksIG1fcGFnZUlEKTsKK30KKwordm9pZCBX
ZWJQYWdlUHJveHk6OnNhdmVJbWFnZVRvTGlicmFyeShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShpbWFnZUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgaW1hZ2VTaXplKTsKKyAgICBtX3BhZ2VDbGll
bnQuc2F2ZUltYWdlVG9MaWJyYXJ5KGJ1ZmZlcik7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpu
b3RpZnlSZXZlYWxlZFNlbGVjdGlvbigpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNlbGVjdGlvbkRp
ZENoYW5nZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI3LDYg
KzEzMjcsOCBAQAogCQlDMEUzQUE3QzEyMDlFODNDMDBBNDlEMDEgLyogTW9kdWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEUzQUE0NDEyMDlFMkJB
MDBBNDlEMDEgLyogTW9kdWxlLmggKi87IH07CiAJCUM1MTczODgxMTJERjhGNEYwMEVFM0Y0NyAv
KiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVy
QWN0aW9uLmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JD
bGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICovOyB9
OworCQlDNTM1QkQ1OTE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUzNUJENTcxODkxOUNGQzAw
OThGMUY1IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsKKwkJQzUzNUJENUExODkxOUNGQzAwOThG
MUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTM1QkQ1ODE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5t
bSAqLzsgfTsKIAkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU0RkZB
MjEyRTRFOEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLzsgfTsKIAkJQzU3NEE1
ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8q
IFBhc3RlYm9hcmRUeXBlcy5oICovOyB9OwogCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyog
UGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAq
LzsgfTsKQEAgLTMwODAsNiArMzA4Miw4IEBACiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAv
KiBNb2R1bGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBN
b2R1bGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTczODgwMTJERjhG
NEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQ29udHJvbGxlckFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTM1QkQ1NzE4OTE5Q0ZD
MDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS0FjdGlvblNoZWV0Lmg7IHBhdGggPSBpb3MvV0tBY3Rpb25TaGVldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNTM1QkQ1ODE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rp
b25TaGVldC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLQWN0
aW9uU2hlZXQubW07IHBhdGggPSBpb3MvV0tBY3Rpb25TaGVldC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzU1NEZGQTIxMkU0RThFQTAwMkYyMkMwIC8qIFdlYkRyYWdDbGllbnRN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJEcmFnQ2xp
ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0QTU3RjEyRTY2Njgx
MDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhc3RlYm9hcmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
NTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw2ICs0MTIyLDggQEAKIAkJCQkyREE5NDQ3OTE4
ODRFM0I1MDBFRDg2REIgLyogUGFnZUNsaWVudEltcGxJT1MubW0gKi8sCiAJCQkJMkRBOTQ0N0Ex
ODg0RTNCNTAwRUQ4NkRCIC8qIFVJV0tSZW1vdGVWaWV3LmggKi8sCiAJCQkJMkRBOTQ0N0IxODg0
RTNCNTAwRUQ4NkRCIC8qIFVJV0tSZW1vdGVWaWV3Lm1tICovLAorCQkJCUM1MzVCRDU3MTg5MTlD
RkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0LmggKi8sCisJCQkJQzUzNUJENTgxODkxOUNGQzAw
OThGMUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gKi8sCiAJCQkJMkRBOTQ0N0MxODg0RTNCNTAwRUQ4
NkRCIC8qIFdLQ29udGVudFZpZXcuaCAqLywKIAkJCQkyREE5NDQ3RDE4ODRFM0I1MDBFRDg2REIg
LyogV0tDb250ZW50Vmlldy5tbSAqLywKIAkJCQkyREE5NDQ3RTE4ODRFM0I1MDBFRDg2REIgLyog
V0tDb250ZW50Vmlld0ludGVybmFsLmggKi8sCkBAIC02NDQ3LDYgKzY0NTMsNyBAQAogCQkJCTFB
QjhBMUY0MTg0MDBCOEYwMEU5QUU2OSAvKiBXS1BhZ2VGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk3NUU3NDlFQTE4MERCQjk4MDAwODhCQTYgLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBOTQ0OTMxODg0RTNCNTAwRUQ4NkRCIC8q
IFdLU2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUzNUJENTkxODkxOUNGQzAwOThG
MUY1IC8qIFdLQWN0aW9uU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUNCQkEwMTI3QThG
MkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0NCNzVDNjEyMDNBMUNFMDAyMjJEMUIgLyogV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFRTdEMEUxMjg0NkY2OTAwOTgyN0RBIC8qIFdlYkNvbnRleHRN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzgwLDYgKzc3ODcsNyBAQAogCQkJCTFBRDMz
MDZFMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFDRUNEMjQxNzE2MkRCMTAwMUZDOUVGIC8qIFN0b3JhZ2VBcmVhTWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMzM0REVEMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1h
cE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTM1QkQ1QTE4OTE5Q0ZD
MDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNDRCOTVC
MTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUIzMUE5NjE2QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0NEI5NTcxNkI3MzdBQTAwQjdCQkQ4IC8qIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxNjMxNzUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MzAsNiArNDMwLDkgQEAgcHVibGljOgogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9u
KCk7CiAgICAgdm9pZCBnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKICAgICB2b2lkIHJlcXVl
c3RQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9p
ZCBzdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CisgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24oKTsKKyAgICB2b2lkIHBlcmZvcm1B
Y3Rpb25PbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24pOwogI2VuZGlmCiAKICAgICBOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIqIG5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcigpOwpAQCAtMTA0MSw2ICsxMDQ0LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fYXNzaXN0ZWROb2RlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9jdXJyZW50V29yZFJhbmdlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlPiBtX2ludGVyYWN0aW9uTm9kZTsKICAgICBib29sIG1fc2hvdWxkUmV0dXJu
V29yZEF0U2VsZWN0aW9uOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjMx
NzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdl
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBDb25maXJtQ29tcG9zaXRpb24oKQogICAgIEdldFBvc2l0
aW9uSW5mb3JtYXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpIC0+IChXZWJLaXQ6OkludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKQogICAgIFJlcXVlc3RQb3Np
dGlvbkluZm9ybWF0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQorICAgIFN0YXJ0SW50ZXJh
Y3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCisgICAg
U3RvcEludGVyYWN0aW9uKCkKKyAgICBQZXJmb3JtQWN0aW9uT25FbGVtZW50KFN0cmluZyBhY3Rp
b24pCiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZp
c2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNiBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudFR5cGVIZWxwZXJzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0hUTUxQYXJzZXJJZGlvbXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJk
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVySW1h
Z2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4KQEAgLTgwOSw2ICs4MTIsMTQgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoUwogICAgIGNvbXB1dGVBdXRvY29ycmVj
dGlvbkNvbnRleHQobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KSwgY29udGV4dEJlZm9yZSwgbWFya2VkVGV4dCwgc2VsZWN0ZWRUZXh0LCBjb250ZXh0QWZ0ZXIs
IGxvY2F0aW9uLCBsZW5ndGgpOwogfQogCitzdGF0aWMgRWxlbWVudCogY29udGFpbmluZ0xpbmtF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgZm9yIChFbGVtZW50KiBjdXJyZW50RWxl
bWVudCA9IGVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRF
bGVtZW50LT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC0+aXNM
aW5rKCkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQ7CisgICAgcmV0dXJuIDA7
Cit9CisKIHZvaWQgV2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBpbmZvKQogewogICAg
IEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludDsKQEAgLTgxOSwxNiArODMwLDIwIEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihjb24KICAgICBpZiAoaGl0Tm9kZSkgewogICAg
ICAgICBpbmZvLmNsaWNrYWJsZUVsZW1lbnROYW1lID0gaGl0Tm9kZS0+bm9kZU5hbWUoKTsKIAot
ICAgICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoaGl0Tm9k
ZSk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBoaXROb2RlLT5pc0VsZW1lbnROb2RlKCkg
PyB0b0VsZW1lbnQoaGl0Tm9kZSkgOiAwOwogICAgICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVu
dC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0g
dG9SZW5kZXJJbWFnZShlbGVtZW50LT5yZW5kZXJlcigpKS0+Y2FjaGVkSW1hZ2UoKS0+dXJsKCk7
Ci0gICAgICAgICAgICBpZiAoIXVybC5zdHJpbmcoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICBpbmZvLnVybCA9IHVybC5zdHJpbmcoKTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGxpbmtFbGVt
ZW50ID0gY29udGFpbmluZ0xpbmtFbGVtZW50KGVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAo
bGlua0VsZW1lbnQpCisgICAgICAgICAgICAgICAgaW5mby51cmwgPSBsaW5rRWxlbWVudC0+ZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlu
a0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpOzsKICAgICAgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgICAgIGluZm8udXJsID0gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpLnN0cmluZygpOworICAgICAg
ICAgICAgaW5mby51cmwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
OjpocmVmQXR0cikpKTsKKyAgICAgICAgaW5mby50aXRsZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnRpdGxlQXR0cikuc3RyaW5nKCk7CisgICAgICAgIGlmIChlbGVtZW50LT5y
ZW5kZXJlcigpKQorICAgICAgICAgICAgaW5mby5ib3VuZHMgPSBlbGVtZW50LT5yZW5kZXJlcigp
LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOwogICAgICAgICBoaXROb2RlID0gZnJh
bWUuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoKHBvaW50KSwgSGl0VGVzdFJl
cXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0
OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQpLmlubmVyTm9kZSgpOwpAQCAtODUyLDYgKzg2Nyw1NiBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihpbmZvKSk7
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBvaW50OworCisgICAgbV9pbnRlcmFjdGlvbk5vZGUgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
Lm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhwb2ludCwgYWRqdXN0ZWRQb2ludCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6c3RvcEludGVyYWN0aW9uKCkKK3sKKyAgICBtX2ludGVyYWN0aW9uTm9k
ZSA9IDA7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk9uRWxlbWVudChjb25zdCBT
dHJpbmcmIGFjdGlvbikKK3sKKyAgICBpZiAoIW1faW50ZXJhY3Rpb25Ob2RlIHx8ICFtX2ludGVy
YWN0aW9uTm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJD
b3JlOjpIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9pbnRlcmFjdGlvbk5v
ZGUuZ2V0KCkpOworICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGFjdGlvbiA9PSAiY29weSIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPnJl
bmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkgeworICAgICAgICAgICAgRWxlbWVudCogbGlua0Vs
ZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFsaW5rRWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX2ludGVyYWN0aW9uTm9k
ZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS53cml0ZUltYWdlVG9QYXN0ZWJvYXJkKCpQ
YXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgKmVsZW1lbnQsIHRvUmVuZGVySW1h
Z2UoZWxlbWVudC0+cmVuZGVyZXIoKSktPmNhY2hlZEltYWdlKCktPnVybCgpLCBTdHJpbmcoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9pbnRlcmFjdGlvbk5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkuY29weVVSTChsaW5rRWxlbWVudC0+ZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlua0VsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpLCBsaW5rRWxlbWVudC0+dGV4
dENvbnRlbnQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKKyAg
ICAgICAgICAgIG1faW50ZXJhY3Rpb25Ob2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigp
LmNvcHlVUkwoZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXMoZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0
dHIpKSksIGVsZW1lbnQtPnRleHRDb250ZW50KCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChhY3Rpb24gPT0gInNhdmUiKSB7CisgICAgICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKS0+
aXNSZW5kZXJJbWFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5jYWNo
ZWRJbWFnZSgpOworICAgICAgICBpZiAoY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IGNhY2hlZEltYWdlLT5yZXNvdXJjZUJ1ZmZlcigpLT5zaGFyZWRCdWZmZXIoKTsK
KyAgICAgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBidWZm
ZXJTaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZE1l
bW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVyU2l6
ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBi
dWZmZXItPmRhdGEoKSwgYnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgc2hhcmVkTWVtb3J5
QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKyAg
ICAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVJbWFnZVRvTGli
cmFyeShoYW5kbGUsIGJ1ZmZlclNpemUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKwogdm9pZCBXZWJQYWdlOjplbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6Tm9kZSogbm9k
ZSkKIHsKICAgICBtX2Fzc2lzdGVkTm9kZSA9IG5vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222867</attachid>
            <date>2014-01-31 17:47:53 -0800</date>
            <delta_ts>2014-01-31 18:57:48 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>actionsheets-webkit2.txt</filename>
            <type>text/plain</type>
            <size>66727</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzIwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAxLTMxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEFj
dGlvblNoZWV0cyBpbiBXSzIgZm9yIGlPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyODM2
Njc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlcyB0aGUgbG9jYWxpemFibGUgc3RyaW5ncyBmb3IgYWN0aW9uIHNoZWV0cy4KKworICAgICAg
ICAqIEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNC0wMS0yOSAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9zc2libGUg
dG8gaW1wbGVtZW50IEpTIGJ1aWx0aW5zIGluIEpTCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Fbmds
aXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lvbiAxNjMxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAKIC8qIHdpbmRvdyB0aXRsZSBmb3IgYSBzdGFuZGFs
b25lIGltYWdlICh1c2VzIG11bHRpcGxpY2F0aW9uIHN5bWJvbCwgbm90IHgpICovCiAiPGZpbGVu
YW1lPiAlZMOXJWQgcGl4ZWxzIiA9ICI8ZmlsZW5hbWU+ICVkw5clZCBwaXhlbHMiOwogCisvKiBU
aXRsZSBmb3IgQWRkIHRvIFJlYWRpbmcgTGlzdCBhY3Rpb24gYnV0dG9uICovCisiQWRkIHRvIFJl
YWRpbmcgTGlzdCIgPSAiQWRkIHRvIFJlYWRpbmcgTGlzdCI7CisKIC8qIFVuZG8gYWN0aW9uIG5h
bWUgKi8KICJBbGlnbiBMZWZ0IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiQWxpZ24gTGVmdCI7CiAK
QEAgLTg4LDYgKzkxLDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJCb2xkIChVbmRvIGFj
dGlvbiBuYW1lKSIgPSAiQm9sZCI7CiAKKy8qIFRpdGxlIGZvciBDYW5jZWwgYnV0dG9uIGxhYmVs
IGluIGJ1dHRvbiBiYXIgKi8KKyJDYW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiID0g
IkNhbmNlbCI7CisKIC8qIENhcGl0YWxpemUgY29udGV4dCBtZW51IGl0ZW0gKi8KICJDYXBpdGFs
aXplIiA9ICJDYXBpdGFsaXplIjsKIApAQCAtMTM2LDYgKzE0Miw5IEBACiAvKiBDb3B5IGNvbnRl
eHQgbWVudSBpdGVtICovCiAiQ29weSIgPSAiQ29weSI7CiAKKy8qIFRpdGxlIGZvciBDb3B5IExp
bmsgb3IgSW1hZ2UgYWN0aW9uIGJ1dHRvbiAqLworIkNvcHkgQWN0aW9uU2hlZXQgTGluayIgPSAi
Q29weSI7CisKIC8qIENvcHkgQXVkaW8gQWRkcmVzcyBMb2NhdGlvbiBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIkNvcHkgQXVkaW8gQWRkcmVzcyIgPSAiQ29weSBBdWRpbyBBZGRyZXNzIjsKIApAQCAt
MjQ3LDYgKzI1Niw5IEBACiAvKiBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSBkZXNjcmlwdGlv
biAqLwogIkphdmEgaXMgdW5hdmFpbGFibGUiID0gIkphdmEgaXMgdW5hdmFpbGFibGUiOwogCisv
KiBUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsgKi8KKyJKYXZhU2Ny
aXB0IEFjdGlvbiBTaGVldCBUaXRsZSIgPSAiSmF2YVNjcmlwdCI7CisKIC8qIFVuZG8gYWN0aW9u
IG5hbWUgKi8KICJKdXN0aWZ5IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiSnVzdGlmeSI7CiAKQEAg
LTMwNyw2ICszMTksOSBAQAogLyogTWVudSBpdGVtIGxhYmVsIGZvciB0aGUgdHJhY2sgdGhhdCBy
ZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMgKi8KICJPZmYiID0gIk9mZiI7CiAK
Ky8qIFRpdGxlIGZvciBPcGVuIExpbmsgYWN0aW9uIGJ1dHRvbiAqLworIk9wZW4gQWN0aW9uU2hl
ZXQgTGluayIgPSAiT3BlbiI7CisKIC8qIE9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyBjb250ZXh0
IG1lbnUgaXRlbSAqLwogIk9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyIgPSAiT3BlbiBBdWRpbyBp
biBOZXcgV2luZG93IjsKIApAQCAtMzkxLDYgKzQwNiw5IEBACiAvKiBSaWdodCB0byBMZWZ0IGNv
bnRleHQgbWVudSBpdGVtICovCiAiUmlnaHQgdG8gTGVmdCIgPSAiUmlnaHQgdG8gTGVmdCI7CiAK
Ky8qIFRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24gKi8KKyJTYXZlIEltYWdlIiA9
ICJTYXZlIEltYWdlIjsKKwogLyogU2VhcmNoIGluIFNwb3RsaWdodCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlNlYXJjaCBpbiBTcG90bGlnaHQiID0gIlNlYXJjaCBpbiBTcG90bGlnaHQiOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMyMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTggQEAKKzIwMTQtMDEtMzEgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQWN0
aW9uU2hlZXRzIGluIFdLMiBmb3IgaU9TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTI4MzY2
Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGRlZmF1bHQgc3VwcG9ydCBmb3IgQWN0aW9uIFNoZWV0cworICAgICAg
ICBpbiBXSzIgZm9yIGlPUy4gV0tBY3Rpb25TaGVldCBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
dGhlCisgICAgICAgIHNoZWV0IGl0c2VsZiB0aGF0IGluaGVyaXRzIGZyb20gVUlBY3Rpb25TaGVl
dCBhbmQgaGFuZGxlcworICAgICAgICB0aGUgcmVwb3NpdGlvbmluZyBvZiB0aGUgc2hlZXQgYWZ0
ZXIgcm90YXRpb24gZm9yIGlQYWQuCisgICAgICAgIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgaXMg
dGhlIGNvbnRyb2xsZXIgY2xhc3MgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgIHRoZSBkZWxlZ2F0
ZSBtZXRob2RzLCBjb250cm9scyB0aGUgbGlmZXRpbWUgb2YgdGhlIGFjdGlvbiBzaGVldAorICAg
ICAgICBvYmplY3QgYW5kIHBlcmZvcm1zIHRoZSBhY3Rpb25zLgorICAgICAgICBXZSBoYXZlIDMg
ZGlmZmVyZW50IHR5cGVzIG9mIHNoZWV0czoKKyAgICAgICAgICAgLSBsaW5rIHNoZWV0LCBkaXNw
bGF5ZWQgd2hlbiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBsaW5rCisgICAgICAgICAgIC0gaW1h
Z2Ugc2hlZXQsIHdoZW4gdGhlIHRhcmdldCBlbGVtZW50IGlzIGFuIGltYWdlCisgICAgICAgICAg
IC0gZGF0YSBkZXRlY3RvciBzaGVldCB3aGVuIHRoZSB0YXJnZXQgaXMgYW4gZWxlbWVudAorICAg
ICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGRhdGEgZGV0ZWN0b3JzIGxpYnJhcnkuCisgICAg
ICAgIEJvdGggbGluayBhbmQgaW1hZ2Ugc2hlZXQgaGF2ZSBhIHNldCBvZiBkZWZhdWx0IGJ1dHRv
bnMsIHdoZXJlYXMKKyAgICAgICAgZGF0YWRldGVjdG9yIHNoZWV0IGluIG9ubHkgcG9wdWxhdGVk
IGJ5IGN1c3RvbSBhY3Rpb25zIHByb3ZpZGVkCisgICAgICAgIGJ5IGRhdGEgZGV0ZWN0b3JzLgor
ICAgICAgICBUaGUgbGluayBzaGVldCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYWN0
aW9uczoKKyAgICAgICAgICAgIC0gb3BlbiwgbmF2aWdhdGVzIHRvIHRoZSBVUkwKKyAgICAgICAg
ICAgIC0gY29weSwgY29waWVzIHRoZSBVUkwgdG8gdGhlIHBhc3RlYm9hcmQKKyAgICAgICAgICAg
IC0gYWRkIHRvIHJlYWRpbmcgbGlzdAorICAgICAgICBUaGUgaW1hZ2Ugc2hlZXQgcHJvdmlkZXMg
dGhlIGZvbGxvd2luZyBhY3Rpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgICAgICAgIHRoZSBp
bWFnZSBpcyBjb250YWluZWQgaW5zaWRlIGFuIGFuY2hvciBlbGVtZW50IG9yIG5vdC4KKyAgICAg
ICAgSWYgdGhlIGltYWdlIGlzIE5PVCBpbnNpZGUgYSBsaW5rIHRoZSBmb2xsb3dpbmcgYWN0aW9u
cyBhcmUgcHJvdmlkZWQ6CisgICAgICAgICAgICAtIGNvcHksIGNvcGllcyB0aGUgaW1hZ2UgdG8g
dGhlIHBhc3RlYm9hcmQKKyAgICAgICAgICAgIC0gc2F2ZSBpbWFnZSwgc2F2ZXMgdGhlIGltYWdl
IGluIHRoZSBwaG90byBsaWJyYXJ5CisgICAgICAgIEluc3RlYWQsIGlmIHRoZSBpbWFnZSBpcyBp
bnNpZGUgYW4gbGluazoKKyAgICAgICAgICAgIC0gb3BlbiwgbmF2aWdhdGVzIHRvIHRoZSBVUkwg
c3BjaWZpZWQgYnkgdGhlIGxpbmsKKyAgICAgICAgICAgIC0gY29weSwgY29waWVzIHRoZSBsaW5r
IFVSTCB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICAgICAgLSBzYXZlIGltYWdlLCBzYXZlcyB0
aGUgaW1hZ2UgaW4gdGhlIHBob3RvIGxpYnJhcnkKKyAgICAgICAgICAgIC0gYWRkIHRvIHJlYWRp
bmcgbGlzdCwgYWRkcyB0aGUgbGluayBVUkwgdG8gcmVhZGluZyBsaXN0LgorCisgICAgICAgICog
U2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzYXZlSW1hZ2VUb0xpYnJhcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvaW9zL1dLQWN0aW9uU2hlZXQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tBY3Rpb25TaGVldC5tbTogQWRkZWQuCisgICAgICAgICgtW1dLQWN0aW9uU2hlZXQgaW5p
dFdpdGhWaWV3Ol0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0IGRlYWxsb2NdKToKKyAgICAg
ICAgKC1bV0tBY3Rpb25TaGVldCBwcmVzZW50U2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25T
aGVldCBwcmVzZW50U2hlZXRGcm9tUmVjdDpdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldCBk
b25lV2l0aFNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXQgd2lsbFJvdGF0ZV0pOgor
ICAgICAgICAoLVtXS0FjdGlvblNoZWV0IHVwZGF0ZVNoZWV0UG9zaXRpb25dKToKKyAgICAgICAg
KC1bV0tBY3Rpb25TaGVldCBkaWRSb3RhdGVdKToKKyAgICAgICAgKC1bV0tFbGVtZW50QWN0aW9u
SW5mbyBpbml0V2l0aEluZm86bG9jYXRpb246dGl0bGU6cmVjdDpdKToKKyAgICAgICAgKC1bV0tF
bGVtZW50QWN0aW9uIGluaXRXaXRoVGl0bGU6YWN0aW9uSGFuZGxlcjp0eXBlOl0pOgorICAgICAg
ICAoLVtXS0VsZW1lbnRBY3Rpb24gZGVhbGxvY10pOgorICAgICAgICAoK1tXS0VsZW1lbnRBY3Rp
b24gY3VzdG9tRWxlbWVudEFjdGlvbldpdGhUaXRsZTphY3Rpb25IYW5kbGVyOl0pOgorICAgICAg
ICAoY29weUVsZW1lbnQpOgorICAgICAgICAoc2F2ZUltYWdlKToKKyAgICAgICAgKGFkZFRvUmVh
ZGluZ0xpc3QpOgorICAgICAgICAoK1tXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0
aW9uV2l0aFR5cGU6Y3VzdG9tVGl0bGU6XSk6CisgICAgICAgICgrW1dLRWxlbWVudEFjdGlvbiBz
dGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpdKToKKyAgICAgICAgKC1bV0tFbGVtZW50QWN0
aW9uIHJ1bkFjdGlvbldpdGhFbGVtZW50SW5mbzp2aWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbTogQWRkZWQuCisgICAgICAg
ICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAgICAoLVtX
S0FjdGlvblNoZWV0QXNzaXN0YW50IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVl
dEFzc2lzdGFudCBzZXRQYWdlOldlYktpdDo6XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQgc3VwZXJ2aWV3Rm9yU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFz
c2lzdGFudCBfcHJlc2VudGF0aW9uUmVjdEZvclNoZWV0R2l2ZW5Qb2ludDppbkhvc3RWaWV3Ol0p
OgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IGhvc3RWaWV3Rm9yU2hlZXRdKToK
KyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBpbml0aWFsUHJlc2VudGF0aW9uUmVj
dEluSG9zdFZpZXdGb3JTaGVldF0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50
IHByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rp
b25TaGVldEFzc2lzdGFudCBwcmVzZW50U2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVl
dEFzc2lzdGFudCBhY3Rpb25TaGVldDpjbGlja2VkQnV0dG9uQXRJbmRleDpdKToKKyAgICAgICAg
KC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCB1cGRhdGVTaGVldFBvc2l0aW9uXSk6CisgICAgICAg
ICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgX2NyZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25z
OnNob3dMaW5rVGl0bGU6XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hv
d0ltYWdlU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBzaG93TGlu
a1NoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0RhdGFEZXRl
Y3RvcnNTaGVldF0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IGNsZWFudXBT
aGVldF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW06CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGluaXRXaXRoRnJhbWU6XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
c2V0UGFnZTpXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfc2hvd0lt
YWdlU2hlZXRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dMaW5rU2hlZXRd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXRd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2FjdGlvbkZvckxvbmdQcmVzc10pOgor
ICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdXBkYXRlUG9zaXRpb25JbmZvcm1hdGlvbl0p
OgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfbG9uZ1ByZXNzUmVjb2duaXplZDpdKToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFu
Z2U6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9wZXJmb3JtQWN0aW9uOl0pOgor
ICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfdXBkYXRlQWNjZXNzb3J5XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdG9wSW50ZXJhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVJbWFnZVRvTGlicmFyeSk6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpjb250YWluaW5nTGlua0VsZW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0b3BJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQpOgorCiAyMDE0LTAxLTMxICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFt3azJdIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbSBkb2Vzbid0IHdvcmsgb24gaU9TCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDkgQEAgdm9pZCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZQogICAgIGVu
Y29kZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKICAgICBlbmNvZGVyIDw8IGNs
aWNrYWJsZUVsZW1lbnROYW1lOwogICAgIGVuY29kZXIgPDwgdXJsOworICAgIGVuY29kZXIgPDwg
dGl0bGU7CiAgICAgZW5jb2RlciA8PCBzZWxlY3Rpb25SZWN0czsKKyAgICBlbmNvZGVyIDw8IGJv
dW5kczsKIH0KIAogYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbiYgcmVzdWx0KQpAQCAtNTUsOSArNTcsMTUgQEAgYm9vbCBJbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbjo6ZAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnRpdGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuc2VsZWN0aW9uUmVjdHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3VuZHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHJl
dmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9y
bWF0aW9uQXRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw5IEBAIHN0cnVj
dCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiAKICAgICBib29sIG5vZGVBdFBvc2l0
aW9uSXNBc3Npc3RlZE5vZGU7CiAgICAgU3RyaW5nIGNsaWNrYWJsZUVsZW1lbnROYW1lOwogICAg
IFN0cmluZyB1cmw7CisgICAgU3RyaW5nIHRpdGxlOwogICAgIFZlY3RvcjxXZWJDb3JlOjpTZWxl
Y3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kczsK
IAogICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDYgKzI0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnRl
cnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJF
dmVudCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdl
KGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+KSA9IDA7CiAjZW5kaWYKIAogICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2MzE3
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQ5LDYgKzQ0OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlUG9z
aXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYp
OwogICAgIHZvaWQgZ2V0UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJik7CiAgICAgdm9pZCByZXF1ZXN0
UG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIHZvaWQg
c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOworICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CisgICAgdm9pZCBwZXJmb3JtQWN0
aW9uT25FbGVtZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5
KGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VT
aXplKTsKICNlbmRpZgogCiAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjMxNzUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayhTdHJpbmcgYmVmb3JlVGV4dCwgU3Ry
aW5nIG1hcmtlZFRleHQsIFN0cmluZyBzZWxlY3RlZFRleHQsIFN0cmluZyBhZnRlclRleHQsIHVp
bnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAg
ICAgSW50ZXJwcmV0S2V5RXZlbnQoV2ViS2l0OjpFZGl0b3JTdGF0ZSBzdGF0ZSwgYm9vbCBpc0No
YXJFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1h
dGlvbihXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9u
KQorICAgIFNhdmVJbWFnZVRvTGlicmFyeShXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhh
bmRsZSwgdWludDY0X3Qgc2l6ZSkKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICBQcmlu
dEZpbmlzaGVkQ2FsbGJhY2soV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDYgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlv
bkRpZENoYW5nZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVu
dChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJFdmVudCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3Qg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2
ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPik7CiAKICAg
ICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw5ICszMSwxMSBAQAogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVybmFsLmgiCiAjaW1wb3J0
ICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5Lmgi
CisjaW1wb3J0IDxVSUtpdC9VSUltYWdlUGlja2VyQ29udHJvbGxlcl9Qcml2YXRlLmg+CiAjaW1w
b3J0IDxVSUtpdC9VSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3Jl
ZW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAKIEBpbnRlcmZhY2UgVUlW
aWV3IChJUEkpCiAtIChVSVNjcm9sbFZpZXcgKilfc2Nyb2xsZXI7CkBAIC0yMDcsNiArMjA5LDEy
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnBvc2l0aW9uSW5mb3JtYXRpb24KICAgICBbbV92aWV3
IF9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOmluZm9dOwogfQogCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdl
QnVmZmVyKQoreworICAgIFJldGFpblB0cjxOU0RhdGE+IGltYWdlRGF0YSA9IGltYWdlQnVmZmVy
LT5jcmVhdGVOU0RhdGEoKTsKKyAgICBVSUltYWdlRGF0YVdyaXRlVG9TYXZlZFBob3Rvc0FsYnVt
KGltYWdlRGF0YS5nZXQoKSwgbmlsLCBOVUxMLCBOVUxMKTsKK30KKwogYm9vbCBQYWdlQ2xpZW50
SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9p
b3MvV0tBY3Rpb25TaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8VUlLaXQvVUlBY3Rpb25TaGVldC5oPgor
I2ltcG9ydCA8VUlLaXQvVUlQb3BvdmVyQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViS2l0Mi9X
S0RlY2xhcmF0aW9uU3BlY2lmaWVycy5oPgorCitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVn
YXRlOworQGNsYXNzIFdLSW50ZXJhY3Rpb25WaWV3OworCitAaW50ZXJmYWNlIFdLQWN0aW9uU2hl
ZXQgOiBVSUFjdGlvblNoZWV0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlkIDxX
S0FjdGlvblNoZWV0RGVsZWdhdGU+IHNoZWV0RGVsZWdhdGU7CitAcHJvcGVydHkgKG5vbmF0b21p
YykgVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb24gYXJyb3dEaXJlY3Rpb25zOworLSAoaWQpaW5pdFdp
dGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7CistICh2b2lkKWRvbmVXaXRoU2hlZXQ7
CistIChCT09MKXByZXNlbnRTaGVldDsKKy0gKEJPT0wpcHJlc2VudFNoZWV0RnJvbVJlY3Q6KENH
UmVjdClwcmVzZW50YXRpb25SZWN0OworLSAodm9pZCl1cGRhdGVTaGVldFBvc2l0aW9uOworQGVu
ZAorCisKK0Bwcm90b2NvbCBXS0FjdGlvblNoZWV0RGVsZWdhdGU8VUlBY3Rpb25TaGVldERlbGVn
YXRlPgorQHJlcXVpcmVkCistIChVSVZpZXcgKilob3N0Vmlld0ZvclNoZWV0OworLSAoQ0dSZWN0
KWluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0OworLSAoQ0dSZWN0KXBy
ZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQ7CitAZW5kCisKKy8vIEVsZW1lbnRzIHRv
IGRlc2NyaWJlIGFjdGlvbiBzaGVldCBjb250ZW50LgorCitXS19FWFBPUlQgQGludGVyZmFjZSBX
S0VsZW1lbnRBY3Rpb25JbmZvIDogTlNPYmplY3QKKworLSAoV0tFbGVtZW50QWN0aW9uSW5mbyAq
KSBpbml0V2l0aEluZm86KE5TVVJMICopdXJsIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIHRp
dGxlOihOU1N0cmluZyAqKXRpdGxlIHJlY3Q6KENHUmVjdClyZWN0OworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBDR1BvaW50IGludGVyYWN0aW9uTG9jYXRpb247CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVVJMICp1cmw7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgQ0dSZWN0IGJvdW5kaW5nUmVjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Q0dJbWFnZVJlZiBzbmFwc2hvdDsKK0BlbmQKKwordHlwZWRlZiB2b2lkICheV0tFbGVtZW50QWN0
aW9uSGFuZGxlcikoV0tFbGVtZW50QWN0aW9uSW5mbyAqKTsKK3R5cGVkZWYgdm9pZCAoXldLRWxl
bWVudEFjdGlvbkhhbmRsZXJJbnRlcm5hbCkoV0tJbnRlcmFjdGlvblZpZXcgKiwgV0tFbGVtZW50
QWN0aW9uSW5mbyAqKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBl
Q3VzdG9tID0gMCwKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlT3BlbiwKKyAgICBXS0VsZW1lbnRB
Y3Rpb25UeXBlQ29weSwKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlU2F2ZUltYWdlLAorICAgIFdL
RWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0LAorfSBXS0VsZW1lbnRBY3Rpb25UeXBl
OworCitXS19FWFBPUlQgQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb24gOiBOU09iamVjdCB7Cisg
ICAgTlNTdHJpbmcgKl90aXRsZTsKKyAgICBXS0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwg
X2FjdGlvbkhhbmRsZXI7CisgICAgV0tFbGVtZW50QWN0aW9uVHlwZSBfdHlwZTsKK30KKworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0VsZW1lbnRBY3Rpb25UeXBlIHR5cGU7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nKiB0aXRsZTsKKworKyAoV0tF
bGVtZW50QWN0aW9uICopY3VzdG9tRWxlbWVudEFjdGlvbldpdGhUaXRsZTooTlNTdHJpbmcgKil0
aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rpb25IYW5kbGVyKWhhbmRsZXI7CisrIChX
S0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTooV0tFbGVtZW50
QWN0aW9uVHlwZSl0eXBlOworKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRhcmRFbGVtZW50QWN0
aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZSBjdXN0b21UaXRsZTooTlNTdHJp
bmcgKil0aXRsZTsKKy0gKHZvaWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihXS0VsZW1lbnRB
Y3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7CisKK0BlbmQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25T
aGVldC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1dLQWN0aW9uU2hlZXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLQWN0aW9uU2hlZXQuaCIKKyNp
bXBvcnQgIldLSW50ZXJhY3Rpb25WaWV3LmgiCisKKyNpbXBvcnQgPFNhZmFyaVNlcnZpY2VzL1NT
UmVhZGluZ0xpc3QuaD4KKworI2ltcG9ydCA8VUlLaXQvVUlBY3Rpb25TaGVldF9Qcml2YXRlLmg+
CisjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2luZG93X1ByaXZh
dGUuaD4KKworI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
U09GVF9MSU5LX0ZSQU1FV09SSyhTYWZhcmlTZXJ2aWNlcyk7CitTT0ZUX0xJTktfQ0xBU1MoU2Fm
YXJpU2VydmljZXMsIFNTUmVhZGluZ0xpc3QpOworCitAaW50ZXJmYWNlIFdLRWxlbWVudEFjdGlv
bihQcml2YXRlKQorLSAodm9pZClfcnVuQWN0aW9uV2l0aEVsZW1lbnQ6KE5TVVJMICopdGFyZ2V0
VVJMIGRvY3VtZW50VmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3IGludGVyYWN0aW9uTG9j
YXRpb246KENHUG9pbnQpaW50ZXJhY3Rpb25Mb2NhdGlvbjsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdLQWN0aW9uU2hlZXQgeworICAgIGlkIDxXS0FjdGlvblNoZWV0RGVsZWdhdGU+IF9zaGVl
dERlbGVnYXRlOworICAgIGlkIDxVSUFjdGlvblNoZWV0RGVsZWdhdGU+IF9kZWxlZ2F0ZVdoaWxl
Um90YXRpbmc7CisgICAgVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb24gX2Fycm93RGlyZWN0aW9uczsK
KyAgICBCT09MIF9pc1JvdGF0aW5nOworICAgIFdLSW50ZXJhY3Rpb25WaWV3ICpfdmlldzsKK30K
KworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF9hcnJvd0RpcmVjdGlvbnMgPSBVSVBvcG92ZXJBcnJvd0RpcmVjdGlvbkFueTsKKyAg
ICBfdmlldyA9IHZpZXc7CisKKyAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAhPSBV
SVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKSB7CisgICAgICAgIC8vIE9ubHkgaVBhZHMgc3VwcG9y
dCBwb3BvdmVycyB0aGF0IHJvdGF0ZS4gVUlBY3Rpb25TaGVldHMgYWN0dWFsbHkgYmxvY2sgcm90
YXRpb24gb24gaVBob25lL2lQb2QgVG91Y2gKKyAgICAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIg
KmNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICAgICAg
W2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aWxsUm90YXRlKSBu
YW1lOlVJV2luZG93V2lsbFJvdGF0ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAg
W2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRSb3RhdGUpIG5h
bWU6VUlXaW5kb3dEaWRSb3RhdGVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgfQorCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisgICAgW05T
T2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKKwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIHNoZWV0IHByZXNlbnRhdGlv
biBjb2RlCisKKy0gKEJPT0wpcHJlc2VudFNoZWV0Cit7CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBw
cmVzZW50YXRpb24gcmVjdCBqdXN0IGJlZm9yZSBzaG93aW5nLgorICAgIENHUmVjdCBwcmVzZW50
YXRpb25SZWN0ID0gQ0dSZWN0WmVybzsKKyAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00o
KSAhPSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKSB7CisgICAgICAgIHByZXNlbnRhdGlvblJl
Y3QgPSBbX3NoZWV0RGVsZWdhdGUgaW5pdGlhbFByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9y
U2hlZXRdOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShwcmVzZW50YXRpb25SZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gW3NlbGYgcHJlc2VudFNo
ZWV0RnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdF07Cit9CisKKy0gKEJPT0wpcHJlc2VudFNoZWV0
RnJvbVJlY3Q6KENHUmVjdClwcmVzZW50YXRpb25SZWN0Cit7CisgICAgVUlWaWV3ICp2aWV3ID0g
W19zaGVldERlbGVnYXRlIGhvc3RWaWV3Rm9yU2hlZXRdOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuIE5POworCisgICAgaWYgKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlV
c2VySW50ZXJmYWNlSWRpb21QaG9uZSkgeworICAgICAgICBbc2VsZiBwcmVzZW50RnJvbVJlY3Q6
cHJlc2VudGF0aW9uUmVjdAorICAgICAgICAgICAgICAgICAgICAgICBpblZpZXc6dmlldworICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rpb246X2Fycm93RGlyZWN0aW9ucworICAgIGFsbG93SW50
ZXJhY3Rpb25XaXRoVmlld3M6bmlsCisgICAgICAgICAgICAgIGJhY2tncm91bmRTdHlsZTpVSVBv
cG92ZXJCYWNrZ3JvdW5kU3R5bGVEZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICBhbmltYXRl
ZDpZRVNdOworICAgIH0gZWxzZQorICAgICAgICBbc2VsZiBzaG93SW5WaWV3OnZpZXddOyAKKwor
ICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpZG9uZVdpdGhTaGVldAoreworICAgIF9kZWxl
Z2F0ZVdoaWxlUm90YXRpbmcgPSBuaWw7CisKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQ
ZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZFJvdGF0
ZSkgb2JqZWN0Om5pbF07Cit9CisKKyNwcmFnbWEgbWFyayByb3RhdGlvbiBoYW5kbGluZyBjb2Rl
CisKKy0gKHZvaWQpd2lsbFJvdGF0ZQoreworICAgIEFTU0VSVChVSV9VU0VSX0lOVEVSRkFDRV9J
RElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpOworCisgICAgaWYgKF9pc1JvdGF0
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbGVhciB0aGUgZGVsZWdhdGUgc28gdGhh
dCB0aGUgbWV0aG9kOgorICAgIC8vIC0gKHZvaWQpYWN0aW9uU2hlZXQ6KFVJQWN0aW9uU2hlZXQg
KilhY3Rpb25TaGVldCBkaWREaXNtaXNzV2l0aEJ1dHRvbkluZGV4OihOU0ludGVnZXIpYnV0dG9u
SW5kZXgKKyAgICAvLyBpcyBub3QgY2FsbGVkIHdoZW4gdGhlIEFjdGlvblNoZWV0IGlzIGRpc21p
c3NlZCBiZWxvdy4gRGVsZWdhdGUgaXMgcmUtaW5zdGF0ZWQgYWZ0ZXIgcm90YXRpb24uCisgICAg
X2RlbGVnYXRlV2hpbGVSb3RhdGluZyA9IFtzZWxmIGRlbGVnYXRlXTsKKyAgICBzZWxmLmRlbGVn
YXRlID0gbmlsOworICAgIF9pc1JvdGF0aW5nID0gWUVTOworCisgICAgW3NlbGYgZGlzbWlzc1dp
dGhDbGlja2VkQnV0dG9uSW5kZXg6W3NlbGYgY2FuY2VsQnV0dG9uSW5kZXhdIGFuaW1hdGVkOk5P
XTsKK30KKworLSAodm9pZCl1cGRhdGVTaGVldFBvc2l0aW9uCit7CisgICAgQVNTRVJUKFVJX1VT
RVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRpb21QaG9uZSk7CisKKyAg
ICBpZiAoIV9pc1JvdGF0aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBfaXNSb3RhdGluZyA9
IE5POworICAgIAorICAgIENHUmVjdCBwcmVzZW50YXRpb25SZWN0ID0gW19zaGVldERlbGVnYXRl
IHByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXRdOworICAgIGlmICghQ0dSZWN0SXNF
bXB0eShwcmVzZW50YXRpb25SZWN0KSkgeworICAgICAgICAvLyBSZS1wcmVzZW50IHRoZSBwb3Bv
dmVyIG9ubHkgaWYgd2UgYXJlIHN0aWxsIHBvaW50aW5nIHRvIGNvbnRlbnQgb25zY3JlZW4uCisg
ICAgICAgIENHUmVjdCBpbnRlcnNlY3Rpb24gPSBDR1JlY3RJbnRlcnNlY3Rpb24oW1tfc2hlZXRE
ZWxlZ2F0ZSBob3N0Vmlld0ZvclNoZWV0XSBib3VuZHNdLCBwcmVzZW50YXRpb25SZWN0KTsKKyAg
ICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KGludGVyc2VjdGlvbikpIHsKKyAgICAgICAgICAgIHNl
bGYuZGVsZWdhdGUgPSBfZGVsZWdhdGVXaGlsZVJvdGF0aW5nOworICAgICAgICAgICAgW3NlbGYg
cHJlc2VudFNoZWV0RnJvbVJlY3Q6aW50ZXJzZWN0aW9uXTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDYW5jZWwgdGhlIHNoZWV0IGFzIHRoZXJl
IGlzIGVpdGhlciBubyB2aWV3IG9yIHRoZSBjb250ZW50IGhhcyBub3cgbW92ZWQgb2ZmIHNjcmVl
bi4KKyAgICBbX2RlbGVnYXRlV2hpbGVSb3RhdGluZyBhY3Rpb25TaGVldDpzZWxmIGNsaWNrZWRC
dXR0b25BdEluZGV4OltzZWxmIGNhbmNlbEJ1dHRvbkluZGV4XV07Cit9CisKKy0gKHZvaWQpZGlk
Um90YXRlCit7CisgICAgQVNTRVJUKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2Vy
SW50ZXJmYWNlSWRpb21QaG9uZSk7CisKKyAgICBbX3ZpZXcgX3VwZGF0ZVBvc2l0aW9uSW5mb3Jt
YXRpb25dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0VsZW1lbnRBY3Rpb25JbmZv
ICB7CisgICAgQ0dQb2ludCBfaW50ZXJhY3Rpb25Mb2NhdGlvbjsKKyAgICBOU1VSTCAqX3VybDsK
KyAgICBOU1N0cmluZyAqX3RpdGxlOworICAgIENHUmVjdCBfYm91bmRpbmdSZWN0OworICAgIENH
SW1hZ2VSZWYgX3NuYXBzaG90OworfQorCistIChXS0VsZW1lbnRBY3Rpb25JbmZvICopIGluaXRX
aXRoSW5mbzooTlNVUkwgKil1cmwgbG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gdGl0bGU6KE5T
U3RyaW5nICopdGl0bGUgcmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBfdXJsID0gdXJsOworICAg
IF9pbnRlcmFjdGlvbkxvY2F0aW9uID0gbG9jYXRpb247CisgICAgX3RpdGxlID0gdGl0bGU7Cisg
ICAgX2JvdW5kaW5nUmVjdCA9IHJlY3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV0tFbGVtZW50QWN0aW9uIAorCistIChpZClpbml0V2l0aFRpdGxl
OihOU1N0cmluZyAqKXRpdGxlIGFjdGlvbkhhbmRsZXI6KFdLRWxlbWVudEFjdGlvbkhhbmRsZXJJ
bnRlcm5hbCloYW5kbGVyIHR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZQoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF90aXRs
ZSA9IFt0aXRsZSByZXRhaW5dOworICAgIF90eXBlID0gdHlwZTsKKyAgICBfYWN0aW9uSGFuZGxl
ciA9IEJsb2NrX2NvcHkoaGFuZGxlcik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfdGl0bGUgcmVsZWFzZV07CisgICAgW19hY3Rpb25IYW5kbGVyIHJl
bGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworKyAoV0tFbGVtZW50QWN0aW9uICop
Y3VzdG9tRWxlbWVudEFjdGlvbldpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBhY3Rpb25IYW5k
bGVyOihXS0VsZW1lbnRBY3Rpb25IYW5kbGVyKWhhbmRsZXIKK3sKKyAgICByZXR1cm4gW1tbc2Vs
ZiBhbGxvY10gaW5pdFdpdGhUaXRsZTp0aXRsZQorICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25IYW5kbGVyOl4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbklu
Zm8gKmFjdGlvbkluZm8pIHsgaGFuZGxlcihhY3Rpb25JbmZvKTsgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOldLRWxlbWVudEFjdGlvblR5cGVDdXN0b21dIGF1dG9y
ZWxlYXNlXTsKK30KKworc3RhdGljIHZvaWQgY29weUVsZW1lbnQoV0tJbnRlcmFjdGlvblZpZXcg
KnZpZXcpCit7CisgICAgW3ZpZXcgX3BlcmZvcm1BY3Rpb246QCJjb3B5Il07Cit9CisKK3N0YXRp
YyB2b2lkIHNhdmVJbWFnZShXS0ludGVyYWN0aW9uVmlldyAqdmlldykKK3sKKyAgICBbdmlldyBf
cGVyZm9ybUFjdGlvbjpAInNhdmUiXTsKK30KKworc3RhdGljIHZvaWQgYWRkVG9SZWFkaW5nTGlz
dChOU1VSTCAqdGFyZ2V0VVJMLCBOU1N0cmluZyAqdGl0bGUpCit7CisgICAgTlNTdHJpbmcgKnVy
bFN0cmluZyA9IFt0YXJnZXRVUkwgYWJzb2x1dGVTdHJpbmddOworICAgIGlmICghdGl0bGUgfHwg
W3RpdGxlIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgdGl0bGUgPSB1cmxTdHJpbmc7CisKKyAgICBb
W2dldFNTUmVhZGluZ0xpc3RDbGFzcygpIGRlZmF1bHRSZWFkaW5nTGlzdF0gYWRkUmVhZGluZ0xp
c3RJdGVtV2l0aFVSTDp0YXJnZXRVUkwgdGl0bGU6dGl0bGUgcHJldmlld1RleHQ6bmlsIGVycm9y
Om5pbF07Cit9CisKKysgKFdLRWxlbWVudEFjdGlvbiAqKXN0YW5kYXJkRWxlbWVudEFjdGlvbldp
dGhUeXBlOihXS0VsZW1lbnRBY3Rpb25UeXBlKXR5cGUgY3VzdG9tVGl0bGU6KE5TU3RyaW5nICop
Y3VzdG9tVGl0bGUKK3sKKyAgICBOU1N0cmluZyAqdGl0bGU7CisgICAgV0tFbGVtZW50QWN0aW9u
SGFuZGxlckludGVybmFsIGhhbmRsZXI7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgV0tFbGVtZW50QWN0aW9uVHlwZUNvcHk6CisgICAgICAgICAgICB0aXRsZSA9IFdFQl9VSV9T
VFJJTkdfS0VZKCJDb3B5IiwgIkNvcHkgQWN0aW9uU2hlZXQgTGluayIsICJUaXRsZSBmb3IgQ29w
eSBMaW5rIG9yIEltYWdlIGFjdGlvbiBidXR0b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBe
KFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZv
KSB7CisgICAgICAgICAgICAgICAgY29weUVsZW1lbnQodmlldyk7CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZU9wZW46
CisgICAgICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkdfS0VZKCJPcGVuIiwgIk9wZW4gQWN0
aW9uU2hlZXQgTGluayIsICJUaXRsZSBmb3IgT3BlbiBMaW5rIGFjdGlvbiBidXR0b24iKTsKKyAg
ICAgICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRB
Y3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CisgICAgICAgICAgICAgICAgW3ZpZXcgX2F0dGVtcHRD
bGlja0F0TG9jYXRpb246YWN0aW9uSW5mby5pbnRlcmFjdGlvbkxvY2F0aW9uXTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0VsZW1lbnRBY3Rpb25U
eXBlU2F2ZUltYWdlOgorICAgICAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiU2F2
ZSBJbWFnZSIsICJTYXZlIEltYWdlIiwgIlRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0
b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBX
S0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CisgICAgICAgICAgICAgICAgc2F2ZUlt
YWdlKHZpZXcpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0OgorICAgICAgICAgICAgdGl0
bGUgPSBXRUJfVUlfU1RSSU5HKCJBZGQgdG8gUmVhZGluZyBMaXN0IiwgIlRpdGxlIGZvciBBZGQg
dG8gUmVhZGluZyBMaXN0IGFjdGlvbiBidXR0b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBe
KFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZv
KSB7CisgICAgICAgICAgICAgICAgYWRkVG9SZWFkaW5nTGlzdChhY3Rpb25JbmZvLnVybCwgYWN0
aW9uSW5mby50aXRsZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJn
dW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVGhlcmUgaXMgbm8gc3RhbmRhcmQgd2ViIGVsZW1lbnQg
YWN0aW9uIG9mIHR5cGUgJWQuIiwgdHlwZV07CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAg
IH0KKyAgICByZXR1cm4gW1tbV0tFbGVtZW50QWN0aW9uIGFsbG9jXSBpbml0V2l0aFRpdGxlOihj
dXN0b21UaXRsZSA/IGN1c3RvbVRpdGxlIDogdGl0bGUpIGFjdGlvbkhhbmRsZXI6aGFuZGxlciB0
eXBlOnR5cGVdIGF1dG9yZWxlYXNlXTsKK30KKworKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRh
cmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZQoreworICAg
IHJldHVybiBbc2VsZiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTp0eXBlIGN1c3RvbVRp
dGxlOm5pbF07Cit9CisKKy0gKHZvaWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihXS0VsZW1l
bnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKK3sKKyAg
ICBfYWN0aW9uSGFuZGxlcih2aWV3LCBpbmZvKTsKK30KKworQGVuZAorCisKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0
QXNzaXN0YW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLQWN0aW9uU2hlZXQuaCIKKworI2ltcG9ydCA8
VUlLaXQvVUlBY3Rpb25TaGVldC5oPgorI2ltcG9ydCA8VUlLaXQvVUlQb3BvdmVyQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0RlY2xhcmF0aW9uU3BlY2lmaWVycy5oPgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOwor
QGNsYXNzIFdLSW50ZXJhY3Rpb25WaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS0FjdGlvblNoZWV0QXNzaXN0YW50IDogTlNP
YmplY3QgPFdLQWN0aW9uU2hlZXREZWxlZ2F0ZT4KKworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0lu
dGVyYWN0aW9uVmlldyAqKXZpZXc7CistICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0
OjpXZWJQYWdlUHJveHk+KXBhZ2U7CistICh2b2lkKXNob3dMaW5rU2hlZXQ7CistICh2b2lkKXNo
b3dJbWFnZVNoZWV0OworLSAodm9pZClzaG93RGF0YURldGVjdG9yc1NoZWV0OworLSAodm9pZClj
bGVhbnVwU2hlZXQ7CistICh2b2lkKXVwZGF0ZVNoZWV0UG9zaXRpb247CitAZW5kCisKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV0tBY3Rpb25TaGVldC5oIgorI2ltcG9ydCAiV0tB
Y3Rpb25TaGVldEFzc2lzdGFudC5oIgorI2ltcG9ydCAiV0tJbnRlcmFjdGlvblZpZXcuaCIKKwor
I2ltcG9ydCA8VENDL1RDQy5oPgorI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9u
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8U2FmYXJpU2VydmljZXMvU1NSZWFkaW5nTGlzdC5oPgor
CisjaW1wb3J0IDxVSUtpdC9VSUFjdGlvblNoZWV0X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0
L1VJVmlldy5oPgorI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlcl9Qcml2YXRlLmg+Cisj
aW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2YXRlLmg+CisKKyNpbXBvcnQgPFdlYkNvcmUvTG9j
YWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlTlNVUkxFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKFNhZmFyaVNlcnZpY2VzKQorU09GVF9MSU5L
X0NMQVNTKFNhZmFyaVNlcnZpY2VzLCBTU1JlYWRpbmdMaXN0KQorCitTT0ZUX0xJTktfUFJJVkFU
RV9GUkFNRVdPUksoVENDKQorU09GVF9MSU5LKFRDQywgVENDQWNjZXNzUHJlZmxpZ2h0LCBUQ0NB
Y2Nlc3NQcmVmbGlnaHRSZXN1bHQsIChDRlN0cmluZ1JlZiBzZXJ2aWNlLCBDRkRpY3Rpb25hcnlS
ZWYgb3B0aW9ucyksIChzZXJ2aWNlLCBvcHRpb25zKSkKK1NPRlRfTElOS19DT05TVEFOVChUQ0Ms
IGtUQ0NTZXJ2aWNlUGhvdG9zLCBDRlN0cmluZ1JlZikKKworU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLKERhdGFEZXRlY3RvcnNVSSkKK1NPRlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUks
IERERGV0ZWN0aW9uQ29udHJvbGxlcikKKworQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb24oUHJp
dmF0ZSkKKy0gKHZvaWQpX3J1bkFjdGlvbldpdGhFbGVtZW50OihOU1VSTCAqKXRhcmdldFVSTCBk
b2N1bWVudFZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldyBpbnRlcmFjdGlvbkxvY2F0aW9u
OihDR1BvaW50KWludGVyYWN0aW9uTG9jYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S0FjdGlvblNoZWV0QXNzaXN0YW50IHsKKyAgICBSZXRhaW5QdHI8V0tBY3Rpb25TaGVldD4gX2lu
dGVyYWN0aW9uU2hlZXQ7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsK
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2VsZW1lbnRBY3Rpb25zOworICAgIFdLSW50ZXJhY3Rp
b25WaWV3ICpfdmlldzsKK30KKworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmll
dyAqKXZpZXcKK3sKKyAgICBfdmlldyA9IHZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIFtzZWxmIGNsZWFudXBTaGVldF07CisgICAgX3BhZ2UgPSBu
dWxscHRyOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQYWdlOihQYXNz
UmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilwYWdlCit7CisgICAgX3BhZ2UgPSBwYWdlOwor
fQorCistIChVSVZpZXcgKilzdXBlcnZpZXdGb3JTaGVldAoreworICAgIFVJVmlldyAqdmlldyA9
IFtfdmlldyB3aW5kb3ddOworCisgICAgLy8gRklYTUU6IFdlYktpdCBoYXMgYSBkZWxlZ2F0ZSB0
byByZXRyaWV2ZSB0aGUgc3VwZXJ2aWV3IGZvciB0aGUgaW1hZ2Ugc2hlZXQgKHN1cGVydmlld0Zv
ckltYWdlU2hlZXRGb3JXZWJWaWV3KQorICAgIC8vIERvIHdlIG5lZWQgaXQgaW4gV0syPworCisg
ICAgLy8gRmluZCB0aGUgdG9wIG1vc3QgdmlldyB3aXRoIGEgdmlldyBjb250cm9sbGVyCisgICAg
VUlWaWV3Q29udHJvbGxlciAqY29udHJvbGxlciA9IG5pbDsKKyAgICBVSVZpZXcgKmN1cnJlbnRW
aWV3ID0gX3ZpZXc7CisgICAgd2hpbGUgKGN1cnJlbnRWaWV3KSB7CisgICAgICAgIFVJVmlld0Nv
bnRyb2xsZXIgKmFDb250cm9sbGVyID0gW1VJVmlld0NvbnRyb2xsZXIgdmlld0NvbnRyb2xsZXJG
b3JWaWV3OmN1cnJlbnRWaWV3XTsKKyAgICAgICAgaWYgKGFDb250cm9sbGVyKQorICAgICAgICAg
ICAgY29udHJvbGxlciA9IGFDb250cm9sbGVyOworCisgICAgICAgIGN1cnJlbnRWaWV3ID0gW2N1
cnJlbnRWaWV3IHN1cGVydmlld107CisgICAgfQorICAgIGlmIChjb250cm9sbGVyKQorICAgICAg
ICB2aWV3ID0gY29udHJvbGxlci52aWV3OworCisgICAgcmV0dXJuIHZpZXc7Cit9CisKKy0gKENH
UmVjdClfcHJlc2VudGF0aW9uUmVjdEZvclNoZWV0R2l2ZW5Qb2ludDooQ0dQb2ludClwb2ludCBp
bkhvc3RWaWV3OihVSVZpZXcgKilob3N0VmlldworeworICAgIENHUG9pbnQgcHJlc2VudGF0aW9u
UG9pbnQgPSBbaG9zdFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Ol92aWV3XTsKKyAg
ICBDR1JlY3QgcHJlc2VudGF0aW9uUmVjdCA9IENHUmVjdE1ha2UocHJlc2VudGF0aW9uUG9pbnQu
eCwgcHJlc2VudGF0aW9uUG9pbnQueSwgMS4wLCAxLjApOworCisgICAgcmV0dXJuIENHUmVjdElu
c2V0KHByZXNlbnRhdGlvblJlY3QsIC0yMi4wLCAtMjIuMCk7Cit9CisKKy0gKFVJVmlldyAqKWhv
c3RWaWV3Rm9yU2hlZXQKK3sKKyAgICByZXR1cm4gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdOwor
fQorCistIChDR1JlY3QpaW5pdGlhbFByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQK
K3sKKyAgICBVSVZpZXcgKnZpZXcgPSBbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF07CisgICAgaWYg
KCF2aWV3KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKworICAgIHJldHVybiBbc2VsZiBf
cHJlc2VudGF0aW9uUmVjdEZvclNoZWV0R2l2ZW5Qb2ludDpfdmlldy5wb3NpdGlvbkluZm9ybWF0
aW9uLnBvaW50IGluSG9zdFZpZXc6dmlld107CisKK30KKworLSAoQ0dSZWN0KXByZXNlbnRhdGlv
blJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQKK3sKKyAgICBVSVZpZXcgKnZpZXcgPSBbc2VsZiBzdXBl
cnZpZXdGb3JTaGVldF07CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVy
bzsKKworICAgIENHUmVjdCBib3VuZGluZ1JlY3QgPSBfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9u
LmJvdW5kczsKKyAgICBDR1BvaW50IGZyb21Qb2ludCA9IF92aWV3LnBvc2l0aW9uSW5mb3JtYXRp
b24ucG9pbnQ7CisKKyAgICAvLyBGSVhNRTogV2UgbXVzdCBhZGp1c3Qgb3VyIHByZXNlbnRhdGlv
biBwb2ludCB0byB0YWtlIGludG8gYWNjb3VudCBhIGNoYW5nZSBpbiBkb2N1bWVudCBzY2FsZS4K
KworICAgIC8vIFRlc3QgdG8gc2VlIGlmIHdlIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHRhcmdldCBu
b2RlIGFzIGl0IG1heSBoYXZlIG1vdmVkIGFmdGVyIHJvdGF0aW9uLgorICAgIGlmICghQ0dSZWN0
Q29udGFpbnNQb2ludChib3VuZGluZ1JlY3QsIGZyb21Qb2ludCkpCisgICAgICAgIGZyb21Qb2lu
dCA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoYm91bmRpbmdSZWN0KSwgQ0dSZWN0R2V0TWlk
WShib3VuZGluZ1JlY3QpKTsKKworICAgIHJldHVybiBbc2VsZiBfcHJlc2VudGF0aW9uUmVjdEZv
clNoZWV0R2l2ZW5Qb2ludDpmcm9tUG9pbnQgaW5Ib3N0Vmlldzp2aWV3XTsKK30KKworLSAoQk9P
TClwcmVzZW50U2hlZXQKK3sKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHByZXNlbnRhdGlvbiByZWN0
IGp1c3QgYmVmb3JlIHNob3dpbmcuCisgICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBDR1Jl
Y3RaZXJvOworICAgIGlmIChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVy
ZmFjZUlkaW9tUGhvbmUpIHsKKyAgICAgICAgcHJlc2VudGF0aW9uUmVjdCA9IFtzZWxmIGluaXRp
YWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0XTsKKyAgICAgICAgaWYgKENHUmVj
dElzRW1wdHkocHJlc2VudGF0aW9uUmVjdCkpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAg
fQorCisgICAgcmV0dXJuIFtfaW50ZXJhY3Rpb25TaGVldCBwcmVzZW50U2hlZXRGcm9tUmVjdDpw
cmVzZW50YXRpb25SZWN0XTsKK30KKworLSAodm9pZClhY3Rpb25TaGVldDooVUlBY3Rpb25TaGVl
dCAqKWFjdGlvblNoZWV0IGNsaWNrZWRCdXR0b25BdEluZGV4OihOU0ludGVnZXIpYnV0dG9uSW5k
ZXgKK3sKKyAgICBBU1NFUlQoYWN0aW9uU2hlZXQgPT0gX2ludGVyYWN0aW9uU2hlZXQpOworICAg
IGlmIChhY3Rpb25TaGVldCAhPSBfaW50ZXJhY3Rpb25TaGVldCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKF9lbGVtZW50QWN0aW9ucyAmJiBidXR0b25JbmRleCA8IChOU0ludGVnZXIpW19l
bGVtZW50QWN0aW9ucyBjb3VudF0pIHsKKyAgICAgICAgV0tFbGVtZW50QWN0aW9uSW5mbyogYWN0
aW9uSW5mbyA9IFtbV0tFbGVtZW50QWN0aW9uSW5mbyBhbGxvY10gaW5pdFdpdGhJbmZvOltOU1VS
TCBVUkxXaXRoU3RyaW5nOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24udXJsXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb246X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGl0bGU6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3Q6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHNd
OworICAgICAgICBbW19lbGVtZW50QWN0aW9ucyBvYmplY3RBdEluZGV4OmJ1dHRvbkluZGV4XSBy
dW5BY3Rpb25XaXRoRWxlbWVudEluZm86YWN0aW9uSW5mbyB2aWV3Ol92aWV3XTsKKyAgICAgICAg
W2FjdGlvbkluZm8gcmVsZWFzZV07CisgICAgfQorCisgICAgW3NlbGYgY2xlYW51cFNoZWV0XTsK
K30KKworLSAodm9pZCl1cGRhdGVTaGVldFBvc2l0aW9uCit7CisgICAgW19pbnRlcmFjdGlvblNo
ZWV0IHVwZGF0ZVNoZWV0UG9zaXRpb25dOworfQorCistICh2b2lkKV9jcmVhdGVTaGVldFdpdGhF
bGVtZW50QWN0aW9uczooTlNBcnJheSAqKWFjdGlvbnMgc2hvd0xpbmtUaXRsZTooQk9PTClzaG93
TGlua1RpdGxlCit7CisgICAgQVNTRVJUKCFfaW50ZXJhY3Rpb25TaGVldCk7CisKKyAgICBOU1VS
TCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1h
dGlvbi51cmxdOworICAgIEJPT0wgaXNKYXZhU2NyaXB0VVJMID0gW1t0YXJnZXRVUkwgc2NoZW1l
XSBsZW5ndGhdICYmIFtbdGFyZ2V0VVJMIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
ImphdmFzY3JpcHQiXSA9PSBOU09yZGVyZWRTYW1lOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y2hlY2sgaWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcy4KKworICAg
IC8vIFRoZSBzaGVldCBpcyByZWxlYXNlZCBpbiBhY3Rpb25TaGVldDpjbGlja2VkQnV0dG9uQXRJ
bmRleDoKKyAgICBfaW50ZXJhY3Rpb25TaGVldCA9IGFkb3B0TlMoW1tXS0FjdGlvblNoZWV0IGFs
bG9jXSBpbml0V2l0aFZpZXc6X3ZpZXddKTsKKyAgICBfaW50ZXJhY3Rpb25TaGVldC5nZXQoKS5z
aGVldERlbGVnYXRlID0gc2VsZjsKKyAgICBfaW50ZXJhY3Rpb25TaGVldC5nZXQoKS5hY3Rpb25T
aGVldFN0eWxlID0gVUlBY3Rpb25TaGVldFN0eWxlQXV0b21hdGljOworICAgIF9pbnRlcmFjdGlv
blNoZWV0LmdldCgpLmRlbGVnYXRlID0gc2VsZjsKKworICAgIE5TU3RyaW5nICp0aXRsZVN0cmlu
ZyA9IG5pbDsKKyAgICBCT09MIHRpdGxlSXNVUkwgPSBOTzsKKyAgICBpZiAoc2hvd0xpbmtUaXRs
ZSkgeworICAgICAgICBpZiAoaXNKYXZhU2NyaXB0VVJMKQorICAgICAgICAgICAgdGl0bGVTdHJp
bmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiSmF2YVNjcmlwdCIsICJKYXZhU2NyaXB0IEFjdGlvbiBT
aGVldCBUaXRsZSIsICJUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsi
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aXRsZVN0cmluZyA9IFdlYkNvcmU6OnVz
ZXJWaXNpYmxlU3RyaW5nKHRhcmdldFVSTCk7CisgICAgICAgICAgICB0aXRsZUlzVVJMID0gWUVT
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRpdGxlU3RyaW5nID0gX3ZpZXcucG9z
aXRpb25JbmZvcm1hdGlvbi50aXRsZTsKKworICAgIGlmIChbdGl0bGVTdHJpbmcgbGVuZ3RoXSkg
eworICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0VGl0bGU6dGl0bGVTdHJpbmddOworICAg
ICAgICBpZiAodGl0bGVJc1VSTCkgeworICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBf
dGl0bGVMYWJlbF0gc2V0TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ01pZGRs
ZV07CisgICAgICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0VGl0bGVNYXhMaW5lQ291bnQ6
Ml07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBfdGl0
bGVMYWJlbF0gc2V0TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOwor
ICAgIH0KKworICAgIC8vIFRoZSBlbGVtZW50IGFjdGlvbnMgYXJlIHJlbGVhc2VkIGluIGFjdGlv
blNoZWV0OmNsaWNrZWRCdXR0b25BdEluZGV4OgorICAgIF9lbGVtZW50QWN0aW9ucyA9IGFkb3B0
TlMoW2FjdGlvbnMgY29weV0pOworICAgIGZvciAoV0tFbGVtZW50QWN0aW9uICphY3Rpb24gaW4g
X2VsZW1lbnRBY3Rpb25zLmdldCgpKQorICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgYWRkQnV0
dG9uV2l0aFRpdGxlOlthY3Rpb24gdGl0bGVdXTsKKworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBz
ZXRDYW5jZWxCdXR0b25JbmRleDpbX2ludGVyYWN0aW9uU2hlZXQgYWRkQnV0dG9uV2l0aFRpdGxl
OldFQl9VSV9TVFJJTkdfS0VZKCJDYW5jZWwiLCAiQ2FuY2VsIGJ1dHRvbiBsYWJlbCBpbiBidXR0
b24gYmFyIiwgIlRpdGxlIGZvciBDYW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiKV1d
OworICAgIF9wYWdlLT5zdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKF92aWV3
LnBvc2l0aW9uSW5mb3JtYXRpb24ucG9pbnQpOworfQorCistICh2b2lkKXNob3dJbWFnZVNoZWV0
Cit7CisgICAgQVNTRVJUKCFfaW50ZXJhY3Rpb25TaGVldCk7CisKKyAgICBOU1VSTCAqdGFyZ2V0
VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmxd
OworICAgIE5TTXV0YWJsZUFycmF5ICphY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
KyAgICBpZiAoIV92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24udXJsLmlzRW1wdHkoKSkKKyAgICAg
ICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0
aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZU9wZW5dXTsKKyAgICBpZiAoW2dldFNTUmVh
ZGluZ0xpc3RDbGFzcygpIHN1cHBvcnRzVVJMOnRhcmdldFVSTF0pCisgICAgICAgIFthY3Rpb25z
IGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBl
OldLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0XV07CisgICAgaWYgKFRDQ0FjY2Vz
c1ByZWZsaWdodChnZXRrVENDU2VydmljZVBob3RvcygpLCBOVUxMKSAhPSBrVENDQWNjZXNzUHJl
ZmxpZ2h0RGVuaWVkKQorICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlv
biBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlU2F2ZUlt
YWdlXV07CisgICAgaWYgKCFbW3RhcmdldFVSTCBzY2hlbWVdIGxlbmd0aF0gfHwgW1t0YXJnZXRV
Ukwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiamF2YXNjcmlwdCJdICE9IE5TT3Jk
ZXJlZFNhbWUpCisgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0
YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVDb3B5XV07CisK
KyAgICAvLyBGSVhNRTogQWRkIGNhbGwgdG8gZGVsZWdhdGUgdG8gYWRkIGN1c3RvbSBhY3Rpb25z
LgorCisgICAgW3NlbGYgX2NyZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOmFjdGlvbnMgc2hv
d0xpbmtUaXRsZTpZRVNdOworICAgIGlmICghX2ludGVyYWN0aW9uU2hlZXQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghW19pbnRlcmFjdGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAg
ICAgIFtzZWxmIGFjdGlvblNoZWV0Ol9pbnRlcmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0
b25BdEluZGV4OltfaW50ZXJhY3Rpb25TaGVldCBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCist
ICh2b2lkKXNob3dMaW5rU2hlZXQKK3sKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsK
KyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRp
b25JbmZvcm1hdGlvbi51cmxdOworICAgIGlmICghdGFyZ2V0VVJMKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU011dGFibGVBcnJheSAqYWN0aW9ucyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
CisgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50
QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZU9wZW5dXTsKKyAgICBpZiAoW2dldFNT
UmVhZGluZ0xpc3RDbGFzcygpIHN1cHBvcnRzVVJMOnRhcmdldFVSTF0pCisgICAgICAgIFthY3Rp
b25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhU
eXBlOldLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0XV07CisgICAgaWYgKCFbW3Rh
cmdldFVSTCBzY2hlbWVdIGxlbmd0aF0gfHwgW1t0YXJnZXRVUkwgc2NoZW1lXSBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlOkAiamF2YXNjcmlwdCJdICE9IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIFth
Y3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldp
dGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVDb3B5XV07CisKKyAgICAvLyBGSVhNRTogQWRkIGNh
bGwgdG8gZGVsZWdhdGUgdG8gYWRkIGN1c3RvbSBhY3Rpb25zLgorCisgICAgW3NlbGYgX2NyZWF0
ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOmFjdGlvbnMgc2hvd0xpbmtUaXRsZTpZRVNdOworICAg
IGlmICghX2ludGVyYWN0aW9uU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19p
bnRlcmFjdGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFjdGlvblNoZWV0
Ol9pbnRlcmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0b25BdEluZGV4OltfaW50ZXJhY3Rp
b25TaGVldCBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKXNob3dEYXRhRGV0ZWN0
b3JzU2hlZXQKK3sKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKKyAgICBOU1VSTCAq
dGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlv
bi51cmxdOworICAgIGlmICghdGFyZ2V0VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IVtbZ2V0REREZXRlY3Rpb25Db250cm9sbGVyQ2xhc3MoKSB0YXBBbmRIb2xkU2NoZW1lc10gY29u
dGFpbnNPYmplY3Q6W3RhcmdldFVSTCBzY2hlbWVdXSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZC4KKyAgICAvLyBXZSBuZWVkIGEgZGlm
ZmVyZW50IEFQSSBmb3IgREREZWN0ZWN0aW9uQ29udHJvbGxlciB0aGF0IGRvZXNuJ3QgdGFrZSBE
T01Ob2RlIGFuZCBXZWJGcmFtZSBvYmplY3RzLgorICAgIC8vIE5TQXJyYXkgKmRhdGFEZXRlY3Rv
cnNBY3Rpb25zID0gW1tnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRy
b2xsZXJdIGFjdGlvbnNGb3JET01Ob2RlOl9pbnRlcmFjdGlvbi5lbGVtZW50IGZvckZyYW1lOltf
d2ViVmlldyBtYWluRnJhbWVdXTsKKyAgICBOU0FycmF5ICpkYXRhRGV0ZWN0b3JzQWN0aW9ucyA9
IG5pbDsKKworICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiB3aWxsIGFsd2F5
cyBiZSB0cnVlIGZvciBub3csIHNpbmNlIHRoZXJlIGFyZSBubyB2aWFibGUgY2FsbHMgdG8gcmV0
cmlldmUKKyAgICAvLyBkYXRhIGRldGVjdG9yIGFjdGlvbnMuCisgICAgaWYgKFtkYXRhRGV0ZWN0
b3JzQWN0aW9ucyBjb3VudF0gPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNNdXRhYmxl
QXJyYXkgKmVsZW1lbnRBY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3Ig
KE5TVUludGVnZXIgYWN0aW9uTnVtYmVyID0gMDsgYWN0aW9uTnVtYmVyIDwgW2RhdGFEZXRlY3Rv
cnNBY3Rpb25zIGNvdW50XTsgYWN0aW9uTnVtYmVyKyspIHsKKyAgICAgICAgRERBY3Rpb24gKmFj
dGlvbiA9IFtkYXRhRGV0ZWN0b3JzQWN0aW9ucyBvYmplY3RBdEluZGV4OmFjdGlvbk51bWJlcl07
CisgICAgICAgIFtlbGVtZW50QWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBjdXN0
b21FbGVtZW50QWN0aW9uV2l0aFRpdGxlOlthY3Rpb24gbG9jYWxpemVkTmFtZV0gYWN0aW9uSGFu
ZGxlcjpeKFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIFVJ
UG9wb3ZlckNvbnRyb2xsZXIgKnBvcG92ZXJDb250cm9sbGVyID0gbmlsOworICAgICAgICAgICAg
aWYgKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRpb21QaG9u
ZSkgeworICAgICAgICAgICAgICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXRVc2VySW50ZXJhY3Rp
b25FbmFibGVkOk5PXTsKKyAgICAgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTEwMTU3
NTE+IEFjdGlvbiBzaGVldCBiZWNvbWVzIGJsYWNrIGlmIGEgYnV0dG9uIGlzIGNsaWNrZWQgdHdp
Y2Ugb24gaVBhZAorICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgYW55IGZ1cnRoZXIgdGFwIG9u
IHRoZSBzaGVldCB3aGlsZSBERCBpcyBsb2FkaW5nIGl0cyB2aWV3IGNvbnRyb2xsZXIsIG90aGVy
d2lzZSBVSUFjdGlvblNoZWV0IGdvZXMgYW1vaworCisgICAgICAgICAgICAgICAgcG9wb3ZlckNv
bnRyb2xsZXIgPSBbX2ludGVyYWN0aW9uU2hlZXQgX3JlbGlucXVpc2hQb3BvdmVyQ29udHJvbGxl
cl07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFtbZ2V0REREZXRlY3Rpb25Db250cm9s
bGVyQ2xhc3MoKSBzaGFyZWRDb250cm9sbGVyXSBwZXJmb3JtQWN0aW9uOmFjdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpblZpZXc6W3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhQb3BvdmVyQ29udHJv
bGxlcjpwb3BvdmVyQ29udHJvbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uRGVsZWdhdGU6c2VsZl07CisgICAg
ICAgIH1dXTsKKyAgICB9CisKKyAgICBbc2VsZiBfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlv
bnM6ZWxlbWVudEFjdGlvbnMgc2hvd0xpbmtUaXRsZTpOT107CisgICAgaWYgKCFfaW50ZXJhY3Rp
b25TaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGltcGxpY2l0IHNlY29uZCBi
dXR0b24gaXMgImNhbmNlbCIsIHdoaWNoIGlzIHN3YWxsb3dlZCBieSB0aGUgcG9wb3ZlciBhdCBw
cmVzZW50YXRpb24gdGltZS4KKyAgICBpZiAoX2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkubnVtYmVy
T2ZCdXR0b25zIDw9IDIpCisgICAgICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmFycm93RGly
ZWN0aW9ucyA9IFVJUG9wb3ZlckFycm93RGlyZWN0aW9uVXAgfCBVSVBvcG92ZXJBcnJvd0RpcmVj
dGlvbkRvd247CisKKyAgICBpZiAoIVtfaW50ZXJhY3Rpb25TaGVldCBwcmVzZW50U2hlZXRdKQor
ICAgICAgICBbc2VsZiBhY3Rpb25TaGVldDpfaW50ZXJhY3Rpb25TaGVldC5nZXQoKSBjbGlja2Vk
QnV0dG9uQXRJbmRleDpbX2ludGVyYWN0aW9uU2hlZXQgY2FuY2VsQnV0dG9uSW5kZXhdXTsKK30K
KworLSAodm9pZCljbGVhbnVwU2hlZXQKK3sKKyAgICBfcGFnZS0+c3RvcEludGVyYWN0aW9uKCk7
CisKKyAgICBbX2ludGVyYWN0aW9uU2hlZXQgZG9uZVdpdGhTaGVldF07CisgICAgW19pbnRlcmFj
dGlvblNoZWV0IHNldFNoZWV0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2ludGVyYWN0aW9uU2hlZXQg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICBfaW50ZXJhY3Rpb25TaGVldCA9IG5pbDsKKworICAgIF9l
bGVtZW50QWN0aW9ucyA9IG5pbDsKK30KKworQGVuZAorCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaAkocmV2aXNp
b24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFj
dGlvblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNCArNTksOSBAQCBzdHJ1Y3QgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247CiAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkOwog
LSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50ICopdGhlRXZlbnQgaXNDaGFy
RXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQ7CiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlk
Q2hhbmdlOihjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilp
bmZvOworLSAodm9pZClfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbjsK
Ky0gKHZvaWQpX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb247CistICh2b2lkKV9wZXJmb3JtQWN0
aW9uOihOU1N0cmluZyAqKWFjdGlvbjsKKworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWlj
KSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHBvc2l0aW9uSW5mb3Jt
YXRpb247CiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0lu
dGVyYWN0aW9uVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDEyICsyOSwxNCBAQAogI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24uaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBv
cnQgIk5hdGl2ZVdlYlRvdWNoRXZlbnQuaCIKKyNpbXBvcnQgIldLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQuaCIKICNpbXBvcnQgIldLQmFzZS5oIgogI2ltcG9ydCAiV0tHZXN0dXJlVHlwZXMuaCIKICNp
bXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJJT1NFdmVudEZhY3RvcnkuaCIKICNpbXBv
cnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1w
b3J0IDxEYXRhRGV0ZWN0b3JzVUkvREREZXRlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxV
SUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXpl
cl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgpAQCAtNDgsOSAr
NTAsMTQgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxv
YXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViU2VsZWN0aW9uUmVjdC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1NPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCitTT0ZUX0xJTktfQ0xBU1MoRGF0YURldGVjdG9yc1VJ
LCBERERldGVjdGlvbkNvbnRyb2xsZXIpCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTE2Nyw2ICsxNzQsNyBAQCBAaW50ZXJmYWNlIFdLSW50
ZXJhY3Rpb25WaWV3IChQcml2YXRlKQogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21hcmtlZFRl
eHQ7CiAgICAgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gX3Bvc2l0aW9uSW5mb3Jt
YXRpb247CiAgICAgQk9PTCBfaGFzVmFsaWRQb3NpdGlvbkluZm9ybWF0aW9uOworICAgIFJldGFp
blB0cjxXS0FjdGlvblNoZWV0QXNzaXN0YW50PiBfYWN0aW9uU2hlZXRBc3Npc3RhbnQ7CiB9CiAK
IEBzeW50aGVzaXplIGlucHV0RGVsZWdhdGUgPSBfaW5wdXREZWxlZ2F0ZTsKQEAgLTIxMyw2ICsy
MjEsNyBAQCAtIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IG5vdGlmaWVkIHRoYXQgbG9hZGluZyBo
YXMgY29tcGxldGVkLgogICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOlVJ
V2ViU2VsZWN0aW9uTW9kZVdlYl07CiAKKyAgICBfYWN0aW9uU2hlZXRBc3Npc3RhbnQgPSBhZG9w
dE5TKFtbV0tBY3Rpb25TaGVldEFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdKTsK
ICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMjIwLDYgKzIyOSw3IEBAIC0gKHZvaWQpZGVhbGxv
YwogewogICAgIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgPSBuaWw7CiAgICAgX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgPSBuaWw7CisgICAgX2FjdGlvblNoZWV0QXNzaXN0YW50ID0gbmlsOwogICAg
IFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW19z
aW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtfZG91Ymxl
VGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTIzOSw2ICsyNDksNyBA
QCAtICh2b2lkKXNldFNjcm9sbFZpZXc6KFVJV2ViU2Nyb2xsVmlldyAqCiAtICh2b2lkKXNldFBh
Z2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2UKIHsKICAgICBfcGFnZSA9
IHBhZ2U7CisgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzZXRQYWdlOl9wYWdlXTsKIH0KIAog
LSAoQk9PTClpc0VkaXRhYmxlCkBAIC00MTcsMjIgKzQyOCwyOSBAQCAtIChCT09MKWdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvCiAKIC0gKHZvaWQpX3Nob3dJbWFnZVNoZWV0CiB7Ci0K
KyAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dJbWFnZVNoZWV0XTsKIH0KIAogLSAodm9p
ZClfc2hvd0xpbmtTaGVldAogeworICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0xpbmtT
aGVldF07Cit9CiAKKy0gKHZvaWQpX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXQKK3sKKyAgICBbX2Fj
dGlvblNoZWV0QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdOwogfQogCiAtIChTRUwp
X2FjdGlvbkZvckxvbmdQcmVzcwogewogICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlj
a2FibGVFbGVtZW50TmFtZSA9PSAiSU1HIikKICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hv
d0ltYWdlU2hlZXQpOwotICAgIGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJs
ZUVsZW1lbnROYW1lID09ICJBIikKKyAgICBlbHNlIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5j
bGlja2FibGVFbGVtZW50TmFtZSA9PSAiQSIpIHsKKyAgICAgICAgTlNVUkwgKnRhcmdldFVSTCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgICAg
IGlmIChbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5kSG9sZFNjaGVtZXNd
IGNvbnRhaW5zT2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCisgICAgICAgICAgICByZXR1cm4g
QHNlbGVjdG9yKF9zaG93RGF0YURldGVjdG9yc1NoZWV0KTsKICAgICAgICAgcmV0dXJuIEBzZWxl
Y3Rvcihfc2hvd0xpbmtTaGVldCk7Ci0gICAgLy8gRklYTUU6IEFkZCBjaGVjayBmb3IgbGlua3Mg
YW5kIGRhdGFkZXRlY3RvcnMuCi0KKyAgICB9CiAgICAgcmV0dXJuIG5pbDsKIH0KIApAQCAtNDQ0
LDYgKzQ2MiwxMiBAQCAtICh2b2lkKWVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9ECiAg
ICAgfQogfQogCistICh2b2lkKV91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uCit7CisgICAgX2hh
c1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IE5POworICAgIF9wYWdlLT5yZXF1ZXN0UG9zaXRp
b25JbmZvcm1hdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Cit9CisKIC0gKEJPT0wp
Z2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1
cmVSZWNvZ25pemVyCiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFtnZXN0dXJlUmVjb2duaXplciBs
b2NhdGlvbkluVmlldzpzZWxmXTsKQEAgLTU3MiwxOCArNTk2LDEwIEBAIC0gKHZvaWQpX2xvbmdQ
cmVzc1JlY29nbml6ZWQ6KFVJTG9uZ1ByZXMKIHsKICAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6
ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKIAotICAgIHN3aXRjaCAoW2dlc3R1
cmVSZWNvZ25pemVyIHN0YXRlXSkgewotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
QmVnYW46Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDoKLSAgICAgICAgLy8g
RklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVJR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKLSAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBs
ZW1lbnRhdGlvbgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
KyAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVCZWdhbikgeworICAgICAgICBTRUwgYWN0aW9uID0gW3NlbGYgX2FjdGlvbkZvckxvbmdQ
cmVzc107CisgICAgICAgIGlmIChhY3Rpb24pCisgICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6YWN0aW9uXTsKICAgICB9CiB9CiAKQEAgLTY1NCw2ICs2NzAsOCBAQCAtICh2b2lkKV9w
b3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjCiB7CiAgICAgX3Bvc2l0aW9uSW5mb3JtYXRp
b24gPSBpbmZvOwogICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7CisgICAg
aWYgKF9hY3Rpb25TaGVldEFzc2lzdGFudCkKKyAgICAgICAgW19hY3Rpb25TaGVldEFzc2lzdGFu
dCB1cGRhdGVTaGVldFBvc2l0aW9uXTsKIH0KIAogLSAoVUlWaWV3ICopaW5wdXRBY2Nlc3NvcnlW
aWV3CkBAIC03OTIsNiArODEwLDExIEBAIC0gKHZvaWQpX3Jlc2V0U2hvd2luZ1RleHRTdHlsZToo
TlNOb3RpZmkKICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgaGlkZVRleHRTdHlsZU9wdGlv
bnNdOwogfQogCistICh2b2lkKV9wZXJmb3JtQWN0aW9uOihOU1N0cmluZyAqKWFjdGlvbgorewor
ICAgIF9wYWdlLT5wZXJmb3JtQWN0aW9uT25FbGVtZW50KGFjdGlvbik7Cit9CisKIC0gKHZvaWQp
Y29weTooaWQpc2VuZGVyCiB7CiAgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxp
dGVyYWwoImNvcHkiKSk7CkBAIC0xMTkxLDcgKzEyMTQsNyBAQCAtICh2b2lkKWFjY2Vzc29yeUNs
ZWFyCiAKIC0gKHZvaWQpX3VwZGF0ZUFjY2Vzc29yeQogewotICAgIC8vIEZJWE1FOiBuZWVkIHRv
IGluaXRpYWxpemUgd2l0aCB2YWx1cyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGluaXRpYWxpemUgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgV2ViUHJvY2Vzcy4K
ICAgICBfYWNjZXNzb3J5Lm5leHRFbmFibGVkID0gWUVTOwogICAgIF9hY2Nlc3NvcnkucHJldmlv
dXNFbmFibGVkID0gWUVTOwogICAgIApAQCAtMTQyNSw4ICsxNDQ4LDcgQEAgLSAodm9pZClzZXRT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKQogewogfQogCi0vKiBNb2RpZnkgdGV4dCB3aXRo
b3V0IHN0YXJ0aW5nIGEgbmV3IHVuZG8gZ3JvdXBpbmcuCi0gKi8KKy8vIE1vZGlmeSB0ZXh0IHdp
dGhvdXQgc3RhcnRpbmcgYSBuZXcgdW5kbyBncm91cGluZy4KIC0gKHZvaWQpcmVwbGFjZVJhbmdl
V2l0aFRleHRXaXRob3V0Q2xvc2luZ1R5cGluZzooVUlUZXh0UmFuZ2UgKilyYW5nZSByZXBsYWNl
bWVudFRleHQ6KE5TU3RyaW5nICopdGV4dAogewogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDE2MzE3NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjEsNiArMzIxLDI4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UG9z
aXRpb25JbmZvcm0KICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVl
c3RQb3NpdGlvbkluZm9ybWF0aW9uKHBvaW50KSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKHBvaW50KSwgbV9w
YWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEludGVyYWN0aW9uKCkKK3sKKyAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BJbnRlcmFjdGlvbigpLCBt
X3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtQWN0aW9uT25FbGVtZW50
KGNvbnN0IFN0cmluZyYgYWN0aW9uKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UGVyZm9ybUFjdGlvbk9uRWxlbWVudChhY3Rpb24pLCBtX3BhZ2VJRCk7Cit9CisK
K3ZvaWQgV2ViUGFnZVByb3h5OjpzYXZlSW1hZ2VUb0xpYnJhcnkoY29uc3QgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUpCit7CisgICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUo
aW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIGltYWdlU2l6ZSk7CisgICAgbV9w
YWdlQ2xpZW50LnNhdmVJbWFnZVRvTGlicmFyeShidWZmZXIpOworfQorCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6bm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb24oKQogewogICAgIG1fcGFnZUNsaWVudC5zZWxl
Y3Rpb25EaWRDaGFuZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTMyNyw2ICsxMzI3LDEwIEBACiAJCUMwRTNBQTdDMTIwOUU4M0MwMEE0OUQwMSAvKiBNb2R1bGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwRTNBQTQ0
MTIwOUUyQkEwMEE0OUQwMSAvKiBNb2R1bGUuaCAqLzsgfTsKIAkJQzUxNzM4ODExMkRGOEY0RjAw
RUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24uaCAqLzsgfTsKIAkJQzUyMzdGNjAxMjQ0MUNBMzAwNzgwNDcyIC8qIFdl
YkVkaXRvckNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMu
bW0gKi87IH07CisJCUM1MjQ1MzkxMTg5QzZCODUwMDNERjQ3NiAvKiBXS0FjdGlvblNoZWV0QXNz
aXN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTI0NTM4RjE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oICovOyB9
OworCQlDNTI0NTM5MjE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjQ1Mzkw
MTg5QzZCODUwMDNERjQ3NiAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tICovOyB9OworCQlD
NTM1QkQ1OTE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUzNUJENTcxODkxOUNGQzAwOThGMUY1
IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsKKwkJQzUzNUJENUExODkxOUNGQzAwOThGMUY1IC8q
IFdLQWN0aW9uU2hlZXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNTM1QkQ1ODE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5tbSAqLzsg
fTsKIAkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU0RkZBMjEyRTRF
OEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLzsgfTsKIAkJQzU3NEE1ODExMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5oICovOyB9OwogCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVi
b2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLzsgfTsK
QEAgLTMwODAsNiArMzA4NCwxMCBAQAogCQlDMEUzQUE0ODEyMDlFNDUwMDBBNDlEMDEgLyogTW9k
dWxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kdWxl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTE3Mzg4MDEyREY4RjRGMDBF
RTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVkaXRvckNsaWVudE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUyNDUzOEYxODlDNkI4NTAwM0RG
NDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oOyBwYXRoID0gaW9zL1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUyNDUzOTAxODlD
NkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tOyBwYXRo
ID0gaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUM1MzVCRDU3MTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLQWN0aW9uU2hlZXQuaDsgcGF0aCA9IGlvcy9X
S0FjdGlvblNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MzVCRDU4MTg5
MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tBY3Rpb25TaGVldC5tbTsgcGF0aCA9IGlvcy9XS0FjdGlvblNo
ZWV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTU0RkZBMjEyRTRFOEVBMDAy
RjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkRyYWdDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJv
YXJkVHlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYXN0
ZWJvYXJkVHlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTE4LDYgKzQx
MjYsMTAgQEAKIAkJCQkyREE5NDQ3OTE4ODRFM0I1MDBFRDg2REIgLyogUGFnZUNsaWVudEltcGxJ
T1MubW0gKi8sCiAJCQkJMkRBOTQ0N0ExODg0RTNCNTAwRUQ4NkRCIC8qIFVJV0tSZW1vdGVWaWV3
LmggKi8sCiAJCQkJMkRBOTQ0N0IxODg0RTNCNTAwRUQ4NkRCIC8qIFVJV0tSZW1vdGVWaWV3Lm1t
ICovLAorCQkJCUM1MzVCRDU3MTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0LmggKi8s
CisJCQkJQzUzNUJENTgxODkxOUNGQzAwOThGMUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gKi8sCisJ
CQkJQzUyNDUzOEYxODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAq
LywKKwkJCQlDNTI0NTM5MDE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFu
dC5tbSAqLywKIAkJCQkyREE5NDQ3QzE4ODRFM0I1MDBFRDg2REIgLyogV0tDb250ZW50Vmlldy5o
ICovLAogCQkJCTJEQTk0NDdEMTg4NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3Lm1tICov
LAogCQkJCTJEQTk0NDdFMTg4NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwu
aCAqLywKQEAgLTY0NDcsNiArNjQ1OSw3IEBACiAJCQkJMUFCOEExRjQxODQwMEI4RjAwRTlBRTY5
IC8qIFdLUGFnZUZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1RTc0OUVBMTgwREJC
OTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREE5NDQ5MzE4ODRFM0I1MDBFRDg2REIgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlDNTM1QkQ1OTE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCQTAxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRl
eHRNZW51UHJveHlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0I3NUM2MTIwM0ExQ0UwMDIy
MkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VF
N0QwRTEyODQ2RjY5MDA5ODI3REEgLyogV2ViQ29udGV4dE1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKQEAgLTY3NzUsNiArNjc4OCw3IEBACiAJCQkJQkM4Njk5QjcxMTZBQURBQTAwMkE5MjVCIC8q
IFdLVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRkE2MTc5RjEyRjBCOTlEMDAz
M0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU1NDIyQ0MxODA3
NzNDRTAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDNTI0NTM5MTE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAwNkNDMUYyIC8qIFdLV2Vi
QXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk4OUQ4MjE2MUE3RTVEMDAw
RDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLmggaW4gSGVhZGVycyAqLywKQEAgLTc3ODAsNiAr
Nzc5NCw3IEBACiAJCQkJMUFEMzMwNkUxNkIxRDk5MTAwNEY2MEU3IC8qIFN0b3JhZ2VBcmVhSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNFQ0QyNDE3MTYyREIxMDAxRkM5RUYgLyogU3Rv
cmFnZUFyZWFNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzMzRERUQxNkRFOEY4ODAwNkE4
RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUM1MzVCRDVBMTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE0NEI5NUIxNkI3M0Y5RjAwQjdCQkQ4IC8qIFN0b3JhZ2VNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjMxQTk2MTZCQzY4ODEwMEY2REJDOSAvKiBTdG9yYWdl
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTQ0Qjk1NzE2
QjczN0FBMDBCN0JCRDggLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03OTU2LDYgKzc5NzEsNyBAQAogCQkJCTJEQTk0NEExMTg4NEU0RjAwMEVEODZEQiAvKiBX
ZWJJT1NFdmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0JEMzkxNDEyNUJCMUE4
MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzUyNDUzOTIxODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RERDEyN0E1MjFD
MDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxRDBENDM2MTgzQjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRDU5MjlFMTY2RTA2MDAw
MEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE2MzE3
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzMCw2ICs0MzAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25maXJtQ29t
cG9zaXRpb24oKTsKICAgICB2b2lkIGdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwogICAgIHZv
aWQgcmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
KyAgICB2b2lkIHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0b3BJbnRlcmFjdGlvbigpOworICAgIHZvaWQg
cGVyZm9ybUFjdGlvbk9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFjdGlvbik7CiAjZW5kaWYKIAog
ICAgIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlciogbm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyKCk7CkBAIC0xMDQxLDYgKzEwNDQsNyBAQCBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKElPUykKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9hc3Npc3RlZE5v
ZGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2N1cnJlbnRXb3JkUmFuZ2U7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1faW50ZXJhY3Rpb25Ob2RlOwogICAgIGJvb2wgbV9zaG91
bGRSZXR1cm5Xb3JkQXRTZWxlY3Rpb247CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIENvbmZpcm1Db21wb3NpdGlvbigpCiAgICAg
R2V0UG9zaXRpb25JbmZvcm1hdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkgLT4gKFdlYktp
dDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pCiAgICAgUmVx
dWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQpCisgICAgU3Rh
cnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCkKKyAgICBTdG9wSW50ZXJhY3Rpb24oKQorICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQoU3Ry
aW5nIGFjdGlvbikKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0JKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDE2IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVz
dWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50VHlwZUhlbHBlcnMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJh
bWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
c3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9y
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgpAQCAtODA5LDYgKzgxMiwxNCBA
QCB2b2lkIFdlYlBhZ2U6OmdldEF1dG9jb3JyZWN0aW9uQ29udGV4dChTCiAgICAgY29tcHV0ZUF1
dG9jb3JyZWN0aW9uQ29udGV4dChtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLCBjb250ZXh0QmVmb3JlLCBtYXJrZWRUZXh0LCBzZWxlY3RlZFRleHQsIGNvbnRl
eHRBZnRlciwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKK3N0YXRpYyBFbGVtZW50KiBjb250YWlu
aW5nTGlua0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBmb3IgKEVsZW1lbnQqIGN1
cnJlbnRFbGVtZW50ID0gZWxlbWVudDsgY3VycmVudEVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50ID0g
Y3VycmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnRFbGVt
ZW50LT5pc0xpbmsoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudDsKKyAgICBy
ZXR1cm4gMDsKK30KKwogdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0
IEludFBvaW50JiBwb2ludCwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIGluZm8p
CiB7CiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50OwpAQCAtODE5LDE2ICs4MzAsMjAgQEAg
dm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgIGlmIChoaXROb2Rl
KSB7CiAgICAgICAgIGluZm8uY2xpY2thYmxlRWxlbWVudE5hbWUgPSBoaXROb2RlLT5ub2RlTmFt
ZSgpOwogCi0gICAgICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVu
dChoaXROb2RlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGhpdE5vZGUtPmlzRWxlbWVu
dE5vZGUoKSA/IHRvRWxlbWVudChoaXROb2RlKSA6IDA7CiAgICAgICAgIGlmICghZWxlbWVudCkK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAm
JiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpIHsKLSAgICAgICAgICAgIFVS
TCB1cmwgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5jYWNoZWRJbWFnZSgp
LT51cmwoKTsKLSAgICAgICAgICAgIGlmICghdXJsLnN0cmluZygpLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIGluZm8udXJsID0gdXJsLnN0cmluZygpOworICAgICAgICAgICAgRWxlbWVudCog
bGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoZWxlbWVudCk7CisKKyAgICAgICAg
ICAgIGlmIChsaW5rRWxlbWVudCkKKyAgICAgICAgICAgICAgICBpbmZvLnVybCA9IGxpbmtFbGVt
ZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpKSk7Owog
ICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlzTGluaygpKQotICAgICAgICAgICAgaW5mby51
cmwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikuc3RyaW5nKCk7
CisgICAgICAgICAgICBpbmZvLnVybCA9IGVsZW1lbnQtPmRvY3VtZW50KCkuY29tcGxldGVVUkwo
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmhyZWZBdHRyKSkpOworICAgICAgICBpbmZvLnRpdGxlID0gZWxlbWVudC0+Z2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6dGl0bGVBdHRyKS5zdHJpbmcoKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpbmZvLmJvdW5kcyA9IGVsZW1lbnQtPnJl
bmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgICAgIGhpdE5v
ZGUgPSBmcmFtZS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCgocG9pbnQpLCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVz
dFJlcXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCkuaW5uZXJOb2RlKCk7CkBAIC04NTIsNiAr
ODY3LDU1IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24KICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVQb3NpdGlvbkluZm9ybWF0aW9u
KGluZm8pKTsKIH0KIAordm9pZCBXZWJQYWdlOjpzdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRB
dFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sKKyAgICBGbG9hdFBv
aW50IGFkanVzdGVkUG9pbnQ7CisgICAgbV9pbnRlcmFjdGlvbk5vZGUgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhwb2ludCwgYWRqdXN0ZWRQb2ludCk7
Cit9CisKK3ZvaWQgV2ViUGFnZTo6c3RvcEludGVyYWN0aW9uKCkKK3sKKyAgICBtX2ludGVyYWN0
aW9uTm9kZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk9uRWxl
bWVudChjb25zdCBTdHJpbmcmIGFjdGlvbikKK3sKKyAgICBpZiAoIW1faW50ZXJhY3Rpb25Ob2Rl
IHx8ICFtX2ludGVyYWN0aW9uTm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9pbnRlcmFjdGlv
bk5vZGUuZ2V0KCkpOworICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGFjdGlvbiA9PSAiY29weSIpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQt
PnJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkgeworICAgICAgICAgICAgRWxlbWVudCogbGlu
a0VsZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFsaW5rRWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX2ludGVyYWN0aW9u
Tm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS53cml0ZUltYWdlVG9QYXN0ZWJvYXJk
KCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgKmVsZW1lbnQsIHRvUmVuZGVy
SW1hZ2UoZWxlbWVudC0+cmVuZGVyZXIoKSktPmNhY2hlZEltYWdlKCktPnVybCgpLCBTdHJpbmco
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9pbnRlcmFjdGlvbk5vZGUt
PmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkuY29weVVSTChsaW5rRWxlbWVudC0+ZG9jdW1l
bnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlua0Vs
ZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpLCBsaW5rRWxlbWVudC0+
dGV4dENvbnRlbnQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsK
KyAgICAgICAgICAgIG1faW50ZXJhY3Rpb25Ob2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRv
cigpLmNvcHlVUkwoZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJl
ZkF0dHIpKSksIGVsZW1lbnQtPnRleHRDb250ZW50KCkpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChhY3Rpb24gPT0gInNhdmUiKSB7CisgICAgICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIo
KS0+aXNSZW5kZXJJbWFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBDYWNoZWRJ
bWFnZSogY2FjaGVkSW1hZ2UgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5j
YWNoZWRJbWFnZSgpOworICAgICAgICBpZiAoY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgICAgIFNo
YXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IGNhY2hlZEltYWdlLT5yZXNvdXJjZUJ1ZmZlcigpLT5zaGFyZWRCdWZmZXIo
KTsKKyAgICAgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBi
dWZmZXJTaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVy
U2l6ZSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPmRhdGEoKSwgYnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgc2hhcmVkTWVt
b3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsK
KyAgICAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVJbWFnZVRv
TGlicmFyeShoYW5kbGUsIGJ1ZmZlclNpemUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwogdm9pZCBXZWJQYWdlOjplbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6Tm9kZSog
bm9kZSkKIHsKICAgICBtX2Fzc2lzdGVkTm9kZSA9IG5vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222869</attachid>
            <date>2014-01-31 18:57:48 -0800</date>
            <delta_ts>2014-01-31 19:42:16 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>actionsheets-webkit2.txt</filename>
            <type>text/plain</type>
            <size>67682</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzIwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAxLTMxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEFj
dGlvblNoZWV0cyBpbiBXSzIgZm9yIGlPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyODM2
Njc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlcyB0aGUgbG9jYWxpemFibGUgc3RyaW5ncyBmb3IgYWN0aW9uIHNoZWV0cy4KKworICAgICAg
ICAqIEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNC0wMS0yOSAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9zc2libGUg
dG8gaW1wbGVtZW50IEpTIGJ1aWx0aW5zIGluIEpTCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Fbmds
aXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lvbiAxNjMxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDkgQEAKIC8qIHdpbmRvdyB0aXRsZSBmb3IgYSBzdGFuZGFs
b25lIGltYWdlICh1c2VzIG11bHRpcGxpY2F0aW9uIHN5bWJvbCwgbm90IHgpICovCiAiPGZpbGVu
YW1lPiAlZMOXJWQgcGl4ZWxzIiA9ICI8ZmlsZW5hbWU+ICVkw5clZCBwaXhlbHMiOwogCisvKiBU
aXRsZSBmb3IgQWRkIHRvIFJlYWRpbmcgTGlzdCBhY3Rpb24gYnV0dG9uICovCisiQWRkIHRvIFJl
YWRpbmcgTGlzdCIgPSAiQWRkIHRvIFJlYWRpbmcgTGlzdCI7CisKIC8qIFVuZG8gYWN0aW9uIG5h
bWUgKi8KICJBbGlnbiBMZWZ0IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiQWxpZ24gTGVmdCI7CiAK
QEAgLTg4LDYgKzkxLDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJCb2xkIChVbmRvIGFj
dGlvbiBuYW1lKSIgPSAiQm9sZCI7CiAKKy8qIFRpdGxlIGZvciBDYW5jZWwgYnV0dG9uIGxhYmVs
IGluIGJ1dHRvbiBiYXIgKi8KKyJDYW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiID0g
IkNhbmNlbCI7CisKIC8qIENhcGl0YWxpemUgY29udGV4dCBtZW51IGl0ZW0gKi8KICJDYXBpdGFs
aXplIiA9ICJDYXBpdGFsaXplIjsKIApAQCAtMTM2LDYgKzE0Miw5IEBACiAvKiBDb3B5IGNvbnRl
eHQgbWVudSBpdGVtICovCiAiQ29weSIgPSAiQ29weSI7CiAKKy8qIFRpdGxlIGZvciBDb3B5IExp
bmsgb3IgSW1hZ2UgYWN0aW9uIGJ1dHRvbiAqLworIkNvcHkgQWN0aW9uU2hlZXQgTGluayIgPSAi
Q29weSI7CisKIC8qIENvcHkgQXVkaW8gQWRkcmVzcyBMb2NhdGlvbiBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIkNvcHkgQXVkaW8gQWRkcmVzcyIgPSAiQ29weSBBdWRpbyBBZGRyZXNzIjsKIApAQCAt
MjQ3LDYgKzI1Niw5IEBACiAvKiBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSBkZXNjcmlwdGlv
biAqLwogIkphdmEgaXMgdW5hdmFpbGFibGUiID0gIkphdmEgaXMgdW5hdmFpbGFibGUiOwogCisv
KiBUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsgKi8KKyJKYXZhU2Ny
aXB0IEFjdGlvbiBTaGVldCBUaXRsZSIgPSAiSmF2YVNjcmlwdCI7CisKIC8qIFVuZG8gYWN0aW9u
IG5hbWUgKi8KICJKdXN0aWZ5IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiSnVzdGlmeSI7CiAKQEAg
LTMwNyw2ICszMTksOSBAQAogLyogTWVudSBpdGVtIGxhYmVsIGZvciB0aGUgdHJhY2sgdGhhdCBy
ZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMgKi8KICJPZmYiID0gIk9mZiI7CiAK
Ky8qIFRpdGxlIGZvciBPcGVuIExpbmsgYWN0aW9uIGJ1dHRvbiAqLworIk9wZW4gQWN0aW9uU2hl
ZXQgTGluayIgPSAiT3BlbiI7CisKIC8qIE9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyBjb250ZXh0
IG1lbnUgaXRlbSAqLwogIk9wZW4gQXVkaW8gaW4gTmV3IFdpbmRvdyIgPSAiT3BlbiBBdWRpbyBp
biBOZXcgV2luZG93IjsKIApAQCAtMzkxLDYgKzQwNiw5IEBACiAvKiBSaWdodCB0byBMZWZ0IGNv
bnRleHQgbWVudSBpdGVtICovCiAiUmlnaHQgdG8gTGVmdCIgPSAiUmlnaHQgdG8gTGVmdCI7CiAK
Ky8qIFRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24gKi8KKyJTYXZlIEltYWdlIiA9
ICJTYXZlIEltYWdlIjsKKwogLyogU2VhcmNoIGluIFNwb3RsaWdodCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlNlYXJjaCBpbiBTcG90bGlnaHQiID0gIlNlYXJjaCBpbiBTcG90bGlnaHQiOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMyMzApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTkgQEAKKzIwMTQtMDEtMzEgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgQWN0
aW9uU2hlZXRzIGluIFdLMiBmb3IgaU9TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTI4MzY2
Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgdGhlIGRlZmF1bHQgc3VwcG9ydCBmb3IgQWN0aW9uIFNoZWV0cworICAgICAg
ICBpbiBXSzIgZm9yIGlPUy4gV0tBY3Rpb25TaGVldCBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
dGhlCisgICAgICAgIHNoZWV0IGl0c2VsZiB0aGF0IGluaGVyaXRzIGZyb20gVUlBY3Rpb25TaGVl
dCBhbmQgaGFuZGxlcworICAgICAgICB0aGUgcmVwb3NpdGlvbmluZyBvZiB0aGUgc2hlZXQgYWZ0
ZXIgcm90YXRpb24gZm9yIGlQYWQuCisgICAgICAgIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgaXMg
dGhlIGNvbnRyb2xsZXIgY2xhc3MgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgIHRoZSBkZWxlZ2F0
ZSBtZXRob2RzLCBjb250cm9scyB0aGUgbGlmZXRpbWUgb2YgdGhlIGFjdGlvbiBzaGVldAorICAg
ICAgICBvYmplY3QgYW5kIHBlcmZvcm1zIHRoZSBhY3Rpb25zLgorICAgICAgICBXZSBoYXZlIDMg
ZGlmZmVyZW50IHR5cGVzIG9mIHNoZWV0czoKKyAgICAgICAgICAgLSBsaW5rIHNoZWV0LCBkaXNw
bGF5ZWQgd2hlbiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBsaW5rCisgICAgICAgICAgIC0gaW1h
Z2Ugc2hlZXQsIHdoZW4gdGhlIHRhcmdldCBlbGVtZW50IGlzIGFuIGltYWdlCisgICAgICAgICAg
IC0gZGF0YSBkZXRlY3RvciBzaGVldCB3aGVuIHRoZSB0YXJnZXQgaXMgYW4gZWxlbWVudAorICAg
ICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGRhdGEgZGV0ZWN0b3JzIGxpYnJhcnkuCisgICAg
ICAgIEJvdGggbGluayBhbmQgaW1hZ2Ugc2hlZXQgaGF2ZSBhIHNldCBvZiBkZWZhdWx0IGJ1dHRv
bnMsIHdoZXJlYXMKKyAgICAgICAgZGF0YWRldGVjdG9yIHNoZWV0IGluIG9ubHkgcG9wdWxhdGVk
IGJ5IGN1c3RvbSBhY3Rpb25zIHByb3ZpZGVkCisgICAgICAgIGJ5IGRhdGEgZGV0ZWN0b3JzLgor
ICAgICAgICBUaGUgbGluayBzaGVldCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYWN0
aW9uczoKKyAgICAgICAgICAgIC0gb3BlbiwgbmF2aWdhdGVzIHRvIHRoZSBVUkwKKyAgICAgICAg
ICAgIC0gY29weSwgY29waWVzIHRoZSBVUkwgdG8gdGhlIHBhc3RlYm9hcmQKKyAgICAgICAgICAg
IC0gYWRkIHRvIHJlYWRpbmcgbGlzdAorICAgICAgICBUaGUgaW1hZ2Ugc2hlZXQgcHJvdmlkZXMg
dGhlIGZvbGxvd2luZyBhY3Rpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgICAgICAgIHRoZSBp
bWFnZSBpcyBjb250YWluZWQgaW5zaWRlIGFuIGFuY2hvciBlbGVtZW50IG9yIG5vdC4KKyAgICAg
ICAgSWYgdGhlIGltYWdlIGlzIE5PVCBpbnNpZGUgYSBsaW5rIHRoZSBmb2xsb3dpbmcgYWN0aW9u
cyBhcmUgcHJvdmlkZWQ6CisgICAgICAgICAgICAtIGNvcHksIGNvcGllcyB0aGUgaW1hZ2UgdG8g
dGhlIHBhc3RlYm9hcmQKKyAgICAgICAgICAgIC0gc2F2ZSBpbWFnZSwgc2F2ZXMgdGhlIGltYWdl
IGluIHRoZSBwaG90byBsaWJyYXJ5CisgICAgICAgIEluc3RlYWQsIGlmIHRoZSBpbWFnZSBpcyBp
bnNpZGUgYW4gbGluazoKKyAgICAgICAgICAgIC0gb3BlbiwgbmF2aWdhdGVzIHRvIHRoZSBVUkwg
c3BjaWZpZWQgYnkgdGhlIGxpbmsKKyAgICAgICAgICAgIC0gY29weSwgY29waWVzIHRoZSBsaW5r
IFVSTCB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICAgICAgLSBzYXZlIGltYWdlLCBzYXZlcyB0
aGUgaW1hZ2UgaW4gdGhlIHBob3RvIGxpYnJhcnkKKyAgICAgICAgICAgIC0gYWRkIHRvIHJlYWRp
bmcgbGlzdCwgYWRkcyB0aGUgbGluayBVUkwgdG8gcmVhZGluZyBsaXN0LgorCisgICAgICAgICog
U2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOgorICAgICAg
ICAqIFNoYXJlZC9pb3MvV0tHZXN0dXJlVHlwZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2F2
ZUltYWdlVG9MaWJyYXJ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNo
ZWV0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQu
bW06IEFkZGVkLgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0IGluaXRXaXRoVmlldzpdKToKKyAg
ICAgICAgKC1bV0tBY3Rpb25TaGVldCBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hl
ZXQgcHJlc2VudFNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXQgcHJlc2VudFNoZWV0
RnJvbVJlY3Q6XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXQgZG9uZVdpdGhTaGVldF0pOgor
ICAgICAgICAoLVtXS0FjdGlvblNoZWV0IHdpbGxSb3RhdGVdKToKKyAgICAgICAgKC1bV0tBY3Rp
b25TaGVldCB1cGRhdGVTaGVldFBvc2l0aW9uXSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXQg
ZGlkUm90YXRlXSk6CisgICAgICAgICgtW1dLRWxlbWVudEFjdGlvbkluZm8gaW5pdFdpdGhJbmZv
OmxvY2F0aW9uOnRpdGxlOnJlY3Q6XSk6CisgICAgICAgICgtW1dLRWxlbWVudEFjdGlvbiBpbml0
V2l0aFRpdGxlOmFjdGlvbkhhbmRsZXI6dHlwZTpdKToKKyAgICAgICAgKC1bV0tFbGVtZW50QWN0
aW9uIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tFbGVtZW50QWN0aW9uIGN1c3RvbUVsZW1lbnRB
Y3Rpb25XaXRoVGl0bGU6YWN0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKGNvcHlFbGVtZW50KToK
KyAgICAgICAgKHNhdmVJbWFnZSk6CisgICAgICAgIChhZGRUb1JlYWRpbmdMaXN0KToKKyAgICAg
ICAgKCtbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOmN1c3Rv
bVRpdGxlOl0pOgorICAgICAgICAoK1tXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0
aW9uV2l0aFR5cGU6XSk6CisgICAgICAgICgtW1dLRWxlbWVudEFjdGlvbiBydW5BY3Rpb25XaXRo
RWxlbWVudEluZm86dmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlv
blNoZWV0QXNzaXN0YW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQubW06IEFkZGVkLgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0
QXNzaXN0YW50IGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lz
dGFudCBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2V0UGFn
ZTpXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHN1cGVydmll
d0ZvclNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgX3ByZXNlbnRh
dGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6aW5Ib3N0VmlldzpdKToKKyAgICAgICAgKC1bV0tB
Y3Rpb25TaGVldEFzc2lzdGFudCBob3N0Vmlld0ZvclNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0
aW9uU2hlZXRBc3Npc3RhbnQgaW5pdGlhbFByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hl
ZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBwcmVzZW50YXRpb25SZWN0
SW5Ib3N0Vmlld0ZvclNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQg
cHJlc2VudFNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgYWN0aW9u
U2hlZXQ6Y2xpY2tlZEJ1dHRvbkF0SW5kZXg6XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQgdXBkYXRlU2hlZXRQb3NpdGlvbl0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0
QXNzaXN0YW50IF9jcmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9uczpzaG93TGlua1RpdGxlOl0p
OgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dJbWFnZVNoZWV0XSk6Cisg
ICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0xpbmtTaGVldF0pOgorICAgICAg
ICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKToKKyAg
ICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBjbGVhbnVwU2hlZXRdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBpbml0V2l0aEZyYW1lOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNldFBhZ2U6V2ViS2l0Ojpd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX3Nob3dJbWFnZVNoZWV0XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9zaG93TGlua1NoZWV0XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IF9zaG93RGF0YURldGVjdG9yc1NoZWV0XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IF9hY3Rpb25Gb3JMb25nUHJlc3NdKToKKyAgICAgICAgKC1bV0tJbnRl
cmFjdGlvblZpZXcgX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb25dKToKKyAgICAgICAgKC1bV0tJ
bnRlcmFjdGlvblZpZXcgX2xvbmdQcmVzc1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50
ZXJhY3Rpb25WaWV3IF9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOl0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBfcGVyZm9ybUFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tJbnRl
cmFjdGlvblZpZXcgX3VwZGF0ZUFjY2Vzc29yeV0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6c3RvcEludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpwZXJmb3JtQWN0aW9uT25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzYXZlSW1hZ2VUb0xpYnJhcnkpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6Y29udGFpbmluZ0xpbmtFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0
SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpzdG9wSW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
QWN0aW9uT25FbGVtZW50KToKKwogMjAxNC0wMS0zMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQyIFZpZXcgR2VzdHVyZXM6IENyYXNoIHdo
ZW4gcGluY2gtem9vbWluZyBvbiBhIHBhZ2UgdGhhdCBpcyBqdXN0IGEgZnJhbWVzZXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsOSBAQCB2b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OjplCiAgICAgZW5jb2RlciA8PCBub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOwogICAgIGVu
Y29kZXIgPDwgY2xpY2thYmxlRWxlbWVudE5hbWU7CiAgICAgZW5jb2RlciA8PCB1cmw7CisgICAg
ZW5jb2RlciA8PCB0aXRsZTsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVu
Y29kZXIgPDwgYm91bmRzOwogfQogCiBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uJiByZXN1bHQpCkBAIC01NSw5ICs1NywxNSBAQCBib29sIEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOjpkCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQudXJsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQudGl0bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3Rpb25SZWN0cykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJvdW5kcykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0ludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDkgQEAgc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIAogICAgIGJvb2wg
bm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKICAgICBTdHJpbmcgY2xpY2thYmxlRWxlbWVu
dE5hbWU7CiAgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgdGl0bGU7CiAgICAgVmVjdG9yPFdl
YkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgIFdlYkNvcmU6OkludFJl
Y3QgYm91bmRzOwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25z
dDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBJbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L2lvcy9XS0dlc3R1cmVUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9pb3MvV0tHZXN0dXJlVHlwZXMuaAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL2lvcy9XS0dlc3R1cmVUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCwxMSBAQCB0eXBlZGVmIGVudW0gewogICAgIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVJlY29n
bml6ZWQgPSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZAogfSBXS0dlc3R1cmVSZWNvZ25p
emVyU3RhdGU7CiAKK3R5cGVkZWYgZW51bSB7CisgICAgV0tTaGVldEFjdGlvbkNvcHksCisgICAg
V0tTaGVldEFjdGlvblNhdmVJbWFnZQorfSBXS1NoZWV0QWN0aW9uczsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKICNlbmRpZiAvLyBXS0dlc3R1cmVUeXBlc19oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw2ICsyNDks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkRpZENoYW5nZSgpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9zaXRp
b25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPikgPSAwOwogI2VuZGlmCiAKICAgICAvLyBBdXhpbGlh
cnkgQ2xpZW50IENyZWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw2ICs0NDksMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKICAgICB2b2lkIGdldFBvc2l0aW9uSW5mb3JtYXRpb24o
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
biYpOwogICAgIHZvaWQgcmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRp
b24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0b3BJbnRlcmFjdGlvbigp
OworICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pOworICAg
IHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBpbWFn
ZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VTaXplKTsKICNlbmRpZgogCiAgICAgY29uc3QgRWRpdG9y
U3RhdGUmIGVkaXRvclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFj
ayhTdHJpbmcgYmVmb3JlVGV4dCwgU3RyaW5nIG1hcmtlZFRleHQsIFN0cmluZyBzZWxlY3RlZFRl
eHQsIFN0cmluZyBhZnRlclRleHQsIHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgSW50ZXJwcmV0S2V5RXZlbnQoV2ViS2l0OjpFZGl0
b3JTdGF0ZSBzdGF0ZSwgYm9vbCBpc0NoYXJFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKICAgICBE
aWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKQorICAgIFNhdmVJbWFnZVRvTGlicmFyeShXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKICNlbmRpZgogI2lm
IFBMQVRGT1JNKEdUSykKICAgICBQcmludEZpbmlzaGVkQ2FsbGJhY2soV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBlcnJvciwgdWludDY0X3QgY2FsbGJhY2tJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNp
b24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkRpZENoYW5nZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jiwg
Ym9vbCBpc0NoYXJFdmVudCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uSW5m
b3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPik7CiAKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDE2MzE3
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMSBAQAogI2ltcG9ydCAiV0tDb250ZW50
Vmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW1wb3J0
ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCisjaW1wb3J0IDxVSUtpdC9VSUltYWdlUGlja2VyQ29u
dHJvbGxlcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVdlYlRvdWNoRXZlbnRzR2VzdHVy
ZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CiAKIEBpbnRlcmZhY2UgVUlWaWV3IChJUEkpCiAtIChVSVNjcm9sbFZpZXcgKilfc2Ny
b2xsZXI7CkBAIC0yMDcsNiArMjA5LDEyIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnBvc2l0aW9u
SW5mb3JtYXRpb24KICAgICBbbV92aWV3IF9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOmlu
Zm9dOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyKQoreworICAgIFJldGFpblB0cjxOU0RhdGE+
IGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKKyAgICBVSUltYWdlRGF0
YVdyaXRlVG9TYXZlZFBob3Rvc0FsYnVtKGltYWdlRGF0YS5nZXQoKSwgbmlsLCBOVUxMLCBOVUxM
KTsKK30KKwogYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0
b3IoY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
VUlLaXQvVUlBY3Rpb25TaGVldC5oPgorI2ltcG9ydCA8VUlLaXQvVUlQb3BvdmVyQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0RlY2xhcmF0aW9uU3BlY2lmaWVycy5oPgorCitAcHJv
dG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOworQGNsYXNzIFdLSW50ZXJhY3Rpb25WaWV3Owor
CitAaW50ZXJmYWNlIFdLQWN0aW9uU2hlZXQgOiBVSUFjdGlvblNoZWV0CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGlkIDxXS0FjdGlvblNoZWV0RGVsZWdhdGU+IHNoZWV0RGVsZWdh
dGU7CitAcHJvcGVydHkgKG5vbmF0b21pYykgVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb24gYXJyb3dE
aXJlY3Rpb25zOworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7
CistICh2b2lkKWRvbmVXaXRoU2hlZXQ7CistIChCT09MKXByZXNlbnRTaGVldDsKKy0gKEJPT0wp
cHJlc2VudFNoZWV0RnJvbVJlY3Q6KENHUmVjdClwcmVzZW50YXRpb25SZWN0OworLSAodm9pZCl1
cGRhdGVTaGVldFBvc2l0aW9uOworQGVuZAorCisKK0Bwcm90b2NvbCBXS0FjdGlvblNoZWV0RGVs
ZWdhdGU8VUlBY3Rpb25TaGVldERlbGVnYXRlPgorQHJlcXVpcmVkCistIChVSVZpZXcgKilob3N0
Vmlld0ZvclNoZWV0OworLSAoQ0dSZWN0KWluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmll
d0ZvclNoZWV0OworLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQ7
CitAZW5kCisKKy8vIEVsZW1lbnRzIHRvIGRlc2NyaWJlIGFjdGlvbiBzaGVldCBjb250ZW50Lgor
CitXS19FWFBPUlQgQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb25JbmZvIDogTlNPYmplY3QKKwor
LSAoV0tFbGVtZW50QWN0aW9uSW5mbyAqKSBpbml0V2l0aEluZm86KE5TVVJMICopdXJsIGxvY2F0
aW9uOihDR1BvaW50KWxvY2F0aW9uIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHJlY3Q6KENHUmVj
dClyZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1BvaW50IGludGVyYWN0
aW9uTG9jYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVVJMICp1cmw7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IGJvdW5kaW5nUmVjdDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dJbWFnZVJlZiBzbmFwc2hvdDsKK0BlbmQKKwordHlw
ZWRlZiB2b2lkICheV0tFbGVtZW50QWN0aW9uSGFuZGxlcikoV0tFbGVtZW50QWN0aW9uSW5mbyAq
KTsKK3R5cGVkZWYgdm9pZCAoXldLRWxlbWVudEFjdGlvbkhhbmRsZXJJbnRlcm5hbCkoV0tJbnRl
cmFjdGlvblZpZXcgKiwgV0tFbGVtZW50QWN0aW9uSW5mbyAqKTsKKwordHlwZWRlZiBlbnVtIHsK
KyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ3VzdG9tID0gMCwKKyAgICBXS0VsZW1lbnRBY3Rpb25U
eXBlT3BlbiwKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ29weSwKKyAgICBXS0VsZW1lbnRBY3Rp
b25UeXBlU2F2ZUltYWdlLAorICAgIFdLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0
LAorfSBXS0VsZW1lbnRBY3Rpb25UeXBlOworCitXS19FWFBPUlQgQGludGVyZmFjZSBXS0VsZW1l
bnRBY3Rpb24gOiBOU09iamVjdCB7CisgICAgTlNTdHJpbmcgKl90aXRsZTsKKyAgICBXS0VsZW1l
bnRBY3Rpb25IYW5kbGVySW50ZXJuYWwgX2FjdGlvbkhhbmRsZXI7CisgICAgV0tFbGVtZW50QWN0
aW9uVHlwZSBfdHlwZTsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0Vs
ZW1lbnRBY3Rpb25UeXBlIHR5cGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5T
U3RyaW5nKiB0aXRsZTsKKworKyAoV0tFbGVtZW50QWN0aW9uICopY3VzdG9tRWxlbWVudEFjdGlv
bldpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rp
b25IYW5kbGVyKWhhbmRsZXI7CisrIChXS0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1lbnRB
Y3Rpb25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlOworKyAoV0tFbGVtZW50QWN0
aW9uICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUp
dHlwZSBjdXN0b21UaXRsZTooTlNTdHJpbmcgKil0aXRsZTsKKy0gKHZvaWQpcnVuQWN0aW9uV2l0
aEVsZW1lbnRJbmZvOihXS0VsZW1lbnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0
aW9uVmlldyAqKXZpZXc7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLQWN0aW9uU2hlZXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIldLQWN0aW9uU2hlZXQuaCIKKyNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCisjaW1wb3J0
ICJXS0ludGVyYWN0aW9uVmlldy5oIgorCisjaW1wb3J0IDxTYWZhcmlTZXJ2aWNlcy9TU1JlYWRp
bmdMaXN0Lmg+CisKKyNpbXBvcnQgPFVJS2l0L1VJQWN0aW9uU2hlZXRfUHJpdmF0ZS5oPgorI2lt
cG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisjaW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2YXRlLmg+
CisKKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1NPRlRf
TElOS19GUkFNRVdPUksoU2FmYXJpU2VydmljZXMpOworU09GVF9MSU5LX0NMQVNTKFNhZmFyaVNl
cnZpY2VzLCBTU1JlYWRpbmdMaXN0KTsKKworQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb24oUHJp
dmF0ZSkKKy0gKHZvaWQpX3J1bkFjdGlvbldpdGhFbGVtZW50OihOU1VSTCAqKXRhcmdldFVSTCBk
b2N1bWVudFZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldyBpbnRlcmFjdGlvbkxvY2F0aW9u
OihDR1BvaW50KWludGVyYWN0aW9uTG9jYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S0FjdGlvblNoZWV0IHsKKyAgICBpZCA8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBfc2hlZXREZWxl
Z2F0ZTsKKyAgICBpZCA8VUlBY3Rpb25TaGVldERlbGVnYXRlPiBfZGVsZWdhdGVXaGlsZVJvdGF0
aW5nOworICAgIFVJUG9wb3ZlckFycm93RGlyZWN0aW9uIF9hcnJvd0RpcmVjdGlvbnM7CisgICAg
Qk9PTCBfaXNSb3RhdGluZzsKKyAgICBXS0ludGVyYWN0aW9uVmlldyAqX3ZpZXc7Cit9CisKKy0g
KGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3Cit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBfYXJyb3dEaXJlY3Rpb25zID0gVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb25Bbnk7CisgICAgX3Zp
ZXcgPSB2aWV3OworCisgICAgaWYgKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2Vy
SW50ZXJmYWNlSWRpb21QaG9uZSkgeworICAgICAgICAvLyBPbmx5IGlQYWRzIHN1cHBvcnQgcG9w
b3ZlcnMgdGhhdCByb3RhdGUuIFVJQWN0aW9uU2hlZXRzIGFjdHVhbGx5IGJsb2NrIHJvdGF0aW9u
IG9uIGlQaG9uZS9pUG9kIFRvdWNoCisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpjZW50
ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgICAgIFtjZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2lsbFJvdGF0ZSkgbmFtZTpV
SVdpbmRvd1dpbGxSb3RhdGVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtjZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkUm90YXRlKSBuYW1lOlVJ
V2luZG93RGlkUm90YXRlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIH0KKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworICAgIFtOU09iamVj
dCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07CisKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKyNwcmFnbWEgbWFyayBzaGVldCBwcmVzZW50YXRpb24gY29k
ZQorCistIChCT09MKXByZXNlbnRTaGVldAoreworICAgIC8vIENhbGN1bGF0ZSB0aGUgcHJlc2Vu
dGF0aW9uIHJlY3QganVzdCBiZWZvcmUgc2hvd2luZy4KKyAgICBDR1JlY3QgcHJlc2VudGF0aW9u
UmVjdCA9IENHUmVjdFplcm87CisgICAgaWYgKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0g
VUlVc2VySW50ZXJmYWNlSWRpb21QaG9uZSkgeworICAgICAgICBwcmVzZW50YXRpb25SZWN0ID0g
W19zaGVldERlbGVnYXRlIGluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0
XTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkocHJlc2VudGF0aW9uUmVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgcmV0dXJuIFtzZWxmIHByZXNlbnRTaGVldEZy
b21SZWN0OnByZXNlbnRhdGlvblJlY3RdOworfQorCistIChCT09MKXByZXNlbnRTaGVldEZyb21S
ZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdAoreworICAgIFVJVmlldyAqdmlldyA9IFtfc2hl
ZXREZWxlZ2F0ZSBob3N0Vmlld0ZvclNoZWV0XTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybiBOTzsKKworICAgIGlmIChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlcklu
dGVyZmFjZUlkaW9tUGhvbmUpIHsKKyAgICAgICAgW3NlbGYgcHJlc2VudEZyb21SZWN0OnByZXNl
bnRhdGlvblJlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgaW5WaWV3OnZpZXcKKyAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uOl9hcnJvd0RpcmVjdGlvbnMKKyAgICBhbGxvd0ludGVyYWN0
aW9uV2l0aFZpZXdzOm5pbAorICAgICAgICAgICAgICBiYWNrZ3JvdW5kU3R5bGU6VUlQb3BvdmVy
QmFja2dyb3VuZFN0eWxlRGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6WUVT
XTsKKyAgICB9IGVsc2UKKyAgICAgICAgW3NlbGYgc2hvd0luVmlldzp2aWV3XTsgCisKKyAgICBy
ZXR1cm4gWUVTOworfQorCistICh2b2lkKWRvbmVXaXRoU2hlZXQKK3sKKyAgICBfZGVsZWdhdGVX
aGlsZVJvdGF0aW5nID0gbmlsOworCisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRSb3RhdGUpIG9i
amVjdDpuaWxdOworfQorCisjcHJhZ21hIG1hcmsgcm90YXRpb24gaGFuZGxpbmcgY29kZQorCist
ICh2b2lkKXdpbGxSb3RhdGUKK3sKKyAgICBBU1NFUlQoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00o
KSAhPSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKTsKKworICAgIGlmIChfaXNSb3RhdGluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2xlYXIgdGhlIGRlbGVnYXRlIHNvIHRoYXQgdGhl
IG1ldGhvZDoKKyAgICAvLyAtICh2b2lkKWFjdGlvblNoZWV0OihVSUFjdGlvblNoZWV0ICopYWN0
aW9uU2hlZXQgZGlkRGlzbWlzc1dpdGhCdXR0b25JbmRleDooTlNJbnRlZ2VyKWJ1dHRvbkluZGV4
CisgICAgLy8gaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBBY3Rpb25TaGVldCBpcyBkaXNtaXNzZWQg
YmVsb3cuIERlbGVnYXRlIGlzIHJlLWluc3RhdGVkIGFmdGVyIHJvdGF0aW9uLgorICAgIF9kZWxl
Z2F0ZVdoaWxlUm90YXRpbmcgPSBbc2VsZiBkZWxlZ2F0ZV07CisgICAgc2VsZi5kZWxlZ2F0ZSA9
IG5pbDsKKyAgICBfaXNSb3RhdGluZyA9IFlFUzsKKworICAgIFtzZWxmIGRpc21pc3NXaXRoQ2xp
Y2tlZEJ1dHRvbkluZGV4OltzZWxmIGNhbmNlbEJ1dHRvbkluZGV4XSBhbmltYXRlZDpOT107Cit9
CisKKy0gKHZvaWQpdXBkYXRlU2hlZXRQb3NpdGlvbgoreworICAgIEFTU0VSVChVSV9VU0VSX0lO
VEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpOworCisgICAgaWYg
KCFfaXNSb3RhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgX2lzUm90YXRpbmcgPSBOTzsK
KyAgICAKKyAgICBDR1JlY3QgcHJlc2VudGF0aW9uUmVjdCA9IFtfc2hlZXREZWxlZ2F0ZSBwcmVz
ZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0XTsKKyAgICBpZiAoIUNHUmVjdElzRW1wdHko
cHJlc2VudGF0aW9uUmVjdCkpIHsKKyAgICAgICAgLy8gUmUtcHJlc2VudCB0aGUgcG9wb3ZlciBv
bmx5IGlmIHdlIGFyZSBzdGlsbCBwb2ludGluZyB0byBjb250ZW50IG9uc2NyZWVuLgorICAgICAg
ICBDR1JlY3QgaW50ZXJzZWN0aW9uID0gQ0dSZWN0SW50ZXJzZWN0aW9uKFtbX3NoZWV0RGVsZWdh
dGUgaG9zdFZpZXdGb3JTaGVldF0gYm91bmRzXSwgcHJlc2VudGF0aW9uUmVjdCk7CisgICAgICAg
IGlmICghQ0dSZWN0SXNFbXB0eShpbnRlcnNlY3Rpb24pKSB7CisgICAgICAgICAgICBzZWxmLmRl
bGVnYXRlID0gX2RlbGVnYXRlV2hpbGVSb3RhdGluZzsKKyAgICAgICAgICAgIFtzZWxmIHByZXNl
bnRTaGVldEZyb21SZWN0OmludGVyc2VjdGlvbl07CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQ2FuY2VsIHRoZSBzaGVldCBhcyB0aGVyZSBpcyBl
aXRoZXIgbm8gdmlldyBvciB0aGUgY29udGVudCBoYXMgbm93IG1vdmVkIG9mZiBzY3JlZW4uCisg
ICAgW19kZWxlZ2F0ZVdoaWxlUm90YXRpbmcgYWN0aW9uU2hlZXQ6c2VsZiBjbGlja2VkQnV0dG9u
QXRJbmRleDpbc2VsZiBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKWRpZFJvdGF0
ZQoreworICAgIEFTU0VSVChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVy
ZmFjZUlkaW9tUGhvbmUpOworCisgICAgW192aWV3IF91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9u
XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tFbGVtZW50QWN0aW9uSW5mbyAgewor
ICAgIENHUG9pbnQgX2ludGVyYWN0aW9uTG9jYXRpb247CisgICAgTlNVUkwgKl91cmw7CisgICAg
TlNTdHJpbmcgKl90aXRsZTsKKyAgICBDR1JlY3QgX2JvdW5kaW5nUmVjdDsKKyAgICBDR0ltYWdl
UmVmIF9zbmFwc2hvdDsKK30KKworLSAoV0tFbGVtZW50QWN0aW9uSW5mbyAqKSBpbml0V2l0aElu
Zm86KE5TVVJMICopdXJsIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIHRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlIHJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgX3VybCA9IHVybDsKKyAgICBfaW50
ZXJhY3Rpb25Mb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIF90aXRsZSA9IHRpdGxlOworICAgIF9i
b3VuZGluZ1JlY3QgPSByZWN0OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLRWxlbWVudEFjdGlvbiAKKworLSAoaWQpaW5pdFdpdGhUaXRsZTooTlNT
dHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJu
YWwpaGFuZGxlciB0eXBlOihXS0VsZW1lbnRBY3Rpb25UeXBlKXR5cGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfdGl0bGUgPSBb
dGl0bGUgcmV0YWluXTsKKyAgICBfdHlwZSA9IHR5cGU7CisgICAgX2FjdGlvbkhhbmRsZXIgPSBC
bG9ja19jb3B5KGhhbmRsZXIpOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbX3RpdGxlIHJlbGVhc2VdOworICAgIFtfYWN0aW9uSGFuZGxlciByZWxlYXNl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKysgKFdLRWxlbWVudEFjdGlvbiAqKWN1c3Rv
bUVsZW1lbnRBY3Rpb25XaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgYWN0aW9uSGFuZGxlcjoo
V0tFbGVtZW50QWN0aW9uSGFuZGxlciloYW5kbGVyCit7CisgICAgcmV0dXJuIFtbW3NlbGYgYWxs
b2NdIGluaXRXaXRoVGl0bGU6dGl0bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9u
SGFuZGxlcjpeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICph
Y3Rpb25JbmZvKSB7IGhhbmRsZXIoYWN0aW9uSW5mbyk7IH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlQ3VzdG9tXSBhdXRvcmVsZWFz
ZV07Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlFbGVtZW50KFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3
KQoreworICAgIFt2aWV3IF9wZXJmb3JtQWN0aW9uOldlYktpdDo6V0tTaGVldEFjdGlvbkNvcHld
OworfQorCitzdGF0aWMgdm9pZCBzYXZlSW1hZ2UoV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcpCit7
CisgICAgW3ZpZXcgX3BlcmZvcm1BY3Rpb246V2ViS2l0OjpXS1NoZWV0QWN0aW9uU2F2ZUltYWdl
XTsKK30KKworc3RhdGljIHZvaWQgYWRkVG9SZWFkaW5nTGlzdChOU1VSTCAqdGFyZ2V0VVJMLCBO
U1N0cmluZyAqdGl0bGUpCit7CisgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFt0YXJnZXRVUkwg
YWJzb2x1dGVTdHJpbmddOworICAgIGlmICghdGl0bGUgfHwgW3RpdGxlIGxlbmd0aF0gPT0gMCkK
KyAgICAgICAgdGl0bGUgPSB1cmxTdHJpbmc7CisKKyAgICBbW2dldFNTUmVhZGluZ0xpc3RDbGFz
cygpIGRlZmF1bHRSZWFkaW5nTGlzdF0gYWRkUmVhZGluZ0xpc3RJdGVtV2l0aFVSTDp0YXJnZXRV
UkwgdGl0bGU6dGl0bGUgcHJldmlld1RleHQ6bmlsIGVycm9yOm5pbF07Cit9CisKKysgKFdLRWxl
bWVudEFjdGlvbiAqKXN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOihXS0VsZW1lbnRBY3Rp
b25UeXBlKXR5cGUgY3VzdG9tVGl0bGU6KE5TU3RyaW5nICopY3VzdG9tVGl0bGUKK3sKKyAgICBO
U1N0cmluZyAqdGl0bGU7CisgICAgV0tFbGVtZW50QWN0aW9uSGFuZGxlckludGVybmFsIGhhbmRs
ZXI7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlw
ZUNvcHk6CisgICAgICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkdfS0VZKCJDb3B5IiwgIkNv
cHkgQWN0aW9uU2hlZXQgTGluayIsICJUaXRsZSBmb3IgQ29weSBMaW5rIG9yIEltYWdlIGFjdGlv
biBidXR0b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2
aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CisgICAgICAgICAgICAgICAg
Y29weUVsZW1lbnQodmlldyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZU9wZW46CisgICAgICAgICAgICB0aXRsZSA9
IFdFQl9VSV9TVFJJTkdfS0VZKCJPcGVuIiwgIk9wZW4gQWN0aW9uU2hlZXQgTGluayIsICJUaXRs
ZSBmb3IgT3BlbiBMaW5rIGFjdGlvbiBidXR0b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBe
KFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZv
KSB7CisgICAgICAgICAgICAgICAgW3ZpZXcgX2F0dGVtcHRDbGlja0F0TG9jYXRpb246YWN0aW9u
SW5mby5pbnRlcmFjdGlvbkxvY2F0aW9uXTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXS0VsZW1lbnRBY3Rpb25UeXBlU2F2ZUltYWdlOgorICAgICAg
ICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiU2F2ZSBJbWFnZSIsICJTYXZlIEltYWdl
IiwgIlRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24iKTsKKyAgICAgICAgICAgIGhh
bmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICph
Y3Rpb25JbmZvKSB7CisgICAgICAgICAgICAgICAgc2F2ZUltYWdlKHZpZXcpOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdLRWxlbWVudEFjdGlvblR5
cGVBZGRUb1JlYWRpbmdMaXN0OgorICAgICAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HKCJB
ZGQgdG8gUmVhZGluZyBMaXN0IiwgIlRpdGxlIGZvciBBZGQgdG8gUmVhZGluZyBMaXN0IGFjdGlv
biBidXR0b24iKTsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2
aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CisgICAgICAgICAgICAgICAg
YWRkVG9SZWFkaW5nTGlzdChhY3Rpb25JbmZvLnVybCwgYWN0aW9uSW5mby50aXRsZSk7CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0
OkAiVGhlcmUgaXMgbm8gc3RhbmRhcmQgd2ViIGVsZW1lbnQgYWN0aW9uIG9mIHR5cGUgJWQuIiwg
dHlwZV07CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICByZXR1cm4gW1tbV0tF
bGVtZW50QWN0aW9uIGFsbG9jXSBpbml0V2l0aFRpdGxlOihjdXN0b21UaXRsZSA/IGN1c3RvbVRp
dGxlIDogdGl0bGUpIGFjdGlvbkhhbmRsZXI6aGFuZGxlciB0eXBlOnR5cGVdIGF1dG9yZWxlYXNl
XTsKK30KKworKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5
cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZQoreworICAgIHJldHVybiBbc2VsZiBzdGFuZGFy
ZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTp0eXBlIGN1c3RvbVRpdGxlOm5pbF07Cit9CisKKy0gKHZv
aWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihXS0VsZW1lbnRBY3Rpb25JbmZvICopaW5mbyB2
aWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKK3sKKyAgICBfYWN0aW9uSGFuZGxlcih2aWV3
LCBpbmZvKTsKK30KKworQGVuZAorCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0QXNz
aXN0YW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgIldLQWN0aW9uU2hlZXQuaCIKKworI2ltcG9ydCA8VUlLaXQvVUlBY3Rpb25TaGVldC5o
PgorI2ltcG9ydCA8VUlLaXQvVUlQb3BvdmVyQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViS2l0
Mi9XS0RlY2xhcmF0aW9uU3BlY2lmaWVycy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
CitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOworQGNsYXNzIFdLSW50ZXJhY3Rpb25W
aWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK30KKworQGlu
dGVyZmFjZSBXS0FjdGlvblNoZWV0QXNzaXN0YW50IDogTlNPYmplY3QgPFdLQWN0aW9uU2hlZXRE
ZWxlZ2F0ZT4KKworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7
CistICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2U7
CistICh2b2lkKXNob3dMaW5rU2hlZXQ7CistICh2b2lkKXNob3dJbWFnZVNoZWV0OworLSAodm9p
ZClzaG93RGF0YURldGVjdG9yc1NoZWV0OworLSAodm9pZCljbGVhbnVwU2hlZXQ7CistICh2b2lk
KXVwZGF0ZVNoZWV0UG9zaXRpb247CitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9u
U2hlZXRBc3Npc3RhbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2lt
cG9ydCAiV0tBY3Rpb25TaGVldC5oIgorI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFzc2lzdGFudC5o
IgorI2ltcG9ydCAiV0tJbnRlcmFjdGlvblZpZXcuaCIKKworI2ltcG9ydCA8VENDL1RDQy5oPgor
I2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8U2FmYXJpU2VydmljZXMvU1NSZWFkaW5nTGlzdC5oPgorCisjaW1wb3J0IDxVSUtpdC9VSUFj
dGlvblNoZWV0X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgorI2ltcG9ydCA8
VUlLaXQvVUlWaWV3Q29udHJvbGxlcl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdpbmRv
d19Qcml2YXRlLmg+CisKKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNV
UkxFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitTT0ZUX0xJTktf
RlJBTUVXT1JLKFNhZmFyaVNlcnZpY2VzKQorU09GVF9MSU5LX0NMQVNTKFNhZmFyaVNlcnZpY2Vz
LCBTU1JlYWRpbmdMaXN0KQorCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoVENDKQorU09G
VF9MSU5LKFRDQywgVENDQWNjZXNzUHJlZmxpZ2h0LCBUQ0NBY2Nlc3NQcmVmbGlnaHRSZXN1bHQs
IChDRlN0cmluZ1JlZiBzZXJ2aWNlLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyksIChzZXJ2aWNl
LCBvcHRpb25zKSkKK1NPRlRfTElOS19DT05TVEFOVChUQ0MsIGtUQ0NTZXJ2aWNlUGhvdG9zLCBD
RlN0cmluZ1JlZikKKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKERhdGFEZXRlY3RvcnNV
SSkKK1NPRlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxl
cikKKworQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb24oUHJpdmF0ZSkKKy0gKHZvaWQpX3J1bkFj
dGlvbldpdGhFbGVtZW50OihOU1VSTCAqKXRhcmdldFVSTCBkb2N1bWVudFZpZXc6KFdLSW50ZXJh
Y3Rpb25WaWV3ICopdmlldyBpbnRlcmFjdGlvbkxvY2F0aW9uOihDR1BvaW50KWludGVyYWN0aW9u
TG9jYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0FjdGlvblNoZWV0QXNzaXN0YW50
IHsKKyAgICBSZXRhaW5QdHI8V0tBY3Rpb25TaGVldD4gX2ludGVyYWN0aW9uU2hlZXQ7CisgICAg
UmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsKKyAgICBSZXRhaW5QdHI8TlNBcnJh
eT4gX2VsZW1lbnRBY3Rpb25zOworICAgIFdLSW50ZXJhY3Rpb25WaWV3ICpfdmlldzsKK30KKwor
LSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKK3sKKyAgICBfdmll
dyA9IHZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtzZWxmIGNsZWFudXBTaGVldF07CisgICAgX3BhZ2UgPSBudWxscHRyOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRQYWdlOihQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFn
ZVByb3h5PilwYWdlCit7CisgICAgX3BhZ2UgPSBwYWdlOworfQorCistIChVSVZpZXcgKilzdXBl
cnZpZXdGb3JTaGVldAoreworICAgIFVJVmlldyAqdmlldyA9IFtfdmlldyB3aW5kb3ddOworCisg
ICAgLy8gRklYTUU6IFdlYktpdCBoYXMgYSBkZWxlZ2F0ZSB0byByZXRyaWV2ZSB0aGUgc3VwZXJ2
aWV3IGZvciB0aGUgaW1hZ2Ugc2hlZXQgKHN1cGVydmlld0ZvckltYWdlU2hlZXRGb3JXZWJWaWV3
KQorICAgIC8vIERvIHdlIG5lZWQgaXQgaW4gV0syPworCisgICAgLy8gRmluZCB0aGUgdG9wIG1v
c3QgdmlldyB3aXRoIGEgdmlldyBjb250cm9sbGVyCisgICAgVUlWaWV3Q29udHJvbGxlciAqY29u
dHJvbGxlciA9IG5pbDsKKyAgICBVSVZpZXcgKmN1cnJlbnRWaWV3ID0gX3ZpZXc7CisgICAgd2hp
bGUgKGN1cnJlbnRWaWV3KSB7CisgICAgICAgIFVJVmlld0NvbnRyb2xsZXIgKmFDb250cm9sbGVy
ID0gW1VJVmlld0NvbnRyb2xsZXIgdmlld0NvbnRyb2xsZXJGb3JWaWV3OmN1cnJlbnRWaWV3XTsK
KyAgICAgICAgaWYgKGFDb250cm9sbGVyKQorICAgICAgICAgICAgY29udHJvbGxlciA9IGFDb250
cm9sbGVyOworCisgICAgICAgIGN1cnJlbnRWaWV3ID0gW2N1cnJlbnRWaWV3IHN1cGVydmlld107
CisgICAgfQorICAgIGlmIChjb250cm9sbGVyKQorICAgICAgICB2aWV3ID0gY29udHJvbGxlci52
aWV3OworCisgICAgcmV0dXJuIHZpZXc7Cit9CisKKy0gKENHUmVjdClfcHJlc2VudGF0aW9uUmVj
dEZvclNoZWV0R2l2ZW5Qb2ludDooQ0dQb2ludClwb2ludCBpbkhvc3RWaWV3OihVSVZpZXcgKilo
b3N0VmlldworeworICAgIENHUG9pbnQgcHJlc2VudGF0aW9uUG9pbnQgPSBbaG9zdFZpZXcgY29u
dmVydFBvaW50OnBvaW50IGZyb21WaWV3Ol92aWV3XTsKKyAgICBDR1JlY3QgcHJlc2VudGF0aW9u
UmVjdCA9IENHUmVjdE1ha2UocHJlc2VudGF0aW9uUG9pbnQueCwgcHJlc2VudGF0aW9uUG9pbnQu
eSwgMS4wLCAxLjApOworCisgICAgcmV0dXJuIENHUmVjdEluc2V0KHByZXNlbnRhdGlvblJlY3Qs
IC0yMi4wLCAtMjIuMCk7Cit9CisKKy0gKFVJVmlldyAqKWhvc3RWaWV3Rm9yU2hlZXQKK3sKKyAg
ICByZXR1cm4gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdOworfQorCistIChDR1JlY3QpaW5pdGlh
bFByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQKK3sKKyAgICBVSVZpZXcgKnZpZXcg
PSBbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF07CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1
cm4gQ0dSZWN0WmVybzsKKworICAgIHJldHVybiBbc2VsZiBfcHJlc2VudGF0aW9uUmVjdEZvclNo
ZWV0R2l2ZW5Qb2ludDpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnBvaW50IGluSG9zdFZpZXc6
dmlld107CisKK30KKworLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hl
ZXQKK3sKKyAgICBVSVZpZXcgKnZpZXcgPSBbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF07CisgICAg
aWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKworICAgIENHUmVjdCBib3Vu
ZGluZ1JlY3QgPSBfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLmJvdW5kczsKKyAgICBDR1BvaW50
IGZyb21Qb2ludCA9IF92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24ucG9pbnQ7CisKKyAgICAvLyBG
SVhNRTogV2UgbXVzdCBhZGp1c3Qgb3VyIHByZXNlbnRhdGlvbiBwb2ludCB0byB0YWtlIGludG8g
YWNjb3VudCBhIGNoYW5nZSBpbiBkb2N1bWVudCBzY2FsZS4KKworICAgIC8vIFRlc3QgdG8gc2Vl
IGlmIHdlIGFyZSBzdGlsbCB3aXRoaW4gdGhlIHRhcmdldCBub2RlIGFzIGl0IG1heSBoYXZlIG1v
dmVkIGFmdGVyIHJvdGF0aW9uLgorICAgIGlmICghQ0dSZWN0Q29udGFpbnNQb2ludChib3VuZGlu
Z1JlY3QsIGZyb21Qb2ludCkpCisgICAgICAgIGZyb21Qb2ludCA9IENHUG9pbnRNYWtlKENHUmVj
dEdldE1pZFgoYm91bmRpbmdSZWN0KSwgQ0dSZWN0R2V0TWlkWShib3VuZGluZ1JlY3QpKTsKKwor
ICAgIHJldHVybiBbc2VsZiBfcHJlc2VudGF0aW9uUmVjdEZvclNoZWV0R2l2ZW5Qb2ludDpmcm9t
UG9pbnQgaW5Ib3N0Vmlldzp2aWV3XTsKK30KKworLSAoQk9PTClwcmVzZW50U2hlZXQKK3sKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIHByZXNlbnRhdGlvbiByZWN0IGp1c3QgYmVmb3JlIHNob3dpbmcu
CisgICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBDR1JlY3RaZXJvOworICAgIGlmIChVSV9V
U0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpIHsKKyAg
ICAgICAgcHJlc2VudGF0aW9uUmVjdCA9IFtzZWxmIGluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5I
b3N0Vmlld0ZvclNoZWV0XTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkocHJlc2VudGF0aW9u
UmVjdCkpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgcmV0dXJuIFtfaW50
ZXJhY3Rpb25TaGVldCBwcmVzZW50U2hlZXRGcm9tUmVjdDpwcmVzZW50YXRpb25SZWN0XTsKK30K
KworLSAodm9pZClhY3Rpb25TaGVldDooVUlBY3Rpb25TaGVldCAqKWFjdGlvblNoZWV0IGNsaWNr
ZWRCdXR0b25BdEluZGV4OihOU0ludGVnZXIpYnV0dG9uSW5kZXgKK3sKKyAgICBBU1NFUlQoYWN0
aW9uU2hlZXQgPT0gX2ludGVyYWN0aW9uU2hlZXQpOworICAgIGlmIChhY3Rpb25TaGVldCAhPSBf
aW50ZXJhY3Rpb25TaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9lbGVtZW50QWN0
aW9ucyAmJiBidXR0b25JbmRleCA8IChOU0ludGVnZXIpW19lbGVtZW50QWN0aW9ucyBjb3VudF0p
IHsKKyAgICAgICAgV0tFbGVtZW50QWN0aW9uSW5mbyogYWN0aW9uSW5mbyA9IFtbV0tFbGVtZW50
QWN0aW9uSW5mbyBhbGxvY10gaW5pdFdpdGhJbmZvOltOU1VSTCBVUkxXaXRoU3RyaW5nOl92aWV3
LnBvc2l0aW9uSW5mb3JtYXRpb24udXJsXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246X3Zp
ZXcucG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6
X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y3Q6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHNdOworICAgICAgICBbW19lbGVtZW50
QWN0aW9ucyBvYmplY3RBdEluZGV4OmJ1dHRvbkluZGV4XSBydW5BY3Rpb25XaXRoRWxlbWVudElu
Zm86YWN0aW9uSW5mbyB2aWV3Ol92aWV3XTsKKyAgICAgICAgW2FjdGlvbkluZm8gcmVsZWFzZV07
CisgICAgfQorCisgICAgW3NlbGYgY2xlYW51cFNoZWV0XTsKK30KKworLSAodm9pZCl1cGRhdGVT
aGVldFBvc2l0aW9uCit7CisgICAgW19pbnRlcmFjdGlvblNoZWV0IHVwZGF0ZVNoZWV0UG9zaXRp
b25dOworfQorCistICh2b2lkKV9jcmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9uczooTlNBcnJh
eSAqKWFjdGlvbnMgc2hvd0xpbmtUaXRsZTooQk9PTClzaG93TGlua1RpdGxlCit7CisgICAgQVNT
RVJUKCFfaW50ZXJhY3Rpb25TaGVldCk7CisKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOworICAgIEJPT0wg
aXNKYXZhU2NyaXB0VVJMID0gW1t0YXJnZXRVUkwgc2NoZW1lXSBsZW5ndGhdICYmIFtbdGFyZ2V0
VVJMIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImphdmFzY3JpcHQiXSA9PSBOU09y
ZGVyZWRTYW1lOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgaWYgSmF2YXNjcmlwdCBp
cyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcy4KKworICAgIC8vIFRoZSBzaGVldCBpcyByZWxl
YXNlZCBpbiBhY3Rpb25TaGVldDpjbGlja2VkQnV0dG9uQXRJbmRleDoKKyAgICBfaW50ZXJhY3Rp
b25TaGVldCA9IGFkb3B0TlMoW1tXS0FjdGlvblNoZWV0IGFsbG9jXSBpbml0V2l0aFZpZXc6X3Zp
ZXddKTsKKyAgICBfaW50ZXJhY3Rpb25TaGVldC5nZXQoKS5zaGVldERlbGVnYXRlID0gc2VsZjsK
KyAgICBfaW50ZXJhY3Rpb25TaGVldC5nZXQoKS5hY3Rpb25TaGVldFN0eWxlID0gVUlBY3Rpb25T
aGVldFN0eWxlQXV0b21hdGljOworICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmRlbGVnYXRl
ID0gc2VsZjsKKworICAgIE5TU3RyaW5nICp0aXRsZVN0cmluZyA9IG5pbDsKKyAgICBCT09MIHRp
dGxlSXNVUkwgPSBOTzsKKyAgICBpZiAoc2hvd0xpbmtUaXRsZSkgeworICAgICAgICBpZiAoaXNK
YXZhU2NyaXB0VVJMKQorICAgICAgICAgICAgdGl0bGVTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tF
WSgiSmF2YVNjcmlwdCIsICJKYXZhU2NyaXB0IEFjdGlvbiBTaGVldCBUaXRsZSIsICJUaXRsZSBm
b3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsiKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0aXRsZVN0cmluZyA9IFdlYkNvcmU6OnVzZXJWaXNpYmxlU3RyaW5nKHRhcmdl
dFVSTCk7CisgICAgICAgICAgICB0aXRsZUlzVVJMID0gWUVTOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIHRpdGxlU3RyaW5nID0gX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi50aXRs
ZTsKKworICAgIGlmIChbdGl0bGVTdHJpbmcgbGVuZ3RoXSkgeworICAgICAgICBbX2ludGVyYWN0
aW9uU2hlZXQgc2V0VGl0bGU6dGl0bGVTdHJpbmddOworICAgICAgICBpZiAodGl0bGVJc1VSTCkg
eworICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBfdGl0bGVMYWJlbF0gc2V0TGluZUJy
ZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ01pZGRsZV07CisgICAgICAgICAgICBbX2lu
dGVyYWN0aW9uU2hlZXQgc2V0VGl0bGVNYXhMaW5lQ291bnQ6Ml07CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgW1tfaW50ZXJhY3Rpb25TaGVldCBfdGl0bGVMYWJlbF0gc2V0TGluZUJyZWFr
TW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOworICAgIH0KKworICAgIC8vIFRoZSBl
bGVtZW50IGFjdGlvbnMgYXJlIHJlbGVhc2VkIGluIGFjdGlvblNoZWV0OmNsaWNrZWRCdXR0b25B
dEluZGV4OgorICAgIF9lbGVtZW50QWN0aW9ucyA9IGFkb3B0TlMoW2FjdGlvbnMgY29weV0pOwor
ICAgIGZvciAoV0tFbGVtZW50QWN0aW9uICphY3Rpb24gaW4gX2VsZW1lbnRBY3Rpb25zLmdldCgp
KQorICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgYWRkQnV0dG9uV2l0aFRpdGxlOlthY3Rpb24g
dGl0bGVdXTsKKworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXRDYW5jZWxCdXR0b25JbmRleDpb
X2ludGVyYWN0aW9uU2hlZXQgYWRkQnV0dG9uV2l0aFRpdGxlOldFQl9VSV9TVFJJTkdfS0VZKCJD
YW5jZWwiLCAiQ2FuY2VsIGJ1dHRvbiBsYWJlbCBpbiBidXR0b24gYmFyIiwgIlRpdGxlIGZvciBD
YW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiKV1dOworICAgIF9wYWdlLT5zdGFydElu
dGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKF92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24u
cG9pbnQpOworfQorCistICh2b2lkKXNob3dJbWFnZVNoZWV0Cit7CisgICAgQVNTRVJUKCFfaW50
ZXJhY3Rpb25TaGVldCk7CisKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhT
dHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOworICAgIE5TTXV0YWJsZUFycmF5
ICphY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBpZiAoIV92aWV3LnBvc2l0
aW9uSW5mb3JtYXRpb24udXJsLmlzRW1wdHkoKSkKKyAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0
OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50
QWN0aW9uVHlwZU9wZW5dXTsKKyAgICBpZiAoW2dldFNTUmVhZGluZ0xpc3RDbGFzcygpIHN1cHBv
cnRzVVJMOnRhcmdldFVSTF0pCisgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50
QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVB
ZGRUb1JlYWRpbmdMaXN0XV07CisgICAgaWYgKFRDQ0FjY2Vzc1ByZWZsaWdodChnZXRrVENDU2Vy
dmljZVBob3RvcygpLCBOVUxMKSAhPSBrVENDQWNjZXNzUHJlZmxpZ2h0RGVuaWVkKQorICAgICAg
ICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rp
b25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlU2F2ZUltYWdlXV07CisgICAgaWYgKCFbW3Rh
cmdldFVSTCBzY2hlbWVdIGxlbmd0aF0gfHwgW1t0YXJnZXRVUkwgc2NoZW1lXSBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlOkAiamF2YXNjcmlwdCJdICE9IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIFth
Y3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldp
dGhUeXBlOldLRWxlbWVudEFjdGlvblR5cGVDb3B5XV07CisKKyAgICAvLyBGSVhNRTogQWRkIGNh
bGwgdG8gZGVsZWdhdGUgdG8gYWRkIGN1c3RvbSBhY3Rpb25zLgorCisgICAgW3NlbGYgX2NyZWF0
ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOmFjdGlvbnMgc2hvd0xpbmtUaXRsZTpZRVNdOworICAg
IGlmICghX2ludGVyYWN0aW9uU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19p
bnRlcmFjdGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFjdGlvblNoZWV0
Ol9pbnRlcmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0b25BdEluZGV4OltfaW50ZXJhY3Rp
b25TaGVldCBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKXNob3dMaW5rU2hlZXQK
K3sKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJM
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOwor
ICAgIGlmICghdGFyZ2V0VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBOU011dGFibGVBcnJh
eSAqYWN0aW9ucyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgW2FjdGlvbnMgYWRkT2Jq
ZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVt
ZW50QWN0aW9uVHlwZU9wZW5dXTsKKyAgICBpZiAoW2dldFNTUmVhZGluZ0xpc3RDbGFzcygpIHN1
cHBvcnRzVVJMOnRhcmdldFVSTF0pCisgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVt
ZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlvblR5
cGVBZGRUb1JlYWRpbmdMaXN0XV07CisgICAgaWYgKCFbW3RhcmdldFVSTCBzY2hlbWVdIGxlbmd0
aF0gfHwgW1t0YXJnZXRVUkwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiamF2YXNj
cmlwdCJdICE9IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tF
bGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlv
blR5cGVDb3B5XV07CisKKyAgICAvLyBGSVhNRTogQWRkIGNhbGwgdG8gZGVsZWdhdGUgdG8gYWRk
IGN1c3RvbSBhY3Rpb25zLgorCisgICAgW3NlbGYgX2NyZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rp
b25zOmFjdGlvbnMgc2hvd0xpbmtUaXRsZTpZRVNdOworICAgIGlmICghX2ludGVyYWN0aW9uU2hl
ZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghW19pbnRlcmFjdGlvblNoZWV0IHByZXNl
bnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFjdGlvblNoZWV0Ol9pbnRlcmFjdGlvblNoZWV0Lmdl
dCgpIGNsaWNrZWRCdXR0b25BdEluZGV4OltfaW50ZXJhY3Rpb25TaGVldCBjYW5jZWxCdXR0b25J
bmRleF1dOworfQorCistICh2b2lkKXNob3dEYXRhRGV0ZWN0b3JzU2hlZXQKK3sKKyAgICBBU1NF
UlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOworICAgIGlmICghdGFy
Z2V0VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtbZ2V0REREZXRlY3Rpb25Db250
cm9sbGVyQ2xhc3MoKSB0YXBBbmRIb2xkU2NoZW1lc10gY29udGFpbnNPYmplY3Q6W3RhcmdldFVS
TCBzY2hlbWVdXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8gYmUgY2hhbmdlZC4KKyAgICAvLyBXZSBuZWVkIGEgZGlmZmVyZW50IEFQSSBmb3IgREREZWN0
ZWN0aW9uQ29udHJvbGxlciB0aGF0IGRvZXNuJ3QgdGFrZSBET01Ob2RlIGFuZCBXZWJGcmFtZSBv
YmplY3RzLgorICAgIC8vIE5TQXJyYXkgKmRhdGFEZXRlY3RvcnNBY3Rpb25zID0gW1tnZXRERERl
dGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdIGFjdGlvbnNGb3JET01O
b2RlOl9pbnRlcmFjdGlvbi5lbGVtZW50IGZvckZyYW1lOltfd2ViVmlldyBtYWluRnJhbWVdXTsK
KyAgICBOU0FycmF5ICpkYXRhRGV0ZWN0b3JzQWN0aW9ucyA9IG5pbDsKKworICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiB3aWxsIGFsd2F5cyBiZSB0cnVlIGZvciBub3csIHNp
bmNlIHRoZXJlIGFyZSBubyB2aWFibGUgY2FsbHMgdG8gcmV0cmlldmUKKyAgICAvLyBkYXRhIGRl
dGVjdG9yIGFjdGlvbnMuCisgICAgaWYgKFtkYXRhRGV0ZWN0b3JzQWN0aW9ucyBjb3VudF0gPT0g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNNdXRhYmxlQXJyYXkgKmVsZW1lbnRBY3Rpb25z
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBmb3IgKE5TVUludGVnZXIgYWN0aW9uTnVt
YmVyID0gMDsgYWN0aW9uTnVtYmVyIDwgW2RhdGFEZXRlY3RvcnNBY3Rpb25zIGNvdW50XTsgYWN0
aW9uTnVtYmVyKyspIHsKKyAgICAgICAgRERBY3Rpb24gKmFjdGlvbiA9IFtkYXRhRGV0ZWN0b3Jz
QWN0aW9ucyBvYmplY3RBdEluZGV4OmFjdGlvbk51bWJlcl07CisgICAgICAgIFtlbGVtZW50QWN0
aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBjdXN0b21FbGVtZW50QWN0aW9uV2l0aFRp
dGxlOlthY3Rpb24gbG9jYWxpemVkTmFtZV0gYWN0aW9uSGFuZGxlcjpeKFdLRWxlbWVudEFjdGlv
bkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIFVJUG9wb3ZlckNvbnRyb2xsZXIgKnBv
cG92ZXJDb250cm9sbGVyID0gbmlsOworICAgICAgICAgICAgaWYgKFVJX1VTRVJfSU5URVJGQUNF
X0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRpb21QaG9uZSkgeworICAgICAgICAgICAgICAg
IFtfaW50ZXJhY3Rpb25TaGVldCBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOk5PXTsKKyAgICAg
ICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTEwMTU3NTE+IEFjdGlvbiBzaGVldCBiZWNv
bWVzIGJsYWNrIGlmIGEgYnV0dG9uIGlzIGNsaWNrZWQgdHdpY2Ugb24gaVBhZAorICAgICAgICAg
ICAgICAgIC8vIHByZXZlbnQgYW55IGZ1cnRoZXIgdGFwIG9uIHRoZSBzaGVldCB3aGlsZSBERCBp
cyBsb2FkaW5nIGl0cyB2aWV3IGNvbnRyb2xsZXIsIG90aGVyd2lzZSBVSUFjdGlvblNoZWV0IGdv
ZXMgYW1vaworCisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRyb2xsZXIgPSBbX2ludGVyYWN0
aW9uU2hlZXQgX3JlbGlucXVpc2hQb3BvdmVyQ29udHJvbGxlcl07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFtbZ2V0REREZXRlY3Rpb25Db250cm9sbGVyQ2xhc3MoKSBzaGFyZWRDb250
cm9sbGVyXSBwZXJmb3JtQWN0aW9uOmFjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblZpZXc6W3NlbGYg
c3VwZXJ2aWV3Rm9yU2hlZXRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhQb3BvdmVyQ29udHJvbGxlcjpwb3BvdmVyQ29udHJvbGxl
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVyYWN0aW9uRGVsZWdhdGU6c2VsZl07CisgICAgICAgIH1dXTsKKyAgICB9CisKKyAg
ICBbc2VsZiBfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6ZWxlbWVudEFjdGlvbnMgc2hv
d0xpbmtUaXRsZTpOT107CisgICAgaWYgKCFfaW50ZXJhY3Rpb25TaGVldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhlIGltcGxpY2l0IHNlY29uZCBidXR0b24gaXMgImNhbmNlbCIsIHdo
aWNoIGlzIHN3YWxsb3dlZCBieSB0aGUgcG9wb3ZlciBhdCBwcmVzZW50YXRpb24gdGltZS4KKyAg
ICBpZiAoX2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkubnVtYmVyT2ZCdXR0b25zIDw9IDIpCisgICAg
ICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmFycm93RGlyZWN0aW9ucyA9IFVJUG9wb3ZlckFy
cm93RGlyZWN0aW9uVXAgfCBVSVBvcG92ZXJBcnJvd0RpcmVjdGlvbkRvd247CisKKyAgICBpZiAo
IVtfaW50ZXJhY3Rpb25TaGVldCBwcmVzZW50U2hlZXRdKQorICAgICAgICBbc2VsZiBhY3Rpb25T
aGVldDpfaW50ZXJhY3Rpb25TaGVldC5nZXQoKSBjbGlja2VkQnV0dG9uQXRJbmRleDpbX2ludGVy
YWN0aW9uU2hlZXQgY2FuY2VsQnV0dG9uSW5kZXhdXTsKK30KKworLSAodm9pZCljbGVhbnVwU2hl
ZXQKK3sKKyAgICBfcGFnZS0+c3RvcEludGVyYWN0aW9uKCk7CisKKyAgICBbX2ludGVyYWN0aW9u
U2hlZXQgZG9uZVdpdGhTaGVldF07CisgICAgW19pbnRlcmFjdGlvblNoZWV0IHNldFNoZWV0RGVs
ZWdhdGU6bmlsXTsKKyAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0RGVsZWdhdGU6bmlsXTsKKyAg
ICBfaW50ZXJhY3Rpb25TaGVldCA9IG5pbDsKKworICAgIF9lbGVtZW50QWN0aW9ucyA9IG5pbDsK
K30KKworQGVuZAorCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dL
SW50ZXJhY3Rpb25WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaAkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNiArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKKyNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCiAjaW1wb3J0IDxVSUtpdC9VSVdl
YkZvcm1BY2Nlc3NvcnkuaD4KICNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgpAQCAtNTksNCArNjAsOSBAQCBzdHJ1Y3QgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247CiAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkOwog
LSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50ICopdGhlRXZlbnQgaXNDaGFy
RXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQ7CiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlk
Q2hhbmdlOihjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilp
bmZvOworLSAodm9pZClfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbjsK
Ky0gKHZvaWQpX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb247CistICh2b2lkKV9wZXJmb3JtQWN0
aW9uOihXZWJLaXQ6OldLU2hlZXRBY3Rpb25zKWFjdGlvbjsKKworQHByb3BlcnR5IChyZWFkb25s
eSwgbm9uYXRvbWljKSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHBv
c2l0aW9uSW5mb3JtYXRpb247CiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbQkocmV2aXNpb24gMTYzMTc1
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNCBAQAogI2ltcG9ydCAiSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYlRvdWNoRXZlbnQuaCIKKyNpbXBvcnQgIldLQWN0aW9u
U2hlZXRBc3Npc3RhbnQuaCIKICNpbXBvcnQgIldLQmFzZS5oIgogI2ltcG9ydCAiV0tHZXN0dXJl
VHlwZXMuaCIKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJJT1NFdmVudEZhY3Rv
cnkuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzVUkvREREZXRlY3Rpb25Db250cm9sbGVyLmg+
CiAjaW1wb3J0IDxVSUtpdC9VSUZvbnRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlHZXN0
dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5o
PgpAQCAtNDgsOSArNTAsMTQgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkV2
ZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2VsZWN0aW9uUmVjdC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1NPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCitTT0ZUX0xJTktfQ0xBU1MoRGF0
YURldGVjdG9yc1VJLCBERERldGVjdGlvbkNvbnRyb2xsZXIpCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTE2Nyw2ICsxNzQsNyBAQCBAaW50
ZXJmYWNlIFdLSW50ZXJhY3Rpb25WaWV3IChQcml2YXRlKQogICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gX21hcmtlZFRleHQ7CiAgICAgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gX3Bv
c2l0aW9uSW5mb3JtYXRpb247CiAgICAgQk9PTCBfaGFzVmFsaWRQb3NpdGlvbkluZm9ybWF0aW9u
OworICAgIFJldGFpblB0cjxXS0FjdGlvblNoZWV0QXNzaXN0YW50PiBfYWN0aW9uU2hlZXRBc3Np
c3RhbnQ7CiB9CiAKIEBzeW50aGVzaXplIGlucHV0RGVsZWdhdGUgPSBfaW5wdXREZWxlZ2F0ZTsK
QEAgLTIxMyw2ICsyMjEsNyBAQCAtIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IG5vdGlmaWVkIHRo
YXQgbG9hZGluZyBoYXMgY29tcGxldGVkLgogICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFu
dFdpdGhNb2RlOlVJV2ViU2VsZWN0aW9uTW9kZVdlYl07CiAKKyAgICBfYWN0aW9uU2hlZXRBc3Np
c3RhbnQgPSBhZG9wdE5TKFtbV0tBY3Rpb25TaGVldEFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhW
aWV3OnNlbGZdKTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMjIwLDYgKzIyOSw3IEBAIC0g
KHZvaWQpZGVhbGxvYwogewogICAgIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgPSBuaWw7CiAgICAg
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgPSBuaWw7CisgICAgX2FjdGlvblNoZWV0QXNzaXN0YW50
ID0gbmlsOwogICAgIFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5p
bF07CiAgICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwog
ICAgIFtfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKQEAgLTIz
OSw2ICsyNDksNyBAQCAtICh2b2lkKXNldFNjcm9sbFZpZXc6KFVJV2ViU2Nyb2xsVmlldyAqCiAt
ICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2UKIHsK
ICAgICBfcGFnZSA9IHBhZ2U7CisgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzZXRQYWdlOl9w
YWdlXTsKIH0KIAogLSAoQk9PTClpc0VkaXRhYmxlCkBAIC00MTcsMjIgKzQyOCwyOSBAQCAtIChC
T09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvCiAKIC0gKHZvaWQpX3Nob3dJbWFn
ZVNoZWV0CiB7Ci0KKyAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dJbWFnZVNoZWV0XTsK
IH0KIAogLSAodm9pZClfc2hvd0xpbmtTaGVldAogeworICAgIFtfYWN0aW9uU2hlZXRBc3Npc3Rh
bnQgc2hvd0xpbmtTaGVldF07Cit9CiAKKy0gKHZvaWQpX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXQK
K3sKKyAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdOwog
fQogCiAtIChTRUwpX2FjdGlvbkZvckxvbmdQcmVzcwogewogICAgIGlmIChfcG9zaXRpb25JbmZv
cm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSA9PSAiSU1HIikKICAgICAgICAgcmV0dXJuIEBz
ZWxlY3Rvcihfc2hvd0ltYWdlU2hlZXQpOwotICAgIGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0
aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09ICJBIikKKyAgICBlbHNlIGlmIChfcG9zaXRpb25J
bmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSA9PSAiQSIpIHsKKyAgICAgICAgTlNVUkwg
KnRhcmdldFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVy
bF07CisgICAgICAgIGlmIChbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5k
SG9sZFNjaGVtZXNdIGNvbnRhaW5zT2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCisgICAgICAg
ICAgICByZXR1cm4gQHNlbGVjdG9yKF9zaG93RGF0YURldGVjdG9yc1NoZWV0KTsKICAgICAgICAg
cmV0dXJuIEBzZWxlY3Rvcihfc2hvd0xpbmtTaGVldCk7Ci0gICAgLy8gRklYTUU6IEFkZCBjaGVj
ayBmb3IgbGlua3MgYW5kIGRhdGFkZXRlY3RvcnMuCi0KKyAgICB9CiAgICAgcmV0dXJuIG5pbDsK
IH0KIApAQCAtNDQ0LDYgKzQ2MiwxMiBAQCAtICh2b2lkKWVuc3VyZVBvc2l0aW9uSW5mb3JtYXRp
b25Jc1VwVG9ECiAgICAgfQogfQogCistICh2b2lkKV91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9u
Cit7CisgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IE5POworICAgIF9wYWdlLT5y
ZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Cit9
CisKIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2du
aXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFtnZXN0dXJl
UmVjb2duaXplciBsb2NhdGlvbkluVmlldzpzZWxmXTsKQEAgLTU3MiwxOCArNTk2LDEwIEBAIC0g
KHZvaWQpX2xvbmdQcmVzc1JlY29nbml6ZWQ6KFVJTG9uZ1ByZXMKIHsKICAgICBBU1NFUlQoZ2Vz
dHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKIAotICAgIHN3
aXRjaCAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSkgewotICAgIGNhc2UgVUlHZXN0dXJlUmVj
b2duaXplclN0YXRlQmVnYW46Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRpb24K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDoK
LSAgICAgICAgLy8gRklYTUU6IGFkZCBpbXBsZW1lbnRhdGlvbgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKLSAgICAgICAgLy8gRklY
TUU6IGFkZCBpbXBsZW1lbnRhdGlvbgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKKyAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGVCZWdhbikgeworICAgICAgICBTRUwgYWN0aW9uID0gW3NlbGYgX2Fj
dGlvbkZvckxvbmdQcmVzc107CisgICAgICAgIGlmIChhY3Rpb24pCisgICAgICAgICAgICBbc2Vs
ZiBwZXJmb3JtU2VsZWN0b3I6YWN0aW9uXTsKICAgICB9CiB9CiAKQEAgLTY1NCw2ICs2NzAsOCBA
QCAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjCiB7CiAgICAgX3Bvc2l0
aW9uSW5mb3JtYXRpb24gPSBpbmZvOwogICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24g
PSBZRVM7CisgICAgaWYgKF9hY3Rpb25TaGVldEFzc2lzdGFudCkKKyAgICAgICAgW19hY3Rpb25T
aGVldEFzc2lzdGFudCB1cGRhdGVTaGVldFBvc2l0aW9uXTsKIH0KIAogLSAoVUlWaWV3ICopaW5w
dXRBY2Nlc3NvcnlWaWV3CkBAIC03OTIsNiArODEwLDExIEBAIC0gKHZvaWQpX3Jlc2V0U2hvd2lu
Z1RleHRTdHlsZTooTlNOb3RpZmkKICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgaGlkZVRl
eHRTdHlsZU9wdGlvbnNdOwogfQogCistICh2b2lkKV9wZXJmb3JtQWN0aW9uOihXS1NoZWV0QWN0
aW9ucylhY3Rpb24KK3sKKyAgICBfcGFnZS0+cGVyZm9ybUFjdGlvbk9uRWxlbWVudCgodWludDMy
X3QpYWN0aW9uKTsKK30KKwogLSAodm9pZCljb3B5OihpZClzZW5kZXIKIHsKICAgICBfcGFnZS0+
ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgiY29weSIpKTsKQEAgLTExOTEsNyArMTIx
NCw3IEBAIC0gKHZvaWQpYWNjZXNzb3J5Q2xlYXIKIAogLSAodm9pZClfdXBkYXRlQWNjZXNzb3J5
CiB7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW5pdGlhbGl6ZSB3aXRoIHZhbHVzIGZyb20gdGhl
IFdlYlByb2Nlc3MuCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB3aXRoIHZh
bHVlcyBmcm9tIHRoZSBXZWJQcm9jZXNzLgogICAgIF9hY2Nlc3NvcnkubmV4dEVuYWJsZWQgPSBZ
RVM7CiAgICAgX2FjY2Vzc29yeS5wcmV2aW91c0VuYWJsZWQgPSBZRVM7CiAgICAgCkBAIC0xNDI1
LDggKzE0NDgsNyBAQCAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopCiB7
CiB9CiAKLS8qIE1vZGlmeSB0ZXh0IHdpdGhvdXQgc3RhcnRpbmcgYSBuZXcgdW5kbyBncm91cGlu
Zy4KLSAqLworLy8gTW9kaWZ5IHRleHQgd2l0aG91dCBzdGFydGluZyBhIG5ldyB1bmRvIGdyb3Vw
aW5nLgogLSAodm9pZClyZXBsYWNlUmFuZ2VXaXRoVGV4dFdpdGhvdXRDbG9zaW5nVHlwaW5nOihV
SVRleHRSYW5nZSAqKXJhbmdlIHJlcGxhY2VtZW50VGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQkocmV2aXNpb24gMTYzMTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsMjggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RQb3NpdGlvbkluZm9ybQogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24ocG9pbnQpLCBt
X3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzdGFydEludGVyYWN0aW9uV2l0aEVs
ZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKK3sKKyAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxl
bWVudEF0UG9zaXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzdG9wSW50ZXJhY3Rpb24oKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U3RvcEludGVyYWN0aW9uKCksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQoreworICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybUFjdGlvbk9uRWxlbWVudChhY3Rp
b24pLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzYXZlSW1hZ2VUb0xpYnJh
cnkoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFn
ZVNpemUpCit7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSks
IGltYWdlU2l6ZSk7CisgICAgbV9wYWdlQ2xpZW50LnNhdmVJbWFnZVRvTGlicmFyeShidWZmZXIp
OworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6bm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb24oKQogewog
ICAgIG1fcGFnZUNsaWVudC5zZWxlY3Rpb25EaWRDaGFuZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2
MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTMyNyw2ICsxMzI3LDEwIEBACiAJCUMwRTNBQTdDMTIwOUU4
M0MwMEE0OUQwMSAvKiBNb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMwRTNBQTQ0MTIwOUUyQkEwMEE0OUQwMSAvKiBNb2R1bGUuaCAqLzsgfTsK
IAkJQzUxNzM4ODExMkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE3Mzg4MDEyREY4
RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLzsgfTsKIAkJQzUyMzdGNjAx
MjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAv
KiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi87IH07CisJCUM1MjQ1MzkxMTg5QzZCODUwMDNERjQ3
NiAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTI0NTM4RjE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25T
aGVldEFzc2lzdGFudC5oICovOyB9OworCQlDNTI0NTM5MjE4OUM2Qjg1MDAzREY0NzYgLyogV0tB
Y3Rpb25TaGVldEFzc2lzdGFudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1MjQ1MzkwMTg5QzZCODUwMDNERjQ3NiAvKiBXS0FjdGlvblNoZWV0QXNz
aXN0YW50Lm1tICovOyB9OworCQlDNTM1QkQ1OTE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25T
aGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUz
NUJENTcxODkxOUNGQzAwOThGMUY1IC8qIFdLQWN0aW9uU2hlZXQuaCAqLzsgfTsKKwkJQzUzNUJE
NUExODkxOUNGQzAwOThGMUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTM1QkQ1ODE4OTE5Q0ZDMDA5OEYxRjUgLyog
V0tBY3Rpb25TaGVldC5tbSAqLzsgfTsKIAkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdl
YkRyYWdDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNTU0RkZBMjEyRTRFOEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAq
LzsgfTsKIAkJQzU3NEE1ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovOyB9OwogCQlDNTc0QTU4MjEyRTY2
NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5tbSAqLzsgfTsKQEAgLTMwODAsNiArMzA4NCwxMCBAQAogCQlDMEUzQUE0ODEy
MDlFNDUwMDBBNDlEMDEgLyogTW9kdWxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTW9kdWxlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdl
YkVkaXRvckNsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkVkaXRvckNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzUyNDUzOEYxODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oOyBw
YXRoID0gaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzUyNDUzOTAxODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0FjdGlvblNo
ZWV0QXNzaXN0YW50Lm1tOyBwYXRoID0gaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MzVCRDU3MTg5MTlDRkMwMDk4RjFGNSAvKiBX
S0FjdGlvblNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLQWN0aW9u
U2hlZXQuaDsgcGF0aCA9IGlvcy9XS0FjdGlvblNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM1MzVCRDU4MTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tBY3Rpb25TaGVldC5tbTsg
cGF0aCA9IGlvcy9XS0FjdGlvblNoZWV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTU0RkZBMjEyRTRFOEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRyYWdDbGllbnRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQ
YXN0ZWJvYXJkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVi
b2FyZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzRBNTgwMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MTE4LDYgKzQxMjYsMTAgQEAKIAkJCQkyREE5NDQ3OTE4ODRFM0I1MDBFRDg2
REIgLyogUGFnZUNsaWVudEltcGxJT1MubW0gKi8sCiAJCQkJMkRBOTQ0N0ExODg0RTNCNTAwRUQ4
NkRCIC8qIFVJV0tSZW1vdGVWaWV3LmggKi8sCiAJCQkJMkRBOTQ0N0IxODg0RTNCNTAwRUQ4NkRC
IC8qIFVJV0tSZW1vdGVWaWV3Lm1tICovLAorCQkJCUM1MzVCRDU3MTg5MTlDRkMwMDk4RjFGNSAv
KiBXS0FjdGlvblNoZWV0LmggKi8sCisJCQkJQzUzNUJENTgxODkxOUNGQzAwOThGMUY1IC8qIFdL
QWN0aW9uU2hlZXQubW0gKi8sCisJCQkJQzUyNDUzOEYxODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQuaCAqLywKKwkJCQlDNTI0NTM5MDE4OUM2Qjg1MDAzREY0NzYgLyog
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbSAqLywKIAkJCQkyREE5NDQ3QzE4ODRFM0I1MDBFRDg2
REIgLyogV0tDb250ZW50Vmlldy5oICovLAogCQkJCTJEQTk0NDdEMTg4NEUzQjUwMEVEODZEQiAv
KiBXS0NvbnRlbnRWaWV3Lm1tICovLAogCQkJCTJEQTk0NDdFMTg4NEUzQjUwMEVEODZEQiAvKiBX
S0NvbnRlbnRWaWV3SW50ZXJuYWwuaCAqLywKQEAgLTY0NDcsNiArNjQ1OSw3IEBACiAJCQkJMUFC
OEExRjQxODQwMEI4RjAwRTlBRTY5IC8qIFdLUGFnZUZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc1RTc0OUVBMTgwREJCOTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlck1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREE5NDQ5MzE4ODRFM0I1MDBFRDg2REIgLyog
V0tTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTM1QkQ1OTE4OTE5Q0ZDMDA5OEYx
RjUgLyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCQTAxMjdBOEYy
QzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQ0I3NUM2MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VFN0QwRTEyODQ2RjY5MDA5ODI3REEgLyogV2ViQ29udGV4dE1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NzUsNiArNjc4OCw3IEBACiAJCQkJQkM4Njk5
QjcxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCRkE2MTc5RjEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzU1NDIyQ0MxODA3NzNDRTAwNDZGNkE4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTI0NTM5MTE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAw
NkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIy
MEI3RTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzk4OUQ4MjE2MUE3RTVEMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLmggaW4gSGVh
ZGVycyAqLywKQEAgLTc3ODAsNiArNzc5NCw3IEBACiAJCQkJMUFEMzMwNkUxNkIxRDk5MTAwNEY2
MEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNFQ0QyNDE3
MTYyREIxMDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEzMzRERUQxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1MzVCRDVBMTg5MTlDRkMwMDk4RjFGNSAvKiBXS0Fj
dGlvblNoZWV0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0NEI5NUIxNkI3M0Y5RjAwQjdCQkQ4
IC8qIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjMxQTk2MTZCQzY4
ODEwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTQ0Qjk1NzE2QjczN0FBMDBCN0JCRDggLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTU2LDYgKzc5NzEsNyBAQAogCQkJCTJEQTk0NEEx
MTg4NEU0RjAwMEVEODZEQiAvKiBXZWJJT1NFdmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQ0JEMzkxNDEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBM0U3MzYyMTFDQzI2NTkwMDdCRDUzOSAvKiBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzUyNDUzOTIxODlD
NkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDMDMzN0RERDEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDBENDM2MTgzQjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgJKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw2ICs0MzAsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKICAgICB2b2lkIGdldFBvc2l0aW9uSW5m
b3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiYpOwogICAgIHZvaWQgcmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVu
dEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0b3BJbnRl
cmFjdGlvbigpOworICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rp
b24pOwogI2VuZGlmCiAKICAgICBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIq
IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigpOwpAQCAtMTA0MSw2ICsxMDQ0
LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1MpCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IG1fYXNzaXN0ZWROb2RlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9jdXJyZW50
V29yZFJhbmdlOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2ludGVyYWN0aW9uTm9kZTsK
ICAgICBib29sIG1fc2hvdWxkUmV0dXJuV29yZEF0U2VsZWN0aW9uOwogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAxNjMxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
OSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBDb25maXJtQ29t
cG9zaXRpb24oKQogICAgIEdldFBvc2l0aW9uSW5mb3JtYXRpb24oV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQpIC0+IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9y
bWF0aW9uKQogICAgIFJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKFdlYkNvcmU6OkludFBvaW50
IHBvaW50KQorICAgIFN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQpCisgICAgU3RvcEludGVyYWN0aW9uKCkKKyAgICBQZXJmb3JtQWN0
aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbikKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2MzE3NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTMgKzQ0LDE2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50VHlw
ZUhlbHBlcnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1L
ZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZUJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgpA
QCAtODA5LDYgKzgxMiwxNCBAQCB2b2lkIFdlYlBhZ2U6OmdldEF1dG9jb3JyZWN0aW9uQ29udGV4
dChTCiAgICAgY29tcHV0ZUF1dG9jb3JyZWN0aW9uQ29udGV4dChtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLCBjb250ZXh0QmVmb3JlLCBtYXJrZWRUZXh0LCBz
ZWxlY3RlZFRleHQsIGNvbnRleHRBZnRlciwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKK3N0YXRp
YyBFbGVtZW50KiBjb250YWluaW5nTGlua0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBmb3IgKEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDsgY3VycmVudEVsZW1lbnQ7
IGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAg
ICAgaWYgKGN1cnJlbnRFbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50RWxlbWVudDsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlv
bkluZm9ybWF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24mIGluZm8pCiB7CiAgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50OwpAQCAt
ODE5LDE2ICs4MzAsMjAgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNv
bgogICAgIGlmIChoaXROb2RlKSB7CiAgICAgICAgIGluZm8uY2xpY2thYmxlRWxlbWVudE5hbWUg
PSBoaXROb2RlLT5ub2RlTmFtZSgpOwogCi0gICAgICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gdG9IVE1MRWxlbWVudChoaXROb2RlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IGhpdE5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChoaXROb2RlKSA6IDA7CiAgICAg
ICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZWxl
bWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkp
IHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQtPnJlbmRlcmVy
KCkpLT5jYWNoZWRJbWFnZSgpLT51cmwoKTsKLSAgICAgICAgICAgIGlmICghdXJsLnN0cmluZygp
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGluZm8udXJsID0gdXJsLnN0cmluZygpOworICAg
ICAgICAgICAgRWxlbWVudCogbGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoZWxl
bWVudCk7CisKKyAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudCkKKyAgICAgICAgICAgICAgICBp
bmZvLnVybCA9IGxpbmtFbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6aHJlZkF0dHIpKSk7OwogICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlzTGluaygpKQot
ICAgICAgICAgICAgaW5mby51cmwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpo
cmVmQXR0cikuc3RyaW5nKCk7CisgICAgICAgICAgICBpbmZvLnVybCA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpOworICAgICAgICBpbmZvLnRp
dGxlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dGl0bGVBdHRyKS5zdHJpbmco
KTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpbmZvLmJv
dW5kcyA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1l
KCk7CiAgICAgICAgIGhpdE5vZGUgPSBmcmFtZS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0
QXRQb2ludCgocG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVz
dDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCkuaW5uZXJO
b2RlKCk7CkBAIC04NTIsNiArODY3LDU1IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdFBvc2l0aW9u
SW5mb3JtYXRpb24KICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVQ
b3NpdGlvbkluZm9ybWF0aW9uKGluZm8pKTsKIH0KIAordm9pZCBXZWJQYWdlOjpzdGFydEludGVy
YWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2lu
dCkKK3sKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgbV9pbnRlcmFjdGlvbk5v
ZGUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhwb2lu
dCwgYWRqdXN0ZWRQb2ludCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c3RvcEludGVyYWN0aW9uKCkK
K3sKKyAgICBtX2ludGVyYWN0aW9uTm9kZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViUGFnZTo6
cGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pCit7CisgICAgaWYgKCFtX2lu
dGVyYWN0aW9uTm9kZSB8fCAhbV9pbnRlcmFjdGlvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50
KG1faW50ZXJhY3Rpb25Ob2RlLmdldCgpKTsKKyAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGF0aWNfY2FzdDxXS1NoZWV0QWN0aW9ucz4o
YWN0aW9uKSA9PSBXS1NoZWV0QWN0aW9uQ29weSkgeworICAgICAgICBpZiAoZWxlbWVudC0+cmVu
ZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSB7CisgICAgICAgICAgICBFbGVtZW50KiBsaW5rRWxl
bWVudCA9IGNvbnRhaW5pbmdMaW5rRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWxpbmtFbGVtZW50KQorICAgICAgICAgICAgICAgIG1faW50ZXJhY3Rpb25Ob2Rl
LT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoKlBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqZWxlbWVudCwgdG9SZW5kZXJJbWFn
ZShlbGVtZW50LT5yZW5kZXJlcigpKS0+Y2FjaGVkSW1hZ2UoKS0+dXJsKCksIFN0cmluZygpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ludGVyYWN0aW9uTm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS5jb3B5VVJMKGxpbmtFbGVtZW50LT5kb2N1bWVudCgp
LmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhsaW5rRWxlbWVu
dC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpKSksIGxpbmtFbGVtZW50LT50ZXh0
Q29udGVudCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgeworICAg
ICAgICAgICAgbV9pbnRlcmFjdGlvbk5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCku
Y29weVVSTChlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0
cikpKSwgZWxlbWVudC0+dGV4dENvbnRlbnQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KHN0YXRpY19jYXN0PFdLU2VsZWN0aW9uVG91Y2g+KGFjdGlvbikgPT0gV0tTaGVldEFjdGlvblNh
dmVJbWFnZSkgeworICAgICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCktPmlzUmVuZGVySW1h
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LT5yZW5kZXJlcigpKS0+Y2FjaGVkSW1hZ2UoKTsK
KyAgICAgICAgaWYgKGNhY2hlZEltYWdlKSB7CisgICAgICAgICAgICBTaGFyZWRNZW1vcnk6Okhh
bmRsZSBoYW5kbGU7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBj
YWNoZWRJbWFnZS0+cmVzb3VyY2VCdWZmZXIoKS0+c2hhcmVkQnVmZmVyKCk7CisgICAgICAgICAg
ICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYnVmZmVyU2l6ZSA9IGJ1
ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJl
ZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGJ1ZmZlclNpemUpOworICAgICAg
ICAgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgICAgICAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlSW1hZ2VUb0xpYnJhcnkoaGFuZGxl
LCBidWZmZXJTaXplKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZv
aWQgV2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiB7CiAgICAg
bV9hc3Npc3RlZE5vZGUgPSBub2RlOwo=
</data>
<flag name="review"
          id="246896"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>